配置企微机器人发送卡片消息,核心是在 Webhook 请求体中将 msgtype 设为 template_card,并按官方 schema 填充卡片结构,适用于需要按钮交互或结构化展示的场景。
先说结论:使用群机器人 Webhook 接口,消息类型指定为 template_card,参数需严格符合卡片模板 schema 定义。
- 适合:需要用户在消息卡片上点击按钮、查看结构化信息的场景。
- 先准备:已创建的群机器人 Webhook 地址,以及符合规范的 JSON payload。
- 验收:发送后接口返回 errcode 为 0,且群内卡片渲染正常、按钮可点击。
核心配置步骤
1. 获取 Webhook 地址:在企微群聊中添加机器人,复制生成的 Webhook 链接,注意保留完整 URL。
2. 确定卡片类型:根据需求选择 card_type,不同类型支持的字段差异较大,切勿混用。
- text_notice(文本通知):适合纯文本展示,必填 source、main_title、emphasis_content。
- button_interaction(按钮交互):适合需要用户点击反馈的场景,需额外配置 action_menu 和 task_id。
3. 构造请求体:按照选定的卡片类型填充 template_card 对象。以下是一个基础的文本通知型卡片参数示例:
{
"msgtype": "template_card",
"template_card": {
"card_type": "text_notice",
"source": {
"icon_url": "图片 URL",
"desc": "数据来源"
},
"main_title": {
"title": "标题",
"desc": "摘要信息"
},
"emphasis_content": {
"title": "重点内容",
"desc": "重点描述"
},
"sub_title_text": "副标题",
"jump_url": "点击卡片跳转链接",
"task_id": "任务 ID"
}
}4. 发送请求:使用 curl 命令发起 HTTP POST 请求,需指定 Content-Type 为 application/json。
curl -X POST 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WEBHOOK_KEY' \
-H 'Content-Type: application/json' \
-d '{"msgtype":"template_card","template_card":{"card_type":"text_notice","source":{"icon_url":"https://example.com/icon.png","desc":"测试"},"main_title":{"title":"测试标题","desc":"测试摘要"},"emphasis_content":{"title":"重点","desc":"内容"}}}'5. 签名校验(可选但推荐):如果机器人开启了签名校验,需要在 URL 后拼接 timestamp 和 signature 参数,否则请求会被拒绝。
签名计算公式:signature = hex(hmac_sha1(secret, timestamp))
Python 实现示例:
import hmac
import hashlib
import time
def generate_signature(secret, timestamp):
hmac_code = hmac.new(
secret.encode(),
timestamp.encode(),
hashlib.sha1
).hexdigest()
return hmac_code
# 使用示例
timestamp = str(int(time.time()))
signature = generate_signature("YOUR_SECRET", timestamp)
webhook_url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY×tamp={timestamp}&signature={signature}"验证方法
1. 检查接口响应:发送请求后,立即检查 HTTP 响应体。若返回 {"errcode":0,"errmsg":"ok"} 表示接口接收成功。
2. 观察群消息:进入企微群聊,确认卡片消息是否正常渲染,图片是否加载,文字是否截断。
3. 测试交互:如果配置了按钮或跳转链接,实际点击测试,确认是否能正确跳转 URL 或触发回调事件。
4. 查看日志:如果是自建应用接收回调,检查服务器日志是否收到企微推送的 event 事件。
常见错误排查
1. 特殊字符转义:JSON 中的双引号、换行符必须正确转义,否则会导致解析失败。
2. 内容长度限制:标题、描述等内容字段有长度限制,超出部分可能被截断或导致发送报错,具体限制需参考官方文档最新说明。
3. 图片链接要求:source 中的 icon_url 必须是可公开访问的 HTTPS 链接,内网地址或 HTTP 链接可能无法加载。
4. 签名校验遗漏:若后台开启了签名校验,忘记计算 signature 会导致请求被拦截,表现为接口返回权限错误。
5. 卡片类型混用:不同 card_type 支持的字段差异较大,不要将按钮交互型的参数填到文本通知型中。
参考来源
1. 企业微信官方文档 - 群机器人文档,页面标题:发送消息 - 模板卡片消息,URL:https://work.weixin.qq.com/api/doc/90000/90136/91770