Token导航 LogoToken导航

Agent Skill · 研究检索

dingtalk-doc(钉钉文档)

用于辅助文档、README、Markdown、说明文和内容稿件的整理与改写。它适合让 Agent 提炼结构、补齐章节、统一术语、检查链接或把零散材料整理成可读文档。使用时应保留项目已有事实、命令和路径,不要把未确认的信息写成确定结论;涉及对外文案时,还需要控制语气,避免过度营销或夸大能力。

dingtalk-doc 是研究检索类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 20,076。

总安装 5,339周安装 227GitHub Stars 2下载 1,870核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.6

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:dingtalk-doc(钉钉文档)
来源仓库:https://github.com/shyzhen/dingtalk-doc
安装命令:
openclaw skills install dingtalk-doc
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install dingtalk-doc

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

钉钉文档管理技能。当用户发送的消息中包含 alidocs.dingtalk.com 链接、要求总结/读取/查看/更新钉钉文档或钉钉知识库文档,或当前上下文已明确对象是钉钉文档时使用。关键词:钉钉文档、钉钉知识库、alidocs、总结、读取、查看、更新、修改、文档、链接。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install dingtalk-doc;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

dingtalk-doc 怎么安装?

在终端执行 openclaw skills install dingtalk-doc。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

dingtalk-doc 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

dingtalk-doc 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

dingtalk-doc 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

dingtalk-doc 用的人多吗?

公开数据是累计安装 5,339 次,近一周安装 227 次,下载 1,870 次,GitHub 2 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

dingtalk-doc 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
dingtalk-doc

钉钉文档 · 本页

5,3392接触敏感数据MIT-0通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
dingtalk-doc
description
钉钉文档管理技能。当用户发送的消息中包含 alidocs.dingtalk.com 链接、要求总结/读取/查看/更新钉钉文档或钉钉知识库文档,或当前上下文已明确对象是钉钉文档时使用。关键词:钉钉文档、钉钉知识库、alidocs、总结、读取、查看、更新、修改、文档、链接。
metadata

钉钉文档管理技能

通过钉钉开放平台 API 管理钉钉文档与钉钉知识库内文档。SKILL.md 只保留 agent 执行所需规则;配置细节、示例、API 背景见 README.md。

何时使用

触发关键词

只有在已经确认对象是钉钉文档时,同时消息包含以下任一关键词时,优先使用本 skill:

类别关键词
平台名钉钉文档、钉钉知识库、alidocs
读取类总结、读取、查看、浏览、列出结构
修改类更新、修改、追加、删除、覆写
对象文档、链接、这篇、这个文档

组合示例:

  • "总结一下这篇钉钉文档"
  • "读取这个 alidocs 链接"
  • "更新文档内容"
  • "删除第三段"

触发场景(优先级从高到低)

场景示例动作
钉钉文档链接alidocs.dingtalk.com/i/nodes/xxx根据意图选择:元数据→get-doc,正文内容→get-content
钉钉上下文 + 链接"总结 https://alidocs.dingtalk.com/..."调用 get-content 读取内容后总结
明确命令"总结这篇文档"、"读取这个 alidocs 链接"根据意图选择命令
已知上下文是钉钉文档前文已给出 alidocs 链接,后续说"更新文档"、"删除某段"、"在第三段后追加"调用对应命令
结构查询"列出结构"、"这个 alidocs 有哪些章节"调用 get-content
块级操作"删除第三段"、"修改这个段落"、"在这里插入一段"先用 get-content 获取 blockId 和位置,再调用 delete-block/modify-block/insert-block

不触发的场景

  • 查询本地文件、离线文档或普通文本内容,且不需要调用钉钉 API
  • 没有文档链接、docKey、或明确钉钉文档上下文,却要求修改文档
  • 用户只说"总结文档""更新这个链接"等泛化请求,但上下文无法确认对象是钉钉文档
  • 与钉钉无关的文档系统,例如本地 Markdown、飞书文档、语雀、Google Docs

运行前提

环境变量

必须配置以下环境变量 (在 Gateway 环境中):

  • DINGTALK_CLIENTID - 钉钉应用 Client ID (AppKey)
  • DINGTALK_CLIENTSECRET - 钉钉应用 Client Secret (AppSecret)

