Skip to content

钉钉

钉钉集成今天只支持通知方向(把触发的告警推到钉钉群)。IM-bridge 双向模式已规划但未发布;校验器在 stream/webhook 模式接受 dingtalk 是为向前兼容。

模式状态
Notification支持。自定义群机器人,带签名。
IM bridge框架在;生产支持延后。

载荷

钉钉自定义机器人接受标准 text-message 形态:

json
{
  "msgtype": "text",
  "text": {"content": "[CRITICAL] node-01 swap_high\nswap_in_pages > 1000 for 5m\nsource: alert\ndedupe: alert:swap_high:device=7"}
}

body 本身不签名。钉钉是通过 URL query 参数鉴权 —— 见签名

这和飞书、企微 sender 用的是同一个扁平文本格式化函数,由 formatText 产出。

签名

自定义机器人开启 加签 后,钉钉要求请求带 timestampsign URL query 参数:

text
timestamp    = milliseconds since epoch
stringToSign = timestamp + "\n" + secret
sign         = base64(HMAC-SHA256(key=secret, message=stringToSign))

签名 key 是 secret 本身(不像飞书里 secret 还参与 string-to-sign)。signDingTalkURL helper 把两个 query 参数都拼上去:

text
POST https://oapi.dingtalk.com/robot/send?access_token=…&timestamp=1717012345000&sign=…

body 保持纯 JSON。钉钉鉴权的对象是签名后的 URL + body。

用毫秒时间戳

钉钉签名期望毫秒,不是秒。signer 用 time.Now().UnixMilli()。秒精度时间戳会得到 310000 "sign invalid"。

配置

  1. 在目标钉钉群 → 群设置 → 智能群助手 → 添加机器人 → 自定义。给名字和头像。
  2. 安全设置 → 加签,复制 secret。(你也可以改选 IP 白名单或关键词过滤;Ongrid sender 都支持,但推荐加签。)
  3. 复制 webhook URL —— 长得像 https://oapi.dingtalk.com/robot/send?access_token=<token>
  4. 在 Ongrid:Settings → Channels → New → Provider = dingtalk → Endpoint = webhook URL → Secret = 第 2 步的签名 secret(选了关键词或 IP 模式就不用填)。

测试消息要符合群"安全设置"

选了关键词过滤的话,测试消息正文里必须包含那个关键词,否则钉钉拒收。Ongrid 默认测试消息是 [INFO] Ongrid test。要么把关键词配成能匹配的(Ongrid 就行),要么选加签模式。

小坑

不支持 at

当前 sender 只发纯 msgtype: text。@特定用户(atMobiles / atUserIds / isAtAll)还没进 payload builder。今天要用的话改用通用 webhook;原生支持留作未来增强。

4xx 重试是有意的

钉钉对协议层错误(签名不匹配、消息过长、bot 限流)也返 HTTP 200,把错误塞在 JSON body 的 errcode 里。sender 把任何 2xx 当成功,只暴露非 2xx HTTP 状态码。如果 bot 静默不投递了,检查 manager 日志里的 dingtalk: send_text: code=… —— 飞书和钉钉共用"200 OK + errcode 在 body 里"这种模式。

钉钉消息速率限制

钉钉自定义机器人每个 bot 每分钟 20 条。告警流水线的降噪(默认每 dedupe key 5 分钟一条)通常远低于这个数;高基数集群可能要加大降噪窗口或者按规则分通道路由。

与飞书对比

方面钉钉飞书
签名放在哪URL query(timestampsignbody 字段(timestampsign
时间戳单位毫秒
签名 keysecrettimestamp + "\n" + secret
HMAC 算法SHA-256SHA-256
签的是空 body 吗否(sign 对 stringToSign 算)是(HMAC message 为空)

表面相似的两套协议,三个真实差异。它们存在两个独立 Sender 正是为此。

相关

  • Webhook —— 用于 Ongrid 不原生支持的协议(企微群发应用、Microsoft Teams、Mattermost、Rocket Chat、OpsGenie、PagerDuty…)。
  • 通道总览 —— 每个 Sender 消费的统一 notify.Message 形状。