钉钉开放平台 Skill
覆盖钉钉企业开发最常接的鉴权、通讯录、消息、审批、考勤、事件订阅与限流。重点讲清 api.dingtalk.com 与 oapi.dingtalk.com 两套 API 的鉴权、响应判定和字段风格差异,以及回调加解密的完整算法。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill dingtalk --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill dingtalk --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill dingtalk --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill dingtalk --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill dingtalk --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill dingtalk --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill dingtalk --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill dingtalk --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill dingtalk --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/dingtalk/prompt.md 并照它执行装对了的标志:references/ 下有 7 份文档,里面 grep '<!-- Gap:' 能搜到 4 处。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
7 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
鉴权与 access token
新旧两套 token 接口、用户 OAuth 与免登、第三方应用 token 与签名、ID 体系
通讯录
用户与部门查询、unionid 和手机号转 userid、全员遍历
消息:工作通知 / 机器人 / 互动卡片
工作通知与送达确认、自定义机器人加签、企业机器人收发、互动卡片与 AI 流式更新
OA 审批
表单 schema、发起审批与各控件取值写法、查询、同意拒绝、撤销
考勤
打卡结果与明细、考勤组与排班、请假状态、考勤报表列值
事件订阅
Stream 与 HTTP 推送选型、回调验签加解密的完整实现、事件体差异
错误码与限流
两套响应格式的判定、常见错误码、IP 与接口维度限流、重试写法
当前事实
整理自官方文档(抓取于 2026-09-11),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| 新版 Base URL | https://api.dingtalk.com/v1.0/…,JSON,camelCase |
| 旧版 Base URL | https://oapi.dingtalk.com/topapi/…,snake_case |
| 应用 token | POST /v1.0/oauth2/accessToken 或 GET /gettoken,7200 秒,必须缓存 |
| 成功判定 | 旧版出错也是 HTTP 200,看 errcode == 0;新版看 HTTP 2xx |
| 事件接收 | Stream 模式(dingtalk-stream)免公网、免加解密;HTTP 回调须验签并回加密的 success |
照通用经验写容易错的 6 件事
来自官方文档,还没有用真实凭证验证。
- token 位置由域名决定。新版只认
x-acs-dingtalk-access-token头,不认 Bearer 和查询参数;旧版只认access_token参数,只放请求头会报errcode 88。 - 旧版鉴权错误包在 88 里。真实原因在字符串
sub_code(如 "40014"),按错误码表写errcode == 40014永远不会触发。 - 工作通知 errcode=0 不等于送达。超出每人每日条数或重复内容时接口照样返回成功,要用
getsendresult查被流控的人。 - HTTP 回调要回加密的 success。AES-CBC,key 为 aes_key 补等号后 Base64 解码,IV 取前 16 字节,PKCS7 块大小是 32 而不是 16。
- 机器人消息的 senderId 是加密 ID。员工 userid 在
senderStaffId,且机器人发布上线后才返回。 - 审批表单值全是字符串。多选、明细要 JSON 序列化,日期区间连 name 都是数组字符串;通过 =
COMPLETED且agree。
无凭证探测
- 新版接口用 Bearer 或 ?access_token= 传 token,返回 400
AuthenticationFailed.MissingParameter(缺少 x-acs-dingtalk-access-token) - 旧版接口伪造 token 返回 HTTP 200 +
errcode 88, sub_code "40014";只放请求头返回sub_code "40000" access_token is blank - 按文档 curl(GET 加 -d 表单)调 gettoken 返回
40035 缺少参数;改用查询参数才进入凭证校验 - 第三方授权企业 token 按文档参数表的路径(无 /v1.0)返回 HTTP 200 +
errcode 404「请求的URI地址不存在」,带 /v1.0 的路径才存在 - 自定义机器人伪造 token 返回
300005 token is not exist,而非文档写的 400101 - 旧版接口路径拼错不返回 404,而是 HTTP 200 +
errcode 22不合法 ApiName