SKILL.md
钉钉消息技能
负责钉钉消息发送的所有操作。本文件为策略指南;完整 API 请求格式、场景路由、消息类型速查、身份标识、错误码等见 references/api.md。
dt_helper.sh 位于本 SKILL.md 同级目录的 scripts/dt_helper.sh。
四种消息通道
通道
适用场景
Token
特点
Webhook 机器人
往指定群发通知
无需
最简单;URL 自带凭证
企业内部应用机器人
单聊私信 / 群聊
--token(新版)
可撤回、查已读
工作通知
应用推送到"工作通知"
--old-token(旧版)
可推全员/部门
sessionWebhook
回调中直接回复
无需
回调消息自带临时 URL
工作流程(每次执行前)
- 识别通道 → 按 api.md「场景路由」判断属于哪个通道
- 校验配置 →
bash scripts/dt_helper.sh --get KEY读取该通道所需键值
- 收集缺失项 → 一次性询问并
bash scripts/dt_helper.sh --set KEY=VALUE写入
- 获取 Token → 机器人用
--token;工作通知用--old-token;Webhook/sessionWebhook 无需
- 执行 API → 多行逻辑写入
/tmp/<task>.sh再执行;禁止 heredoc
各通道所需配置
通道
所需配置
来源说明
Webhook
DINGTALK_WEBHOOK_URL(加签额外需 DINGTALK_WEBHOOK_SECRET)
群设置 → 智能群助手 → 添加自定义机器人
机器人消息
DINGTALK_APP_KEY + DINGTALK_APP_SECRET
开放平台 → 应用管理 → 凭证信息
工作通知
DINGTALK_APP_KEY + DINGTALK_APP_SECRET + DINGTALK_AGENT_ID
agentId 在应用管理 → 基本信息
robotCode=appKey(完全一致,无需额外配置)
- 凭证禁止在输出中完整打印,确认时仅显示前 4 位 +
****
- 消息内容缺失时:先询问用户想发什么,不要自行编造
身份标识
消息 API 只接受 userId(staffId),不接受 unionId。详见 grep -A 20 "^## 身份标识" references/api.md。
- unionId → userId 转换:
bash scripts/dt_helper.sh --to-userid <unionId>
- 群消息发送方式选择:发群消息时须先询问用户用 Webhook 还是企业机器人,详见
grep -A 20 "^### 群消息发送方式选择" references/api.md
执行脚本模板
#!/bin/bash
set -e
HELPER="./scripts/dt_helper.sh"
TOKEN=$(bash "$HELPER" --token)
USER_ID=$(bash "$HELPER" --get DINGTALK_MY_USER_ID | cut -d= -f2)
# 机器人单聊示例
RESP=$(curl -s -w '\nHTTP_STATUS:%{http_code}' -X POST "https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend" \
-H "x-acs-dingtalk-access-token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"robotCode":"'$(bash "$HELPER" --get DINGTALK_APP_KEY | cut -d= -f2)'","userIds":["'$USER_ID'"],"msgKey":"sampleText","msgParam":"{\"content\":\"测试消息\"}"}')
echo "$RESP"
#!/bin/bash
set -e
HELPER="./scripts/dt_helper.sh"
OLD_TOKEN=$(bash "$HELPER" --old-token)
AGENT_ID=$(bash "$HELPER" --get DINGTALK_AGENT_ID | cut -d= -f2)
USER_ID=$(bash "$HELPER" --get DINGTALK_MY_USER_ID | cut -d= -f2)
# 工作通知示例
RESP=$(curl -s -w '\nHTTP_STATUS:%{http_code}' -X POST "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=$OLD_TOKEN" \
-H "Content-Type: application/json" \
-d '{"agent_id":"'$AGENT_ID'","userid_list":"'$USER_ID'","msg":{"msgtype":"text","text":{"content":"测试工作通知"}}}')
echo "$RESP"
Token 异常时:bash "$HELPER" --token --nocache 或 bash "$HELPER" --old-token --nocache
references/api.md 查阅索引
grep -A 196 "^## 一、群自定义 Webhook 机器人" references/api.md
grep -A 192 "^## 二、企业内部应用机器人" references/api.md
grep -A 145 "^## 三、工作通知" references/api.md
grep -A 60 "^## 四、sessionWebhook" references/api.md
grep -A 30 "^## 场景路由" references/api.md
grep -A 20 "^### 群消息发送方式选择" references/api.md
grep -A 25 "^## 身份标识" references/api.md
grep -A 30 "^## 消息类型速查" references/api.md
grep -A 33 "^## 错误码" references/api.md
grep -A 12 "^## 所需应用权限" references/api.md