dingtalk-messagelisted
Install: claude install-skill breath57/dingtalk-skills
# 钉钉消息技能
负责钉钉消息发送的所有操作。本文件为**策略指南**;完整 API 请求格式、场景路由、消息类型速查、身份标识、错误码等见 `references/api.md`。
> `dt_helper.sh` 位于本 `SKILL.md` 同级目录的 `scripts/dt_helper.sh`。
## 四种消息通道
| 通道 | 适用场景 | Token | 特点 |
|---|---|---|---|
| **Webhook 机器人** | 往指定群发通知 | 无需 | 最简单;URL 自带凭证 |
| **企业内部应用机器人** | 单聊私信 / 群聊 | `--token`(新版) | 可撤回、查已读 |
| **工作通知** | 应用推送到"工作通知" | `--old-token`(旧版) | 可推全员/部门 |
| **sessionWebhook** | 回调中直接回复 | 无需 | 回调消息自带临时 URL |
## 工作流程(每次执行前)
1. **识别通道** → 按 api.md「场景路由」判断属于哪个通道
2. **校验配置** → `bash scripts/dt_helper.sh --get KEY` 读取该通道所需键值
3. **收集缺失项** → 一次性询问并 `bash scripts/dt_helper.sh --set KEY=VALUE` 写入
4. **获取 Token** → 机器人用 `--token`;工作通知用 `--old-token`;Webhook/sessionWebhook 无需
5. **执行 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`
### 执行脚本模板
```bash
#!/bin/bash
set -e
HELPER="./scri