可选环境变量:

  • OPENCLAW_SENDER_ID / DINGTALK_SENDER_ID - 由 OpenClaw / 钉钉连接器注入的当前用户 sender_id;也可以通过命令行 --senderId= 显式传入
  • DINGTALK_DEBUG - 设置为 true 启用调试模式;仅输出方法、路径(查询参数已脱敏)、状态码、requestId 等,不打印文档正文与完整请求体

operatorId 获取方式

不需要在配置中指定!系统会自动从当前会话获取:

  1. 从 OPENCLAW_SENDER_ID 或 DINGTALK_SENDER_ID 获取 sender_id
  2. 调用钉钉 API 查询对应的 unionId
  3. 使用 unionId 作为 operatorId

如果获取失败,会显示友好的错误提示。

执行规则

  • 读取操作不受白名单限制
  • 写入操作必须通过白名单检查;未配置 workspace 或节点名不在白名单内时,一律拒绝!没有任何方式可以绕过白名单检查!
  • whitelist: ["/"] 表示允许写入该 workspace 下的所有节点;更细粒度控制请配置具体文档名,例如 "/三级目录测试文档.adoc"
  • 白名单配置文件 config/whitelist.json 只能由用户手动修改;AI 只能读取、解释、提示用户手动调整,不能替用户改
  • 如果用户没有给出 workspaceId,先运行 list-workspaces
  • 如果用户没有给出目标文档的 nodeId / docKey,先运行 list-docs、search 或 get-doc 确认目标

URL 解析规则

当用户提供钉钉文档 URL 时,按以下规则提取 nodeId:

URL 格式: https://alidocs.dingtalk.com/i/nodes/<nodeId>?...

提取方法:

  1. 从 URL 中提取 nodes/ 和 ? 之间的部分
  2. 该部分即为 nodeId

示例:

URL: https://alidocs.dingtalk.com/i/nodes/oP0MALyR8kOd5BGacKv6NbxE83bzYmDO?utm_scene=team_space
nodeId: oP0MALyR8kOd5BGacKv6NbxE83bzYmDO

提取到 nodeId 后的操作:

  1. 获取文档元数据(名称、知识库 ID 等):get-doc --nodeId=<提取的 nodeId>
  2. 获取文档内容(总结、读取正文):get-content --docKey=<提取的 nodeId>
  3. 注意:get-doc 只返回元数据,get-content 才返回正文内容

执行入口

  • scripts/index.js:主入口
  • scripts/whitelist.js:辅助检查白名单配置

跨平台说明:

  • 本 skill 的脚本基于 Node.js 内置模块实现,Windows、Linux、macOS 只要安装了 node 并配置好环境变量,都可以运行
  • 推荐优先使用相对路径执行:node scripts/index.js ...,这样最不容易受平台路径差异影响

路径示例:

Windows PowerShell 中 ~ 不会自动展开,建议使用以下方式之一:

# ✅ 使用 $env:USERPROFILE
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js

# ✅ 或使用完整绝对路径
node C:\Users\zhenhuaixiu\.openclaw\skills\dingtalk-doc\scripts\index.js

# ❌ 错误(~ 不会展开)
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js

Linux / macOS Shell 示例:

# ✅ 当前目录下直接运行(推荐)
node scripts/index.js list-workspaces

# ✅ 或使用完整绝对路径
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js list-workspaces

命令映射

路径说明:

  • Windows 示例中的 $env:USERPROFILE\.openclaw 会展开为 C:\Users\<用户名>\.openclaw
  • Linux / macOS 示例中的 ~/.openclaw 会展开为用户主目录下的 .openclaw
  • 如果当前工作目录已经在 skill 根目录,直接使用 node scripts/index.js ... 即可

读取操作

命令用途API 端点
list-workspaces获取知识库列表GET /v2.0/wiki/mineWorkspaces
list-docs获取知识库中文档列表GET /v2.0/wiki/nodes
get-doc获取文档元数据(名称、ID、创建者、字数等)GET /v2.0/wiki/nodes/{nodeId}
get-content获取文档正文内容(段落、标题、列表等块结构)GET /v1.0/doc/suites/documents/{docKey}/blocks
search搜索文档GET /v1.0/doc/workspaces/{workspaceId}/docs

示例:

# Linux / macOS
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js list-workspaces
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js list-docs --workspaceId=YRBGvyxxx --parentNodeId=root
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js get-doc --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js get-content --docKey=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js search --workspaceId=YRBGvyxxx --keyword="需求"

