
小程序卡片消息是聊天和 App 服务之间的桥——用户在对话里点一下卡片直接落到小程序的具体页面。它的工程要点在卡片参数怎么拼和落地页怎么接。一、小程序卡片的结构发送小程序消息的参数组合比链接消息复杂小程序的 appid、页面路径path决定落地到哪个页面、标题、缩略图。其中页面路径是灵魂——同一个小程序路径带不带订单号参数用户体验天差地别。卡片发出去能不能正常打开取决于 appid 和路径的正确性。程序发送前最好先验证路径模板渲染后的完整性——占位符没填的路径点开就是报错页。二、通知类场景——状态变化带直达入口订单、预约、审批这类状态通知配上小程序卡片就是通知直达用户看到订单已发货点卡片直接进订单详情页。比链接消息的优势在于免登录——小程序内通常已有登录态用户点开就能看不用再走一遍验证。通知卡片的路径参数设计路径必须带业务主键订单号、预约 ID落地页按参数渲染对应数据。参数缺失或错误的路径要在发送前拦截。三、服务引导场景——把功能送到对话里用户在对话里问怎么查物流预约什么时候程序识别意图后直接发对应功能页的卡片——查物流卡片、预约管理卡片。用户不用自己找入口对话即服务。引导卡片的关键是意图识别的准确率——识别错了推错页面用户反而困惑。低置信度时宁可发文本问一句不硬推卡片。四、点击数据回流小程序侧埋点记录卡片点击和发送日志按用户批次对账就能算出每类卡片的打开率。打开率低的通知卡片换标题和缩略图测试打开率持续低的服务引导检查意图识别逻辑。小程序消息场景对照场景路径特点发送时机优化指标状态通知带业务主键参数事件触发打开率功能引导固定功能页意图识别触发意图准确率活动推广活动页渠道参数活动周期转化率小程序卡片发送实现MINIAPP { appid: wx1234567890, order_page: pages/order/detail?no{order_no}, booking_page: pages/booking/index, } def send_order_card(order): 发货通知卡片 path MINIAPP[order_page].format(order_noorder[no]) if { in path: # 路径校验占位符必须填满 return False, 路径参数缺失 r api(sendMiniApp, { wId: WID, toUser: order[wxid], appid: MINIAPP[appid], page: path, title: f您的订单已发货, thumb: THUMB_ORDER }) if r.get(code) 1000: db.save(miniapp_log, { wxid: order[wxid], path: path, scene: order_notify, sent_at: now()}) return True, 已发送 return False, r.get(code) app.post(/webhook) def webhook(): d request.json if d.get(messageType) 1: text d.get(content, ) wxid d[fromUser] intent classify_intent(text) # 意图识别 if intent query_logistics: order get_latest_order(wxid) if order: send_order_card(order) else: sendText(WID, wxid, 请提供订单号帮您查询~) return {code: 1000}落地建议小程序消息先跑通通知类场景——路径参数固定、触发事件明确最容易标准化。功能引导类依赖意图识别放第二步。所有卡片发送前做路径校验发送后记录日志和对账打开率形成优化闭环。小程序消息接口参数说明参考 Eyun 开发文档平台开通见 Eyun 官网。