协作办公
需要发送钉钉群通知、机器人单聊/群聊…
当用户提到钉钉消息、发消息、发通知、群通知、群消息、Webhook、机器人消息、工作通知、单聊消息、群聊消息、撤回消息、消息已读、发送 Markdown、卡片消息、ActionCard、@某人、at 某人、提醒某人、dingtalk message、send message、robot message、work notification 等场景时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要发送钉钉群通知、机器人单聊/群聊、工特定
解决思路
- `dt_helper.sh` 位于本 `SKILL.md` 同级目录的 `scripts/dt_helper.sh`。
- 完整 API 请求格式、场景路由、消息类型速查、身份标识、错误码等见 `references/api.md`。
- 先识别消息通道:按 `references/api.md` 的「场景路由」判断属于哪个通道。
- Webhook 机器人通道:适用场景是往指定群发通知;无需 Token;特点是 URL 自带凭证,最简单。
- 企业内部应用机器人通道:适用场景是单聊私信/群聊;使用 `--token`(新版);特点是可以撤回、查已读。
- 工作通知通道:适用场景是应用推送到「工作通知」;使用 `--old-token`(旧版);特点是可以推全员/部门。
- sessionWebhook 通道:适用场景是回调中直接回复;无需 Token;特点是回调消息自带临时 URL。
- 每次执行前先校验配置:执行 `bash scripts/dt_helper.sh --get KEY` 读取该通道所需键值。
- 收集缺失项:一次性询问并执行 `bash scripts/dt_helper.sh --set KEY=VALUE` 写入。
- 获取 Token:机器人消息用 `--token`;工作通知用 `--old-token`;Webhook/sessionWebhook 无需 Token。
- 执行 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)`;然后 `curl -s -w '\nHTTP_STATUS:%{http_code}' -X POST "https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend"`,带 `x-acs-dingtalk-access-token` 和 `Content-Type: application/json`,body 包含 `robotCode`、`userIds`、`msgKey`、`msgParam`;最后 `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)`;然后 `curl -s -w '\nHTTP_STATUS:%{http_code}' -X POST "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=$OLD_TOKEN"`,带 `Content-Type: application/json`,body 包含 `agent_id`、`userid_list`、`msg`;最后 `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`。
适用边界 · 注意事项
- 不适用于非钉钉渠道的消息发送。
- 没有钉钉群 Webhook URL、企业内部应用凭证或工作通知 agentId 时,无法按此技能发送。
- 消息 API 不接受 unionId;不要直接把 unionId 当 userId 使用,需先转换为 userId。