# Windows PowerShell
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js list-workspaces
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js list-docs --workspaceId=YRBGvyxxx --parentNodeId=root
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js get-doc --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js get-content --docKey=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js search --workspaceId=YRBGvyxxx --keyword="需求"

写入操作

# Linux / macOS
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js create-doc --workspaceId=YRBGvyxxx --name="新文档" --docType=DOC --parentNodeId=root
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js update-content --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --content="# 标题\
\
内容"
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js update-content --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --docKey=真实docKey --content="# 标题\
\
内容"
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js delete-doc --workspaceId=YRBGvyxxx --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz

# Windows PowerShell
# 创建文档
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js create-doc --workspaceId=YRBGvyxxx --name="新文档" --docType=DOC --parentNodeId=root
# 返回:{ "docKey": "abc123", "nodeId": "xyz789", ... }

# 更新文档内容(整篇覆写,替换全部内容)
# ✅ 推荐:只用 nodeId(大多数情况够用)
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js update-content --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --content="# 标题\
\
内容"

# ✅ 备选:如果上面失败,传入真实的 docKey
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js update-content --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --docKey=真实 docKey --content="# 标题\
\
内容"

# 删除文档
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js delete-doc --workspaceId=YRBGvyxxx --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz

块级操作(精细修改单个段落/元素)

说明:

  • insert-block、modify-block、delete-block 已通过真实文档测试
  • append-text 对应的公开 API 当前返回 InvalidAction.NotFound,不要再调用或承诺
  • 如果用户要“追加内容”,优先改成“插入一个新段落”或“读取原段落后使用 modify-block 整块替换”
# Linux / macOS
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js delete-block --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --blockId=blk123
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js modify-block --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --blockId=blk123 --element='{"blockType":"paragraph","paragraph":{"text":"新内容"}}'
node ~/.openclaw/skills/dingtalk-doc/scripts/index.js insert-block --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --element='{"blockType":"paragraph","paragraph":{"text":"插入的内容"}}' --position=3

# Windows PowerShell
# 删除块元素(删除某个段落/标题/列表项)
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js delete-block --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --blockId=blk123

# 修改块元素(替换单个块的内容,不影响其他部分)
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js modify-block --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --blockId=blk123 --element='{"blockType":"paragraph","paragraph":{"text":"新内容"}}'

# 插入块元素(在指定位置插入新段落/标题等)
node $env:USERPROFILE\.openclaw\skills\dingtalk-doc\scripts\index.js insert-block --nodeId=YQBnd5ExVE0PDnezU2PK2RK6WyeZqMmz --element='{"blockType":"paragraph","paragraph":{"text":"插入的内容"}}' --position=3

参数说明

  • docType: DOC(文字) | WORKBOOK(表格) | MIND(脑图) | FOLDER(文件夹)
  • nodeId: 必填,节点 ID(用于白名单检查)

- 从文档链接 alidocs.dingtalk.com/i/nodes/xxx 提取 xxx 部分 - 通过 get-doc --nodeId=xxx 或 get-content --docKey=xxx 确认

  • docKey: 可选,真实的文档标识符(用于实际写入 API)

- 如果不传,默认使用 nodeId 代替 - 仅在 nodeId 作为 docKey 写入失败时,才需要传入真实的 docKey - 真实 docKey 可通过 createDoc 返回值或钉钉 API Explorer 获取

  • blockId: 块 ID,通过 get-content 获取文档结构后得到(块级操作必需)
  • element: 块元素 JSON 对象(会自动解析,直接传 JSON 字符串即可)

- 示例:--element='{"blockType":"paragraph","paragraph":{"text":"新内容"}}'

  • position: 插入位置(可选),数字,支持 0(表示插到最前面)
  • workspaceId: 知识库 ID(可选)

- 注意:写入操作会通过 nodeId 查询节点真实 workspaceId,传入 --workspaceId 时只能作为一致性校验,不能跳过查询 - 适用场景:已知 workspaceId 且想显式校验目标文档属于该知识库,但 nodeId 仍必需

命令选择指南

需求使用命令说明
重写整篇文档update-content --nodeId=xxx --content="..."替换全部内容
只修改某个段落modify-block --nodeId=xxx --blockId=blk --element='{...}'只影响单个块
在当前位置新增一段insert-block --nodeId=xxx --element='{...}' --position=3插入一个新块,更适合“追加一段”的需求
删除某一段/标题delete-block --nodeId=xxx --blockId=blk删除块
插入新段落/标题insert-block --nodeId=xxx --element='{...}' --position=3在指定位置插入

