用途:把一个钉钉 API 领域封装成可复用的钉钉技能(dingtalk skill)。当用户提出“创建新技能”“新建技能”“开发钉钉技能”“新增钉钉功能”“添加钉钉接口支持”或“我需要一个钉钉 xxx 技能”(如待办、签到、考勤、审批、日程)等需求时使用,目标是把某个钉钉 API 领域整理为可复用 skill。
主要能力与流程(按阶段):
- 探索:查找并阅读钉钉 Python SDK 模块,整理接口清单与字段结构,并用 SDK 实际探测真实字段。
- SDK 测试:编写并运行 Python SDK 测试,全部通过才能继续。
- HTTP 测试:用纯 requests 直接调用 REST API,验证 endpoint、请求字段、HTTP 方法与响应字段,全部通过才能继续。
- 创作:编写 SKILL.md 与 references/api.md。
- 收尾:更新 README.md、README_EN.md、AGENTS.md。
关键原则:每一步必须实际完成且通过验证后才能进入下一步,不得跳过;测试全部用 Python,不使用 .sh 脚本;阶段 2 和阶段 3 的 uv run pytest 必须实际运行并全部通过(绿色)后才能进入阶段 4。
API 版本与 token 规则:钉钉存在新旧两套 API 体系,必须优先使用新版,且两种 token 不可混用。新版(推荐):POST https://api.dingtalk.com/v1.0/oauth2/accessToken 返回 accessToken + expireIn,配套 api.dingtalk.com 接口,放 Header x-acs-dingtalk-access-token。旧版(避免):GET https://oapi.dingtalk.com/gettoken 返回 access_token,配套 oapi.dingtalk.com 接口,放 URL 参数 ?access_token=。混用会报 401/403,且错误信息不会说明是 token 类型错误,难以排查。唯一例外是 userId → unionId 转换(oapi.dingtalk.com/topapi/v2/user/get),目前无 v1.0 等效接口,仍需旧版 token,仅在这一步使用。
使用方式:脚本调用 scripts/dt_helper.sh 获取 token 与缓存、做 userId↔unionId 转换、读写配置;Python 测试(阶段二/三)仍用内联 requests 逻辑,不依赖该脚本。探测权限时向每个目标接口发一次“干跑”请求,从 403 响应体的 requiredScopes 收集权限点,再到开发者后台开通并重跑确认。
限制:资料未提供该技能的收费、价格、平台支持范围与效果数据;探测阶段须使用 SDK,禁止用 requests 直接发 HTTP 请求;每个 skill 完全独立,agent 只读取当前 skill 的 SKILL.md,身份转换逻辑必须自包含写入;跨 skill 共享仅有配置文件与 dt_helper.sh 两种机制。