如何在钉钉机器人消息中实现@特定成员功能配置指南

文章导读
在钉钉自定义机器人 webhook 请求体中添加 at 参数即可实现@特定成员,需确保传入的手机号与成员钉钉账号一致。适用于群聊自定义机器人场景,风险在于手机号不匹配会导致@失效。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
A A

在钉钉自定义机器人 webhook 请求体中添加 at 参数即可实现@特定成员,需确保传入的手机号与成员钉钉账号一致。适用于群聊自定义机器人场景,风险在于手机号不匹配会导致@失效。

先说结论:钉钉自定义机器人通过在发送消息的 JSON 数据中配置 at 字段来实现@功能,支持手机号或用户 ID 匹配。

  • 适合:企业内部群自定义 webhook 机器人,需要定向通知责任人的场景。
  • 先准备:获取机器人 webhook 地址、安全设置(签名或 IP 白名单)、待@成员的钉钉绑定手机号。
  • 验收:发送测试消息后,在钉钉客户端确认目标成员名字是否变蓝且收到强提醒。

命令速用版

使用 curl 命令可直接测试 webhook 连通性及@配置,替换以下参数即可执行:

如何在钉钉机器人消息中实现@特定成员功能配置指南
curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
   "msgtype": "text",
   "text": { "content": "测试消息@某人" },
   "at": {
     "mobiles": ["13800000000"],
     "isAtAll": false
   }
 }'

为什么会这样

钉钉机器人协议规定消息发送必须显式声明@对象,系统不会自动解析文本中的@符号。

自定义机器人本质是 HTTP 回调,服务端无法直接读取群成员列表,因此需要通过 at 参数传入明确的身份标识(手机号或用户 ID)。如果仅是在文本内容中写"@张三”,钉钉服务端不会将其识别为提醒指令,只会当作普通文本显示。

分步处理

按照以下步骤配置 webhook 请求体,确保参数结构正确:

如何在钉钉机器人消息中实现@特定成员功能配置指南
  1. 获取机器人地址:在钉钉群设置中添加自定义机器人,复制 webhook 地址,记录 access_token。
  2. 配置安全设置:若开启“加签”,需计算时间戳和签名,将 timestampsign 拼接到 webhook URL 中。
  3. 构造 JSON payload:在请求体根级别添加 at 对象,填入 mobiles 数组或 userIds 数组。
  4. 发送 HTTP POST 请求:设置 Header 为 Content-Type: application/json,body 为构造好的 JSON。

怎么验证是否生效

发送消息后,观察钉钉客户端消息表现及通知栏状态。

  • 视觉检查:被@的成员名字在消息气泡中显示为蓝色高亮。
  • 提醒检查:被@成员的钉钉客户端会收到“特别关注”或普通消息提醒(取决于其设置),且 DING 列表可能有记录。
  • 接口响应:HTTP 请求返回 errcode 为 0,表示消息发送成功,但不代表@一定生效,需结合客户端表现确认。

常见坑

  • 手机号不匹配:传入的手机号必须是成员在当前钉钉企业组织中绑定的手机号,隐藏手机号会导致@失败。
  • 签名过期:若使用加签模式,时间戳误差不能超过 1 小时,否则接口返回安全校验失败。
  • 频率限制:机器人发送消息有频率限制(通常为每分钟 20 条),高频发送会导致接口限流,@功能随之失效。
  • 参数位置错误:at 参数必须与 msgtype 同级,放在 text 对象内部会导致配置不生效。

常见问题

支持@所有人吗?

支持,将 at 对象中的 isAtAll 参数设置为 true 即可,此时无需填写 mobiles 列表。

如何在钉钉机器人消息中实现@特定成员功能配置指南

手机号隐藏了怎么@?

若成员隐藏了手机号,需使用 userIds 参数传入成员的钉钉用户 ID,或通过企业管理员查询绑定关系。

为什么返回成功但没人收到提醒?

检查成员是否开启了消息免打扰,或确认传入的手机号是否为该成员在当前组织内的主绑手机号。