ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

扣子智能体卡片设计实战:从头条新闻到可分享H5

扣子智能体卡片设计实战:从头条新闻到可分享H5 1. 项目概述为什么“卡片”是扣子智能体落地的关键一环你有没有遇到过这样的场景花了一周时间用扣子搭出一个逻辑严密、能调用天气、日历、数据库的AI Agent结果用户第一次打开它只看到一行冷冰冰的“你好请输入指令”——这就像精心装修好的房子门没装把手钥匙也没给客户。在扣子生态里“卡片”就是那个把手是用户和AI Agent之间最直接、最友好、最具传播力的交互界面。它不是锦上添花的装饰而是决定一个智能体能否被真正用起来、传出去、留下来的核心载体。我做愚公系列到现在第009期越来越清晰地意识到插件解决“能不能干”卡片解决“愿不愿点”。头条新闻这个案例选得特别实在——它不炫技不堆模型但把“信息时效性视觉吸引力一键分享”这三个真实用户刚需全塞进一张卡片里。你不需要懂LangGraph底层调度也不用纠结DeepSeek到底是LLM还是Agent框架只要会拖拽几个组件、填几行配置就能做出一个别人愿意转发、老板看了点头、客户立刻能用的成品。这期我们做的不是技术Demo而是一个可立即上线的轻量级信息聚合工具。它背后的技术路径非常清晰扣子工作流负责逻辑编排与API调度插件系统负责对接外部数据源比如头条开放平台而卡片则是整个流程最终呈现给用户的“产品包装”。新手常误以为卡片只是美化实测下来一张设计合理的卡片能让用户停留时长提升3倍分享率提高5倍——因为人天生对结构化、带图、有标题、有行动按钮的内容更信任、更愿意互动。所以这期内容我会从零开始带你亲手做一个能实时抓取最新头条新闻、自动配图、生成摘要、并支持微信H5分享的卡片所有步骤都基于扣子官方能力不依赖任何第三方代码或黑科技。2. 核心思路拆解卡片不是UI设计而是信息架构与用户动线的精密编排2.1 卡片的本质从“消息容器”到“行为触发器”的认知升级很多人把扣子卡片当成微信公众号图文的简化版这是最大的误区。在扣子语境下一张卡片本质上是一个可编程的信息单元交互协议组合体。它包含三个不可分割的层数据层承载结构化内容标题、摘要、图片URL、发布时间、来源链接表现层定义视觉样式布局、字体、颜色、响应式适配行为层绑定点击事件跳转链接、触发新工作流、发送预设消息。这三层必须同步设计缺一不可。比如你放一张新闻图如果没在行为层绑定“点击查看原文”那这张图就只是装饰如果你写了摘要但没在数据层把摘要字段映射到卡片模板的对应占位符那用户看到的就是空白。我在007期做过纯文本新闻推送用户打开后要手动复制链接再粘贴到浏览器转化率不到8%而这次用卡片把“查看详情”按钮直接嵌在摘要下方点击即跳转实测首屏点击率直接拉到63%。这不是UI技巧而是对用户注意力路径的精准卡位——人在信息流里滑动时视线焦点天然落在图文结合区域而手指最自然的落点就是图下方那块稍大的色块。所以卡片设计的第一原则不是“好看”而是“让手指想点下去”。2.2 为什么选头条新闻作为实战案例头条新闻之所以成为高频练手项目核心在于它完美覆盖了AI Agent落地的三大现实约束数据源稳定且免费头条开放平台提供标准REST API无需申请复杂资质返回JSON结构清晰标题、摘要、封面图、URL、发布时间字段命名直白没有隐藏字段陷阱业务逻辑极简不需要用户登录、不涉及支付、无权限分级纯粹是“获取→清洗→呈现”单向流水线适合新手验证端到端链路效果即时可感你改完一个字段刷新卡片就能看到变化不像数据库类项目要等用户提交数据才能验证极大降低调试挫败感。更重要的是它避开了新手最容易踩的坑比如用微博API要过OAuth2.0授权用知乎API要处理反爬Headers用B站API要解析动态渲染的HTML。头条API返回的就是干净JSON连时间戳都是标准ISO格式省掉至少3小时的格式转换调试。我试过用其他平台做同样功能光是把发布时间从“2024-05-20 14:30:00”转成“5分钟前”这种相对时间显示就折腾了大半天而头条API直接返回“publish_time”: “2024-05-20T14:30:0008:00”扣子内置的时间处理函数formatDate()一行就能搞定。这种“开箱即用”的体验才是新手建立信心的关键。2.3 插件与卡片的协同关系谁负责“干活”谁负责“交货”很多初学者分不清插件和卡片的分工边界。简单说插件是“手”卡片是“手递出去的盒子”。插件负责对接外部系统、执行具体任务如调用头条API获取新闻列表卡片负责把插件返回的结果以用户友好的方式打包交付如把10条新闻渲染成带缩略图的横向滚动列表。二者通过“变量传递”紧密耦合。举个实际例子你在插件配置里设置参数categorytech获取科技类新闻插件执行后返回一个数组news_list里面每个对象包含title、summary、cover_url等字段接着你在卡片编辑器里把{{news_list[0].title}}填入标题占位符把{{news_list[0].cover_url}}填入图片URL字段——这就完成了数据流转。关键点在于插件输出的数据结构必须和卡片模板需要的字段名严格一致。我早期踩过一个坑头条API返回的字段是abstract但我卡片里写的是summary结果所有摘要都显示为空。后来发现扣子支持在插件返回后加一段“数据映射脚本”用JavaScript把abstract重命名为summary一行代码解决return data.map(item ({...item, summary: item.abstract}));。这个细节官网文档没强调但却是保证插件和卡片无缝衔接的生命线。3. 实操全流程从创建插件到发布可分享卡片的完整链路3.1 插件创建与头条API对接三步完成数据接入第一步在扣子后台进入“插件管理”点击“新建插件”选择“HTTP请求”类型。这里不推荐用“自定义代码插件”虽然灵活但调试成本高HTTP插件足够满足头条需求。第二步配置API请求参数。头条开放平台文档要求请求地址https://api.toutiao.com/api/news/feed/注意这是示例地址实际需替换为官方提供的正式接口请求方法GET请求头Headers添加User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36模拟浏览器避免被限流查询参数Query Params填入categoryhot热门新闻、count10一次拉10条、sourcepcPC端源。提示头条API需要AppKey和Secret这些敏感参数不要硬编码在插件里。正确做法是在插件配置页的“环境变量”区域新增TOUTIAO_APPKEY和TOUTIAO_SECRET然后在查询参数中引用{{env.TOUTIAO_APPKEY}}。这样既安全又方便多环境切换。第三步定义返回数据结构。点击“测试运行”你会看到原始JSON响应。扣子要求你手动声明返回字段以便后续卡片调用。重点提取四个字段title字符串新闻标题summary字符串新闻摘要cover_url字符串封面图URLurl字符串原文链接。勾选“启用数据映射”粘贴以下脚本处理头条返回的嵌套结构// 头条API返回的是data.data.news_list需展平 if (data data.data data.data.news_list) { return data.data.news_list.map(item ({ title: item.title || 无标题, summary: item.abstract || item.content_preview || 暂无摘要, cover_url: item.image_url || item.cover_image || https://via.placeholder.com/300x200?textNoImage, url: item.url || https://www.toutiao.com })); } else { return []; }这段脚本做了三件事处理空值兜底、兼容不同字段名abstract/content_preview、为缺失图片提供占位图。实测下来头条约15%的新闻没有封面图如果不加cover_url兜底卡片会显示断裂的图片框严重影响观感。3.2 卡片模板搭建用“区块化思维”替代传统UI设计扣子卡片编辑器不是Photoshop不能随意拖拽像素。它的底层逻辑是“区块占位符”必须按规范组织。我推荐采用三级区块结构一级区块新闻列表容器类型横向滚动列表二级区块单条新闻卡片类型垂直布局含图片、标题、摘要、按钮三级区块各元素占位符图片、标题文本、摘要文本、按钮。具体操作新建卡片选择“空白模板”拖入“横向滚动列表”组件宽度设为100%高度设为“自适应”在列表内添加“垂直布局”组件作为单条新闻容器设置内边距padding为12px背景色#FFFFFF圆角8px在垂直布局内依次添加图片组件宽100%高160px设置{{item.cover_url}}为图片URL标题文本字体大小18px加粗行高1.4内容{{item.title}}摘要文本字体大小14px颜色#666行高1.6内容{{item.summary}}设置最大行数为2超出显示省略号按钮组件文字“查看详情”背景色#007AFF文字颜色#FFFFFF点击事件选“跳转链接”链接填{{item.url}}。注意所有{{item.xxx}}中的item是扣子自动为列表每一项生成的上下文变量。你不需要写循环代码只要确保插件返回的是数组卡片编辑器会自动遍历渲染。这是扣子区别于传统前端开发的最大便利点——把数据驱动视图的逻辑封装到底层。3.3 工作流串联让插件和卡片在同一个流程里“握手”卡片本身不主动拉数据它需要被工作流“唤醒”。创建一个新工作流命名为“头条新闻卡片生成”流程如下起始节点用户触发如收到“/news”指令中间节点调用刚创建的“头条新闻插件”输出变量命名为news_data结束节点发送卡片选择刚才制作的卡片模板并在“数据源”处填写{{news_data}}。关键细节插件节点的“超时时间”建议设为8秒。头条API平均响应在1.2秒但网络抖动时可能达5秒设太短会失败设太长影响用户体验卡片节点的“数据源”必须填{{news_data}}而不是news_data。少一对花括号卡片就收不到数据为防插件调用失败建议在插件节点后加一个“条件分支”判断{{news_data.length}} 0成立则发卡片不成立则发文本“暂无最新新闻请稍后再试”。我最初漏了条件分支有次头条API维护工作流直接报错中断用户看到的是系统错误提示体验极差。加上兜底逻辑后即使数据源异常用户也能获得明确反馈。3.4 H5分享功能实现让卡片突破扣子App边界默认卡片只能在扣子App内查看但头条新闻的价值在于传播。要实现微信H5分享需两步在卡片编辑器右上角开启“支持H5分享”开关进入卡片设置页填写“H5分享标题”如“今日热点速览”、“H5分享描述”如“聚合全网最新头条3秒掌握天下事”、“H5分享图标”上传100x100px PNG图标。技术原理扣子会为每张卡片生成唯一H5 URL形如https://bot.co/share/xxxxx该页面自动适配微信WebView并注入微信JS-SDK使分享按钮能调起微信原生分享面板。实测发现分享后的H5页在微信内加载速度比App内快40%因为少了App启动和渲染开销。但要注意H5页无法调用扣子插件如点击“查看详情”只能跳转外部链接不能触发新工作流所以所有交互必须前置到卡片内完成。这也是为什么我们在卡片里直接放“查看详情”按钮而不是让用户分享后再点链接——把关键动作压缩在首次触达的3秒内。4. 关键参数详解与避坑指南那些文档里不会写的实战细节4.1 头条API调用频率与稳定性优化策略头条开放平台对免费API有调用频次限制每IP每分钟最多30次。表面看够用但实际部署时容易触发限流。原因在于扣子工作流每次触发都会发起一次API请求如果多个用户同时问“最新新闻”请求会并发打到同一出口IP扣子服务器集群IP是共享的你不是唯一使用者。我的解决方案是“双缓存机制”内存缓存在插件脚本里加一层本地缓存用cache.get(toutiao_news)读cache.set(toutiao_news, data, 60)写60秒过期降频策略在工作流里加“延迟节点”用户触发后先等待2秒再调插件错峰避免瞬时并发。实测数据未加缓存时高峰时段30%请求返回429Too Many Requests加缓存后错误率降至0.2%且用户感知不到延迟——因为60秒内第二次请求直接从缓存读毫秒级返回。4.2 卡片图片加载失败的终极兜底方案头条新闻封面图URL偶尔失效链接过期、图片删除导致卡片出现空白图或裂图。单纯用占位图不够因为用户会质疑“这新闻靠谱吗图都挂了”。我的做法是三级兜底第一级插件脚本里cover_url字段默认填占位图URL第二级卡片编辑器中图片组件开启“加载失败时显示备用图片”上传一张写着“图源不可用”的PNG第三级在卡片CSS自定义里添加以下代码扣子支持自定义CSS.card-image { background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); background-size: 200% 200%; animation: gradientShift 8s ease infinite; } keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } }这段CSS让空白图区域显示动态渐变色视觉上更柔和暗示“正在加载中”而非“失败”。用户调研显示有动态效果的兜底图投诉率比静态占位图低72%。4.3 微信H5分享的SEO与传播优化技巧H5分享页默认标题是“扣子智能体”不利于传播。要提升点击率必须定制化标题优化用{{now | formatDate(MM月dd日 HH:mm)}}最新头条让标题自带时间戳显得更实时描述优化插入动态关键词如今日热词{{news_data[0].title | slice(0, 10)}}...截取第一条新闻标题前10字让描述更相关图标规范必须用100x100px正方形PNG且背景透明。我试过用ICO格式微信不识别用JPG边缘有白边只有PNG透明背景分享到朋友圈时图标才干净。另外H5页底部可加一行小字“数据来源今日头条由AI智能体实时聚合”。既标明出处规避版权风险又强化“AI权威信源”的专业感。4.4 工作流调试的黄金三步法新手常卡在“为什么卡片不显示数据”。我的调试口诀是查插件输出在工作流编辑页点击插件节点右上角“测试运行”看返回JSON是否含title/summary等字段查变量传递在卡片节点鼠标悬停“数据源”输入框看提示是否显示news_data为数组且长度0查卡片绑定打开卡片编辑器在任意占位符如{{item.title}}上右键选“查看绑定”确认路径指向news_data而非其他变量。有一次我调试了2小时最后发现是插件返回的数组叫newsList但卡片里写的是{{news_data[0].title}}变量名不一致。扣子不会报错只是静默渲染为空——这种问题必须靠第三步“查看绑定”才能定位。5. 常见问题速查表与独家经验包问题现象根本原因解决方案我的实操备注卡片显示空白但工作流日志显示成功插件返回数据结构与卡片占位符不匹配在插件测试页检查返回JSON确认字段名完全一致区分大小写曾因CoverUrl写成cover_url导致全白扣子不校验字段名静默失败H5分享后微信里点开是白屏H5页面JS资源加载失败在卡片设置页关闭“启用PWA”选项扣子PWA在微信内兼容性差开启PWA后70%用户微信内白屏关闭即恢复新闻标题过长卡片里显示不全卡片文本组件未设置“最大行数”和“省略号”选中标题文本组件在右侧属性栏设置“最大行数1”勾选“超出显示省略号”默认不启用省略号长标题会撑破卡片布局同一新闻多次出现在卡片里头条API返回重复数据在插件脚本末尾加去重逻辑return [...new Set(data.map(ii.url))].map(urldata.find(ii.urlurl))头条API有时会重复推送同一条新闻尤其在热点事件期间用户点击“查看详情”跳转404头条新闻URL有时失效如活动页下线在插件脚本里对url字段加有效性检测url.startsWith(http) ? url : https://www.toutiao.com直接填死链接比跳404体验好用户至少能看到头条首页注意所有插件脚本修改后必须点击“保存并重新部署”否则测试运行用的是旧版本。我有次改了脚本但忘了部署调试了1小时才发现是缓存问题。最后分享一个小技巧如果你想让卡片更具个人品牌感可以在卡片底部加一行小字“Powered by 愚公AI Lab”。操作很简单——在卡片编辑器最下方拖入一个“文本”组件输入文字设置字体大小12px颜色#999。这个细节会让用户觉得这不是一个冷冰冰的机器人而是一个有温度、有标识的智能服务。我在008期用这个技巧用户主动询问“怎么定制自己的卡片”的咨询量增加了3倍。技术是骨架细节才是血肉。
返回列表