常见问题

  1. "无法获取文档信息"错误:

- 确保传入的是 nodeId(从文档链接 /i/nodes/xxx 提取) - --workspaceId 不能替代 nodeId,只能作为额外一致性校验

  1. "paramError" / JSON 解析失败:

- --element 必须是合法的 JSON 格式,检查引号转义 - PowerShell 中用单引号包裹:--element='{"type":"paragraph"}'

  1. 更新失败(nodeNotExist 等):

- 尝试传入真实的 docKey:update-content --nodeId=xxx --docKey=真实 docKey --content="..." - createDoc 返回的 docKey 和 nodeId 可能不同

  1. nodeId 和 docKey 到底有什么区别?

- nodeId: 目录树节点 ID(wiki_2.0 API 用),用于定位文档、获取 workspaceId 和节点名、执行白名单检查 - docKey: 文档内容标识符(suites/documents API 用),用于实际读写内容 - 经验:大多数情况下 nodeId 可直接用作 docKey,少数情况需要真实 docKey

  1. 为什么没有 append-text?

- 当前公开接口 POST /v1.0/doc/suites/documents/{docKey}/paragraphs/{blockId}/text 在真实测试中返回 InvalidAction.NotFound - 因此本 skill 不再承诺 append-text,请使用 insert-block 或 modify-block

推荐流程

  1. 先确认凭证和 sender_id 是否可用。
  2. 需要定位文档所在知识库时先跑 list-workspaces。
  3. 需要定位文档时先跑 list-docs、search、get-doc。
  4. 执行写操作前,默认假设会触发白名单校验,不要跳过读取确认步骤。
  5. 如果写入被拒绝,只说明是哪个 workspace / 节点名未通过白名单,并提示用户手动调整 config/whitelist.json。

常见失败

  • 缺少 sender_id:检查钉钉连接器是否注入 OPENCLAW_SENDER_ID / DINGTALK_SENDER_ID
  • forbidden.accessDenied:检查应用权限或白名单
  • invalidRequest.workspaceNode.parentNotFound:检查 parentNodeId
  • 权限拒绝:知识库 xxx 未配置白名单:让用户手动补充 config/whitelist.json
  • nodeNotExist(更新内容时):尝试使用 nodeId 代替 docKey - 钉钉 API 中 createDoc 返回的 docKey 和 overwriteContent 需要的 docKey 可能不一致
  • blockNotExist(块级操作时):先用 get-content 获取文档结构,确认 blockId 正确
  • paramError(modify-block/insert-block):检查 --element 参数是否是合法的 JSON 格式

重要提示

get-doc vs get-content

命令用途返回内容何时使用
get-doc获取文档元数据data.node:名称、ID、创建者、修改时间、字数、workspaceId确认文档存在、获取文档基本信息、定位知识库
get-content获取文档正文data.result.data[]:段落、标题、列表等块结构总结内容、读取正文、准备修改文档

关键区别:

  • get-doc → GET /v2.0/wiki/nodes/{nodeId} → 不包含正文内容
  • get-content → GET /v1.0/doc/suites/documents/{docKey}/blocks → 包含正文块结构
  • 总结、读取内容时,始终使用 get-content,不要用 get-doc

docKey vs nodeId

  • nodeId: 目录树节点 ID(wiki_2.0 API 用),用于定位文档、获取 workspaceId 和节点名、执行白名单检查
  • docKey: 文档内容标识符(suites/documents API 用),用于实际读写内容
  • create-doc 返回的 docKey 和 nodeId 可能是不同的值
  • update-content、get-content 等命令优先使用 nodeId 作为 --docKey 参数
  • 如果使用 docKey 更新失败 (nodeNotExist),请改用 nodeId
  • 经验:大多数情况下 nodeId 可直接用作 docKey,少数情况需要真实 docKey

示例:

# 创建文档后,使用返回的 nodeId 进行更新
node .../index.js create-doc --workspaceId=xxx --name="新文档"
# 返回:{ "docKey": "abc123", "nodeId": "xyz789", ... }

# ✅ 正确:使用 nodeId 更新
node .../index.js update-content --docKey=xyz789 --content="..."

# ❌ 可能失败:使用 docKey 更新
node .../index.js update-content --docKey=abc123 --content="..."

参考

平台分布

OpenClaw

83.63%
按下载量换算1,564

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills