文本消息之外,企微机器人还有一组"卡片型"消息:图文链接卡片、名片、位置、小程序,各有各的 content 结构。这篇把四类卡片的消息结构一次讲清,重点在每类的字段构成和小程序封面这个特殊处理。

背景痛点

卡片消息的报错往往不在接口层:结构不对时有的直接失败,有的字段被静默丢弃,对方收到一条缺胳膊少腿的卡片。原因通常是照抄别人的示例没核对结构。四类卡片的 content 长得不一样,且发送成功的返回里会原样回显 content,正好可以用来核对。

原理

卡片消息和文本消息走同一套发送模型:每类一个接口路径,content 承载结构化内容,发送成功后返回的 data 就是刚发出的那条消息,data.content 与传入结构对应。四类卡片的 content 构成如下:

卡片类型

接口

content 要点

链接卡片

sendLink

标题、描述、图片;视频号卡片走专门的子对象

名片

sendNameCard

目标用户的身份与展示信息,含企业与头像字段

位置

sendLocation

经纬度、地址、标题

小程序

sendMiniProgram

标题加 miniProgramDetails 小程序信息(用户名、appId、页面路径等)

图片资源都用上传图片接口拿凭证:链接卡片的图、小程序的封面图都是先上传再填字段,这点是共通的。

核心实现

发一张链接卡片(示例代码,需按官方文档校验):

def send_link_card(appid: str, conversation_id: int, image_cred: dict):
    # 示例代码,需按官方文档校验
    return api("/wx-api/api/message/sendLink", {
        "appid": appid,
        "conversationId": conversation_id,
        "content": {
            "title": "11月服务安排",
            "description": "本月值班表与常见问题入口",
            "imageUrl": image_cred,      # 上传图片拿到的凭证
            "linkUrl": "https://example.com/plan",
        },
    })   # 字段名以接口页为准

小程序卡片的关键差异:封面不是独立字段,而是填在 content 的小程序信息对象里的封面字段,不能用上传结果替换整个 content,结构细节见Eyun 企微API 开发文档。

踩坑

一、链接卡片发送成功的返回里不含链接地址,只回显图片、标题、描述,别拿返回值当完整卡片存档,请求体自己留底。

二、小程序封面上传后填错位置是最常见失败:封面属于小程序信息对象,不在 content 顶层,替换整个 content 会让卡片结构整体失效。

三、位置消息的经纬度是数值类型,字符串经纬度会解析失败;地址文案与经纬度不一致时,客户端显示以文案为准,测试时用真实地点核对。

四、四类卡片的验收都在客户端看:接口返回 code 0 只代表结构受理成功,图片裂没裂、卡片跳转对不对,要在手机上确认。

总结

卡片消息把通知从"一行字"升级成"可点击的服务入口",四类的选型口诀:导流用链接卡片、推人用名片、报坐标用位置、带服务用小程序。这篇基于 Eyun 平台的企微接口整理,四类接口的完整字段表见Eyun平台,示例代码按官方文档校验后再进生产。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