协作办公
需要操作钉钉知识库或文档时:用钉钉开放平台 API…
在具备钉钉开放平台应用凭证和 dt_helper.sh 的环境中,按任务校验配置并调用 API 完成钉钉知识库、文档、正文和成员权限管理。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
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` 查阅。
- 识别知识库(Workspace)为文档容器,操作时使用其 `workspaceId` 和 `rootNodeId`。
- 识别节点(Node)为文件或文件夹,操作时根据 `type` 判断为 `FILE` 或 `FOLDER`。
- 调用 `/v1.0/doc/suites/documents/{id}` 时,文档标识可用 `docKey` 或 `dentryUuid`。
- 创建文档后从响应中取得 `docKey`、`dentryUuid`、`nodeId`,后续按用途使用。
- 读写文档正文时使用 `docKey` 或 `dentryUuid`。
- 删除文档和执行文档管理类接口时使用 `nodeId`。
- 对 `wiki/nodes` 返回的 `nodeId`,按实际为 `dentryUuid` 处理,可直接用于正文读写。
- 所有接口必须传 `operatorId`,它是 unionId 参数,通过 `bash scripts/dt_helper.sh --to-unionid` 自动转换。
- 每次执行前先识别本次任务类型,例如列知识库、读文档、写文档、创建文档、成员管理。
- 按本次任务校验所需配置:通过 `bash scripts/dt_helper.sh --get KEY` 读取,仅校验本任务必须项。
- 若缺少配置,仅收集缺失配置;一次性询问用户所有缺失值,用 `bash scripts/dt_helper.sh --set KEY=VALUE` 写入。
- 获取 Token / operatorId:直接调用 `bash scripts/dt_helper.sh`,token 获取与缓存细节无需关心。
- 执行操作时,凡是包含变量替换、管道或多行逻辑的命令,写入 `/tmp/<task>.sh` 再执行 `bash /tmp/<task>.sh`。
- 不要把多行命令直接粘到终端里,因为终端工具会截断。
- 不要用 `<<'EOF'` 语法,因为 heredoc 在工具中同样会被截断导致变量丢失。
- 所有任务通用必需配置为 `DINGTALK_APP_KEY`、`DINGTALK_APP_SECRET`、`DINGTALK_MY_USER_ID`。
- 涉及任何文档/知识库 API 调用时,必须有 `DINGTALK_MY_OPERATOR_ID`;若缺失,先用 `bash scripts/dt_helper.sh --to-unionid` 自动转换并写回。
- 创建/读取/写入/删除/成员管理任务除通用项外,无额外固定配置键;`workspaceId`/`nodeId`/`docKey` 属于任务参数,运行时从用户输入或 API 响应中获取。
- 未通过本次任务配置校验前,不得进入 API 调用步骤。
- 凭证禁止在输出中完整打印,确认时仅显示前 4 位 + `****`。
- 配置 `DINGTALK_APP_KEY`:从钉钉开放平台 → 应用管理 → 凭证信息获取。
- 配置 `DINGTALK_APP_SECRET`:从钉钉开放平台 → 应用管理 → 凭证信息获取。
- 配置 `DINGTALK_MY_USER_ID`:从管理后台 → 通讯录 → 成员管理 → 点击姓名查看,填写当前用户的企业员工 ID(userId)。
- 配置 `DINGTALK_MY_OPERATOR_ID`:填写当前用户的 unionId(operatorId),首次由 `bash scripts/dt_helper.sh --to-unionid` 自动转换并写入。
- 识别 `userId`(= `staffId`)为企业内部员工 ID,可通过管理后台 → 通讯录 → 成员管理 → 点击姓名查看。
- 识别 `unionId` 为跨企业/跨应用唯一标识,可通过 `bash scripts/dt_helper.sh --to-unionid <userid>` 获取。
- 使用执行脚本模板:`#!/bin/bash`;`set -e`;`HELPER="./scripts/dt_helper.sh"`;`NEW_TOKEN=$(bash "$HELPER" --token)`;`OPERATOR_ID=$(bash "$HELPER" --get DINGTALK_MY_OPERATOR_ID)`。
- 在执行脚本模板中追加具体 API 调用,例如查询知识库列表:`WORKSPACES=$(curl -s -X GET "https://api.dingtalk.com/v2.0/wiki/workspaces?operatorId=${OPERATOR_ID}&maxResults=20" -H "x-acs-dingtalk-access-token: $NEW_TOKEN")`;`echo "知识库列表: $WORKSPACES"`。
- Token 失效处理:dt_helper 仅按时间缓存,无法感知 token 被提前吊销;若 API 返回 401(token 无效/过期),用 `--nocache` 跳过缓存强制重新获取:`NEW_TOKEN=$(bash "$HELPER" --token --nocache)`。
- 确定要做什么之后,用对应 `grep -A ...` 从 `references/api.md` 提取该章节的完整 API 细节(请求格式、参数说明、返回值示例)。
- 查询知识库列表:`grep -A 30 "^## 1. 查询知识库列表" references/api.md`。
- 查询知识库信息:`grep -A 10 "^## 2. 查询知识库信息" references/api.md`。
- 查询节点列表:`grep -A 35 "^## 3. 查询节点列表" references/api.md`。
- 查询单个节点:`grep -A 10 "^## 4. 查询单个节点" references/api.md`。
- 通过 URL 查询节点:`grep -A 15 "^## 5. 通过 URL 查询节点" references/api.md`。
- 创建文档:`grep -A 28 "^## 6. 创建文档" references/api.md`。
- 删除文档:`grep -A 10 "^## 7. 删除文档" references/api.md`。
- 读取文档内容:`grep -A 30 "^## 8. 读取文档内容" references/api.md`。
- 覆盖写入文档内容:`grep -A 15 "^## 9. 覆盖写入文档内容" references/api.md`。
- 追加文本到段落:`grep -A 12 "^## 10. 追加文本到段落" references/api.md`。
- 添加文档成员:`grep -A 18 "^## 11. 添加文档成员" references/api.md`。
- 更新文档成员权限:`grep -A 12 "^## 12. 更新文档成员权限" references/api.md`。
- 移除文档成员:`grep -A 10 "^## 13. 移除文档成员" references/api.md`。
- 查阅错误码:`grep -A 10 "^## 错误码" references/api.md`。
- 查阅所需应用权限:`grep -A 10 "^## 所需应用权限" references/api.md`。
适用边界 · 注意事项
- 目标不是钉钉知识库或钉钉文档操作时不要使用。
- 没有钉钉开放平台应用、`DINGTALK_APP_KEY`、`DINGTALK_APP_SECRET`、`DINGTALK_MY_USER_ID` 或可用的 `scripts/dt_helper.sh` 时无法执行。
- 不能创建并执行 `/tmp/<task>.sh` 临时脚本、且无法安全执行含变量替换/管道/多行逻辑的命令时,不要按本流程直接执行。