小程序卡片消息是聊天和 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_no=order["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 官网。