要在钉钉群内发送可点击跳转的卡片消息,需使用自定义机器人的 Webhook 接口,并将消息类型 msgtype 设置为 actionCard,同时在 btns 数组中配置 actionURL 参数。
先说结论:钉钉自定义机器人支持通过 ActionCard 消息类型实现按钮跳转,配置关键在于 JSON payload 中的 btns 字段。
- 适合:需要在群内引导用户点击链接、确认操作或跳转业务系统的场景。
- 先准备:获取群机器人 Webhook 地址,并确认安全设置(关键词或 IP 白名单)。
- 验收:发送请求后检查钉钉群内消息渲染情况及接口返回 errcode。
命令速用版
以下是通过 curl 发送 ActionCard 消息的最小可用示例,替换 YOUR_WEBHOOK 和链接即可测试。
curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_WEBHOOK' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "actionCard",
"actionCard": {
"title": "测试卡片",
"text": "请点击下方按钮跳转",
"hideAvatar": "0",
"btnOrientation": "0",
"btns": [
{
"title": "点击跳转",
"actionURL": "https://www.example.com"
}
]
}
}'为什么会这样
钉钉机器人接口定义了多种消息模板,text 类型仅支持纯文本,而 actionCard 类型专为交互设计。底层协议规定,只有在 actionCard 结构内的 btns 数组中声明 actionURL,客户端才会渲染为可点击按钮。若直接使用 text 类型带链接,钉钉只会识别为普通文本链接,无法呈现卡片样式。
分步处理
- 获取 Webhook:在钉钉群设置中添加自定义机器人,复制 Webhook 地址,注意保存安全设置中的关键词或 IP 白名单信息。
- 构造请求体:按照官方协议构造 JSON,确保 msgtype 为 actionCard,btns 内每个对象包含 title 和 actionURL。
- 发送请求:使用 HTTP POST 方法向 Webhook 地址发送数据,Header 需指定 Content-Type 为 application/json。
- 处理安全限制:若设置了关键词,消息内容 text 字段必须包含该关键词,否则接口会拦截。
怎么验证是否生效
发送请求后,首先观察接口返回值,errcode 为 0 表示发送成功。随后查看钉钉群聊窗口,确认消息是否以卡片形式展示,且按钮可点击。若按钮无反应,检查 actionURL 是否为 HTTPS 协议,部分企业安全策略可能限制 HTTP 链接。
常见坑
- 链接协议限制:actionURL 必须使用 HTTPS,HTTP 链接在某些客户端版本或安全设置下可能无法跳转。
- 关键词拦截:若机器人开启了关键词安全模式,请求体中的 text 内容必须包含设定的关键词,否则返回错误码。
- 按钮数量限制:虽然支持多个按钮,但过多按钮可能导致移动端显示折叠,建议控制在合理数量内。
- 域名白名单:部分企业开启了外链安全保护,跳转域名可能需要先在钉钉管理后台加入白名单。
参考来源
- 钉钉开放平台 - 自定义机器人接入,URL: https://open.dingtalk.com/document/robots/custom-robot-access