钉钉自定义机器人如何发送支持点击跳转的 ActionCard 消息?

文章导读
要在钉钉群内发送可点击跳转的卡片消息,需使用自定义机器人的 Webhook 接口,并将消息类型 msgtype 设置为 actionCard,同时在 btns 数组中配置 actionURL 参数。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

要在钉钉群内发送可点击跳转的卡片消息,需使用自定义机器人的 Webhook 接口,并将消息类型 msgtype 设置为 actionCard,同时在 btns 数组中配置 actionURL 参数。

先说结论:钉钉自定义机器人支持通过 ActionCard 消息类型实现按钮跳转,配置关键在于 JSON payload 中的 btns 字段。

钉钉自定义机器人如何发送支持点击跳转的 ActionCard 消息?
  • 适合:需要在群内引导用户点击链接、确认操作或跳转业务系统的场景。
  • 先准备:获取群机器人 Webhook 地址,并确认安全设置(关键词或 IP 白名单)。
  • 验收:发送请求后检查钉钉群内消息渲染情况及接口返回 errcode。

命令速用版

以下是通过 curl 发送 ActionCard 消息的最小可用示例,替换 YOUR_WEBHOOK 和链接即可测试。

钉钉自定义机器人如何发送支持点击跳转的 ActionCard 消息?
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 类型带链接,钉钉只会识别为普通文本链接,无法呈现卡片样式。

钉钉自定义机器人如何发送支持点击跳转的 ActionCard 消息?

分步处理

  1. 获取 Webhook:在钉钉群设置中添加自定义机器人,复制 Webhook 地址,注意保存安全设置中的关键词或 IP 白名单信息。
  2. 构造请求体:按照官方协议构造 JSON,确保 msgtype 为 actionCard,btns 内每个对象包含 title 和 actionURL。
  3. 发送请求:使用 HTTP POST 方法向 Webhook 地址发送数据,Header 需指定 Content-Type 为 application/json。
  4. 处理安全限制:若设置了关键词,消息内容 text 字段必须包含该关键词,否则接口会拦截。

怎么验证是否生效

发送请求后,首先观察接口返回值,errcode 为 0 表示发送成功。随后查看钉钉群聊窗口,确认消息是否以卡片形式展示,且按钮可点击。若按钮无反应,检查 actionURL 是否为 HTTPS 协议,部分企业安全策略可能限制 HTTP 链接。

常见坑

  • 链接协议限制:actionURL 必须使用 HTTPS,HTTP 链接在某些客户端版本或安全设置下可能无法跳转。
  • 关键词拦截:若机器人开启了关键词安全模式,请求体中的 text 内容必须包含设定的关键词,否则返回错误码。
  • 按钮数量限制:虽然支持多个按钮,但过多按钮可能导致移动端显示折叠,建议控制在合理数量内。
  • 域名白名单:部分企业开启了外链安全保护,跳转域名可能需要先在钉钉管理后台加入白名单。

参考来源

  • 钉钉开放平台 - 自定义机器人接入,URL: https://open.dingtalk.com/document/robots/custom-robot-access