钉钉开放平台调用手册

向群发送自定义机器人通知

通过群 Webhook 发送文本,支持按机器人配置计算加签。

官方资料核对 2026-10-15示例代码,未进行真实接口实测
← 返回平台功能

接入准备

  • 在目标群创建自定义机器人并设置关键词、加签或 IP 安全条件。
  • 此处 access_token 是群 Webhook 凭证,不是应用令牌。

准备环境变量

示例值需要替换为自己的凭证或资源 ID。代码在本机或服务端运行;密钥不应放进公开网页。

DINGTALK_WEBHOOK_TOKEN
群 Webhook 的 access_token。
DINGTALK_SIGN_SECRET可选
可选,仅机器人开启加签时设置;否则不设置。
终端
export DINGTALK_WEBHOOK_TOKEN='replace_with_webhook_access_token'
# 可选,按需启用
# export DINGTALK_SIGN_SECRET='SEC_replace_with_sign_secret'

以上 export 适用于 macOS / Linux 的终端,在同一终端内运行后续代码。Python 示例保存为 request.py 后执行 python3 request.py。

调用步骤

  1. 01

    复制机器人 Webhook,把 access_token 参数存入 DINGTALK_WEBHOOK_TOKEN。

  2. 02

    若使用关键词校验,可把关键词设为接入测试;若开启加签,设置 DINGTALK_SIGN_SECRET。

  3. 03

    执行 Python 示例;签名使用毫秒时间戳、HMAC-SHA256 和 URL 编码,和飞书群签名算法不同。

调用 01

发送群文本通知

自定义机器人仅向绑定群发送消息,本例默认不 @ 全员。

POSThttps://oapi.dingtalk.com/robot/send?access_token=${DINGTALK_WEBHOOK_TOKEN}

请求头

Content-Type
application/json

参数说明

参数表可左右滑动,查看完整说明。

字段 / 位置类型 / 必填说明
access_tokenQuerystring必填群 Webhook 的 Token。
timestamp / signQuerystring可选加签开启时必填;timestamp 为毫秒,误差不超 1 小时;HMAC key 为 secret,消息为 timestamp+换行+secret,Base64 后 URL 编码。
msgtype请求体string必填本例 text。
text.content请求体string必填发送正文;应匹配机器人配置的关键词。
at.isAtAll请求体boolean可选true 提醒全员,本例 false。
msgUuid请求体string可选可设置业务幂等 key,同一发送操作超时后复用,减少重复推送。

调用代码

替换示例 ID 与请求体内容后运行。

Python 3
import os, time, json, hmac, hashlib, base64, urllib.request, urllib.parse, urllib.error
query = {"access_token": os.environ["DINGTALK_WEBHOOK_TOKEN"]}
secret = os.environ.get("DINGTALK_SIGN_SECRET")
if secret:
    timestamp = str(int(time.time() * 1000))
    message = (timestamp + "\n" + secret).encode()
    signature = base64.b64encode(hmac.new(secret.encode(), message, hashlib.sha256).digest()).decode()
    query.update(timestamp=timestamp, sign=signature)
# urlencode 会完成签名所需的 URL 编码,不要预先再编码一次。
url = "https://oapi.dingtalk.com/robot/send?" + urllib.parse.urlencode(query)
payload = {"msgtype": "text", "text": {"content": "接入测试:通知服务已启动"}, "at": {"isAtAll": False}}
request = urllib.request.Request(url, data=json.dumps(payload).encode(), headers={"Content-Type": "application/json"}, method="POST")
try:
    with urllib.request.urlopen(request, timeout=30) as response:
        result = json.load(response)
except urllib.error.HTTPError as exc:
    raise SystemExit(f"HTTP {exc.code}: {exc.read().decode()}")
if str(result.get("errcode", "0")) != "0":
    raise SystemExit(json.dumps(result, ensure_ascii=False))
print(json.dumps(result, ensure_ascii=False, indent=2))

返回示例

按官方字段整理的节选示意,使用虚构 ID,不是实测结果。成功 errcode 为 0。 以下为结构示意,非本站实测结果。

JSON
{
  "errcode": 0,
  "errmsg": "ok"
}

常见错误与排查

310000安全校验失败
按 errmsg 区分关键词、时间戳、签名或出口 IP 不匹配。
410100发送过快被限流
降低频率,勿立即重复发送。
400102机器人已停用
联系管理员在目标群启用机器人。

调用注意

  • 每个机器人每分钟最多 20 条;超出后官方说明会限流 10 分钟。
  • Python 示例自动处理可选签名;不要混用应用 Token,也不要公开完整 Webhook。

注意事项

  • 大量通知先聚合成摘要,避免群内刷屏和触发限流。

核验来源

本站按官方资料整理本场景的必要调用步骤与代码,覆盖范围以本页列出的接口为准。官方资料用于追溯规范及查看变更。

  1. 01
    自定义机器人发送群消息核验日期 2026-10-15
  2. 02
    自定义机器人安全设置核验日期 2026-10-15

钉钉开放平台的其他调用手册

← 返回钉钉开放平台的全部功能