53 KiB
文档 (doc) 命令参考
查询命令帮助
当你不确定某个命令的具体参数、格式或可选项时,优先执行 --help 查询,不要猜测参数名或凭记忆编造。
# 查看 doc 下所有子命令
dws doc --help
# 查看具体命令的完整参数说明
dws doc read --help
dws doc create --help
dws doc block insert --help
# 查看子命令组下的所有命令
dws doc block --help
dws doc permission --help
规则:
- 参数名不确定时 → 先
--help,再调用 - 报错 "unknown flag" 时 →
--help确认正确的 flag 名称 - 不确定某个功能是否存在时 →
dws doc --help查看命令列表
命令总览
搜索 / 遍历文件(已迁移,不再是 doc 子命令)
弃用提示:
dws doc search和dws doc list已迁移到drive/wiki。这两条虽仍能跑,但每次都会打印弃用警告,请改用下面的命令,命令详情见 dingtalk-drive skill。
| 旧命令(弃用) | 改用 | 场景 |
|---|---|---|
dws doc search --query "<关键词>" |
dws drive search --query "<关键词>" |
全局搜文档/文件(跨钉盘+文档空间聚合) |
dws doc search --workspace-ids <id> |
dws wiki node search --workspace <id> --query "<关键词>" |
指定知识库内搜索 |
dws doc list |
dws drive list |
遍历「我的文档」/钉盘根目录 |
dws doc list --folder <id> |
dws drive list --folder <id> |
遍历指定文件夹 |
dws doc list --workspace <id> |
dws drive list --workspace <id> 或 dws wiki node list --workspace <id> |
遍历知识库 |
拿到 nodeId 后,doc read / doc info / doc update / doc block 等内容级命令照常用。
获取文档元信息
Usage:
dws doc info [flags]
Example:
dws doc info --node <DOC_ID>
dws doc info --node "https://alidocs.dingtalk.com/i/nodes/<DOC_UUID>"
dws doc info --node "https://alidocs.dingtalk.com/document/edit?dentryKey=<DENTRY_KEY>"
dws doc info --node "https://alidocs.dingtalk.com/document/preview?dentryKey=<DENTRY_KEY>"
Flags:
--node string 文档 ID 或 URL (必填)
读取文档内容
Usage:
dws doc read [flags]
Example:
dws doc read --node <DOC_ID>
dws doc read --node "https://alidocs.dingtalk.com/i/nodes/<DOC_UUID>"
dws doc read --node "https://alidocs.dingtalk.com/document/edit?dentryKey=<DENTRY_KEY>"
dws doc read --node "https://alidocs.dingtalk.com/document/preview?dentryKey=<DENTRY_KEY>"
Flags:
--node string 文档 ID 或 URL (必填)
创建文档
Usage:
dws doc create [flags]
Example:
dws doc create --name "项目周报"
dws doc create --name "Q1 总结" --content "# Q1 总结" --folder <FOLDER_ID>
dws doc create --name "知识库文档" --workspace <WS_ID>
Flags:
--name string 文档名称 (必填)
--folder string 父文件夹 nodeId / URL
--workspace string Workspace ID
--content string 初始 Markdown 内容
--content-file string 从文件读取初始 Markdown
创建其他类型文件 (表格/脑图/白板/多维表/画板/文件夹)
弃用提示:
dws doc file create --type已弃用,执行时会打印deprecated, use 'dws wiki node create --type <type>'。创建各类型文件节点改用dws wiki node create(与 intent-guide 一致);创建普通文件夹用dws drive mkdir。
Usage:
dws wiki node create [flags]
Example:
dws wiki node create --workspace <WS_ID> --name "数据统计" --type axls
dws wiki node create --workspace <WS_ID> --name "思维导图" --type amind
dws wiki node create --workspace <WS_ID> --name "方案目录" --type folder --folder <PARENT_NODE_ID>
Flags:
--workspace string 目标知识库 ID (必填 — wiki node create 不支持不带 workspace 创建)
--name string 文件名称 (必填)
--type string 文件类型: adoc=文档, axls=表格, appt=演示, adraw=白板, amind=脑图, able=多维表, folder=文件夹
--folder string 父节点 ID (选填)
说明:
wiki node create必须带--workspace(知识库上下文),不能像旧doc file create那样在「我的文档」个人空间直接建。要在个人空间/钉盘建普通文件夹,用dws drive mkdir --name "<名称>"(见 dingtalk-drive skill)。
更新文档内容
Usage:
dws doc update [flags]
Example:
dws doc update --node <DOC_ID> --content "# 追加内容" --mode append
dws doc update --node <DOC_ID> --content "# 完整替换" --mode overwrite
Flags:
--node string 文档 nodeId / URL
--content string Markdown 内容
--content-file string 从文件读取 Markdown
--mode string 更新模式: append / overwrite
上传文件到钉钉文档或钉钉知识库
Usage:
dws doc upload [flags]
Example:
dws doc upload --file ./report.pdf
dws doc upload --file ./slides.pptx --name "Q1汇报.pptx" --folder <FOLDER_ID>
dws doc upload --file ./data.xlsx --workspace <WS_ID> --convert
Flags:
--file string 本地文件路径 (必填)
--name string 文件显示名称 (默认使用文件名)
--folder string 目标文件夹 ID 或 URL
--workspace string 目标知识库 ID
--convert 是否转换为钉钉在线文档
导入本地文件为在线文档
Usage:
dws doc import [flags]
dws doc import get [flags]
Example:
dws doc import --file ./report.docx
dws doc import --file ./notes.md --folder <FOLDER_ID>
dws doc import --file ./data.xlsx --workspace <WS_ID>
dws doc import get --task-id <TASK_ID>
Flags:
--file string 本地文件路径 (必填)
--folder string 目标文件夹 ID 或 URL
--workspace string 目标知识库 ID 或 URL
--name string 导入后文档名称 (默认取文件名)
--task-id string 导入任务 ID (import get 必填)
下载文件到本地(已迁移到 drive)
弃用提示:
dws doc download已迁移到dws drive download(执行doc download会打印弃用警告)。下载已有文件(PDF/图片/附件等非在线文档)改用:
dws drive download --node <NODE_ID> --output ~/downloads/
dws drive download --node <NODE_ID> --output ./report.pdf
注意区分:在线文档(ALIDOC)导出为 docx 仍走
doc export(内容级命令,未迁移);download只下载已有文件。命令详情见 dingtalk-drive skill。
创建文件夹(已迁移)
弃用提示:
dws doc folder create已弃用。创建文件夹改用:
- 个人空间/钉盘 →
dws drive mkdir --name "<名称>" [--folder <父节点>]- 知识库内 →
dws wiki node create --workspace <WS_ID> --name "<名称>" --type folder命令详情见 dingtalk-drive skill。
复制文档/文件
Usage:
dws doc copy [flags]
Example:
dws doc copy --node <DOC_ID> --folder <TARGET_FOLDER_ID>
dws doc copy --node <DOC_ID> --workspace <TARGET_WS_ID>
dws doc copy --node "https://alidocs.dingtalk.com/i/nodes/<DOC_UUID>" --folder <FOLDER_ID>
Flags:
--node string 源文档/文件 ID 或 URL (必填)
--folder string 目标文件夹 ID 或 URL
--workspace string 目标知识库 ID 或 URL (不传 --folder 时复制到该知识库根目录)
移动文档/文件
Usage:
dws doc move [flags]
Example:
dws doc move --node <DOC_ID> --folder <TARGET_FOLDER_ID>
dws doc move --node <DOC_ID> --workspace <TARGET_WS_ID>
Flags:
--node string 源文档/文件 ID 或 URL (必填)
--folder string 目标文件夹 ID 或 URL
--workspace string 目标知识库 ID 或 URL (不传 --folder 时移动到该知识库根目录)
重命名文档/文件
Usage:
dws doc rename [flags]
Example:
dws doc rename --node <DOC_ID> --name "新名称"
dws doc rename --node "https://alidocs.dingtalk.com/i/nodes/<DOC_UUID>" --name "项目周报 v2"
Flags:
--node string 文档/文件 ID 或 URL (必填)
--name string 新名称 (必填)
查询块元素
Usage:
dws doc block list [flags]
Example:
dws doc block list --node <DOC_ID>
dws doc block list --node <DOC_ID> --start-index 0 --end-index 5
dws doc block list --node <DOC_ID> --block-type heading
Flags:
--node string 文档 ID 或 URL (必填)
--start-index int 起始位置 (从 0 开始)
--end-index int 终止位置 (含)
--block-type string 按块类型过滤
插入块元素
Usage:
dws doc block insert [flags]
Example:
dws doc block insert --node <DOC_ID> --text "这是一段文字"
dws doc block insert --node <DOC_ID> --heading "二级标题" --level 2
dws doc block insert --node <DOC_ID> --element '{"blockType":"paragraph","paragraph":{"text":"内容"}}'
dws doc block insert --node <DOC_ID> --text "在此处之前插入" --ref-block <BLOCK_ID> --where before
Flags:
--node string 文档 ID 或 URL (必填)
--text string 快捷: 段落文本内容
--heading string 快捷: 标题文本
--level int 标题级别 1-6 (配合 --heading,默认 1)
--element string 块元素 JSON (高级)
--index int 参照位置索引 (从 0 开始)
--where string 插入方向: before / after (默认 after)
--ref-block string 参照块 ID (优先级高于 --index)
更新块元素
Usage:
dws doc block update [flags]
Example:
dws doc block update --node <DOC_ID> --block-id <BLOCK_ID> --text "新内容"
dws doc block update --node <DOC_ID> --block-id <BLOCK_ID> --element '{"blockType":"heading","heading":{"text":"新标题","level":1}}'
Flags:
--node string 文档 ID 或 URL (必填)
--block-id string 目标块 ID (必填)
--text string 快捷: 段落文本内容
--heading string 快捷: 标题文本
--level int 标题级别 1-6 (配合 --heading,默认 1)
--element string 块元素 JSON (高级)
删除块元素
CAUTION: 不可逆操作 — 执行前必须向用户确认。
Usage:
dws doc block delete [flags]
Example:
dws doc block delete --node <DOC_ID> --block-id <BLOCK_ID> --yes
Flags:
--node string 文档 ID 或 URL (必填)
--block-id string 目标块 ID (必填)
查询文档评论列表
Usage:
dws doc comment list [flags]
Example:
dws doc comment list --node <DOC_ID>
dws doc comment list --node <DOC_ID> --type inline --resolve-status unresolved
dws doc comment list --node <DOC_ID> --limit 20 --cursor <TOKEN>
Flags:
--node string 目标文档的标识,支持传入 URL 或 ID (必填)
--limit int 每页返回的评论数量,默认 50,最大 50
--cursor string 分页游标,从上一次请求的返回结果中获取 (首次请求不传)
--type string 按评论类型过滤: global (全文评论) / inline (划词评论)
--resolve-status string 按解决状态过滤: resolved (已解决) / unresolved (未解决)
创建文档评论
Usage:
dws doc comment create [flags]
Example:
dws doc comment create --node <DOC_ID> --content "这里需要修改"
dws doc comment create --node <DOC_ID> --content "请review" --mention uid1,uid2
Flags:
--node string 目标文档的标识,支持传入 URL 或 ID (必填)
--content string 评论的文字内容,纯文本 (必填)
--mention string 被 @ 的用户 uid 列表,逗号分隔
创建划词评论 (内联评论)
Usage:
dws doc comment create-inline [flags]
Example:
dws doc comment create-inline --node <DOC_ID> --block-id <BLOCK_ID> --start 0 --end 10 --content "这里需要修改"
dws doc comment create-inline --node <DOC_ID> --block-id <BLOCK_ID> --start 5 --end 20 --content "建议调整" --selected-text "被选中的原文"
dws doc comment create-inline --node <DOC_ID> --block-id <BLOCK_ID> --start 0 --end 10 --content "请review" --mention uid1,uid2
Flags:
--node string 目标文档的标识,支持传入 URL 或 ID (必填)
--block-id string 评论锚定所在的块 ID (必填,可通过 dws doc block list 获取)
--start int 选中文本在块内的起始字符偏移量,从 0 开始 (必填)
--end int 选中文本在块内的结束字符偏移量,必须大于 start (必填)
--content string 评论的文字内容,纯文本 (必填)
--selected-text string 选中文本内容,填写后评论列表会展示「引用原文:xxx」
--mention string 被 @ 的用户 uid 列表,逗号分隔
回复文档评论
Usage:
dws doc comment reply [flags]
Example:
dws doc comment reply --node <DOC_ID> --comment-key <COMMENT_KEY> --content "同意"
dws doc comment reply --node <DOC_ID> --comment-key <COMMENT_KEY> --content "比心" --emoji
dws doc comment reply --node <DOC_ID> --comment-key <COMMENT_KEY> --content "请确认" --mention uid1,uid2
Flags:
--node string 目标文档的标识,支持传入 URL 或 ID (必填)
--content string 回复的文字内容,表情回复时填写表情名称 (必填)
--comment-key string 被回复评论的 commentKey,格式: {13位毫秒时间戳}{32位UUID},可从 list/create 结果获取 (必填)
--emoji 设为 true 时作为表情贴图回复 (默认 false)
--mention string 被 @ 的用户 uid 列表,逗号分隔
更新文档评论
Usage:
dws doc comment update --node <DOC_ID> --comment-key <COMMENT_KEY> --content <CONTENT> [--mention uid1,uid2]
commentKey 从 comment list/create/create-inline 返回中获取。只有显式传入 --mention 时才更新被 @ 用户列表。
删除文档评论
Usage:
dws doc comment delete --node <DOC_ID> --comment-key <COMMENT_KEY> --yes
删除评论不可恢复,必须先获得用户明确确认,再添加全局 --yes。
文件内容获取路由规则
当用户请求"分析/查看/读取某个文件内容"时,必须先调用
dws doc info获取文件元数据,再根据返回的contentType和extension字段选择对应链路:
| contentType | extension | 操作 | 命令 |
|---|---|---|---|
| ALIDOC | adoc | 在线获取 Markdown 内容 | dws doc read --node <ID> |
| ALIDOC | axls | 在线读取表格数据 | dws sheet list --node <ID> → dws sheet range read --node <ID> |
| ALIDOC | able | 在线查询多维表格记录 | dws aitable table get --base-id <BASE_ID> → dws aitable record query --base-id <BASE_ID> --table-id <TABLE_ID> |
| 非 ALIDOC | — | 不支持在线分析 | 告知用户需下载到本地后查看 |
关键规则:非 ALIDOC 类型文件(PDF/Word/图片/视频等)不支持在线分析,用户可以选择下载后本地查看。
格式保留度声明(adoc ↔ markdown lossy projection)
dws doc read --format json 返回的 markdown 字段是钉钉 adoc 文档的有损投影。源 adoc 中以下富格式属性在 markdown 这一层没有对应表达,会被丢弃:
- 行高(row height)
- 单元格背景色(cell background color)
- 字体大小(font size)
- 字体颜色的渐变形态(
radial-gradient/linear-gradient— 文本会以<span style="color: radial-gradient(...)">字面保留,但 CSScolor不接受渐变,浏览器无法渲染,字符串保留但语义已死) - 块级缩进 / 表格列宽
- 合并单元格状态
- checkbox 视觉样式(颜色、形状)
- 任何 SVG / 嵌入式画板的渲染细节
硬指引(任何 contentType=ALIDOC 文档都适用):
- 当用户要求"按模板生成同形态变体 / 参照这个生成 / 复刻 / 仿照这个文档"时,禁止走 doc read → create_file → doc create 链路——这条链路会做两次 lossy projection(adoc → markdown 丢一次,markdown → adoc 重建再丢一次),最终交付物只有文本内容,富格式全部失真。
- 正确路径:
dws doc copy(adoc 层面整文档保形复制)+dws doc rename+dws doc block list / dws doc block update(在副本上做局部修改)。详见 best_practices/04-document.md 的template-based-generationrecipe。 - 当用户提到
行高 / 颜色 / 字号 / 表格样式 / 周末高亮等富格式诉求时,agent 必须在动手前显式声明能力边界:"这些属性 markdown 无法表达,需走 copy + block update 路径",避免静默走破坏链。
内容写入管道(create / update 共用)
关键原则:CLI 内置自动分片。超长内容(>10000 字符)自动按 markdown 结构切分后逐片写入,对调用方透明。写入完成后由调用方自行决定是否回读确认。
输入方式选择
| 场景 | 推荐方式 | 说明 |
|---|---|---|
| 短文本(<2KB,无换行/表格/特殊字符) | --content "..." |
字面量传入,最简单 |
| 长文本(≥2KB)、含换行、含表格 | --content-file ./file.md |
必须用文件路径,避免 shell escape 和截断 |
含特殊字符("、\、$、`) |
--content-file ./file.md |
字面量传入会被 shell 转义破坏 |
| 管道/heredoc 输入 | --content - 或 cat file | dws doc ... |
从 stdin 读取 |
自动分片行为
当内容超过 10000 字符时,CLI 自动执行:
- create: 先创建空文档拿
nodeId,再按 markdown 标题边界切分后逐片 append - update (overwrite): 第一片用 overwrite,后续片用 append
- update (append): 所有片段用 append
分片策略按优先级:H1 标题 → H2 标题 → H3 标题 → 空行(段落边界)→ 硬切(保留表格/代码块完整性)
如果某片写入超时,自动将分片大小减半重试(最小 5000 字符,低于此值报错)。
输出格式
写入成功后输出 JSON(混合 [INFO] 进度行):
{"success": true, "nodeId": "xxx", "chunksWritten": 3}
| 字段 | 说明 |
|---|---|
nodeId |
文档节点 ID,可用于后续读取或追加 |
chunksWritten |
实际写入的分片数(1 = 单次写入) |
内容完整性验证(必读)
CLI 不会自动执行回读验证。Agent 必须在文档写入完成后主动回读确认——这是硬约束,不是建议:
- 使用
dws doc read --node <nodeId>读取写入后的文档内容 - 检查关键段落是否完整、顺序是否正确
- 如发现内容缺失或异常,使用
dws doc update --mode append补写缺失部分
何时回读:每次 create / update 操作完成后必须回读。
- 单次写入(≤10000 字符):写完立即回读一次
- 分片写入(>10000 字符):所有分片写完后回读一次全文,校验关键标题与段落完整性
- 破坏性 overwrite(
--mode overwrite --yes):必须回读,确认 overwrite 未被后端静默降级为 append(详见 best_practices/04-document.md "doc update 回读校验规范")- 连续多次编辑同一文档:可在全部编辑完成后统一回读一次
禁止在未回读的情况下直接向用户报告"已完成 / 更新成功"。Agent 自陈"完成"必须基于回读结果,而非工具调用的
success=true字段。
进度输出示例
[INFO] 内容较长 (25000 字符),自动分片写入...
[INFO] 已创建空文档 (nodeId=abc123),开始分片写入...
[INFO] 写入分片 (1/3),10000 字符...
[INFO] 写入分片 (2/3),10000 字符...
[INFO] 写入分片 (3/3),5000 字符...
[INFO] 全部 3 个分片写入完成
{"success": true, "nodeId": "abc123", "chunksWritten": 3}
CONTENT_TRUNCATED 错误
当分片写入持续超时且减半到最小阈值仍失败时,返回 CONTENT_TRUNCATED 错误码。应对策略:
- 检查网络和后端服务状态
- 已写入的部分内容可通过
dws doc read --node <NODE_ID>查看 - 从断点处手动用
dws doc update --mode append继续追加
删除文档/文件到回收站
CAUTION: 不可逆操作 — 执行前必须向用户确认。
Usage:
dws doc delete [flags]
Example:
dws doc delete --node <DOC_ID> --format json # 查询 nodeId: dws drive search --query "..." 或 dws drive list
Flags:
--node string 文档/文件 ID 或 URL (必填)
权限要求: 对文档有"管理"权限。
下载文档附件
Usage:
dws doc media download [flags]
Example:
dws doc media download --node <DOC_ID> --resource-id <RESOURCE_ID>
dws doc media download --node "https://alidocs.dingtalk.com/i/nodes/xxx" --resource-id <RESOURCE_ID>
Flags:
--node string 目标文档的标识,支持传入 URL 或 ID (必填)
--resource-id string 附件资源 ID,可通过 dws doc block list 获取 (必填)
上传附件并插入文档
Usage:
dws doc media insert [flags]
Example:
dws doc media insert --node <DOC_ID> --file ./report.pdf
dws doc media insert --node <DOC_ID> --file ./data.bin --name "数据文件.dat" --mime-type application/octet-stream
dws doc media insert --node <DOC_ID> --file ./image.png --ref-block <BLOCK_ID> --where before
Flags:
--node string 目标文档的标识,支持传入 URL 或 ID (必填)
--file string 本地文件路径 (必填)
--name string 附件显示名称 (默认使用文件名)
--mime-type string 文件 MIME 类型 (默认根据扩展名推断)
--index int 插入位置索引
--where string 相对位置: before / after (配合 --ref-block)
--ref-block string 参考块 ID (配合 --where)
���加文档权限(节点级授权)
Usage:
dws doc permission add [flags]
Example:
dws doc permission add --node <DOC_ID> --users uid1 --role READER
dws doc permission add --node <DOC_ID> --users uid1,uid2 --role EDITOR
dws doc permission add --node "https://alidocs.dingtalk.com/i/nodes/<DOC_UUID>" --users uid1 --role MANAGER
Flags:
--node string 目标文档/文件夹的 ID 或 URL (必填)
--users strings 被授权的用户 userId 列表,逗号分隔 (必填,单次最多 30 个)
--role string 授予的角色 (必填,大小写敏感,必须全大写): MANAGER (管理者) / EDITOR (可编辑) / DOWNLOADER (可下载) / READER (可阅读)
--workspace string 所属知识库 ID (选填,仅用于辅助构造返回的 docUrl,业务实际依赖 nodeId)
重要约束:
- 仅支持 USER 类型授权。
- 角色枚举严格大写:MANAGER / EDITOR / DOWNLOADER / READER(OWNER 不可通过此接口添加)。
- 操作者需在该节点具备「可编辑(EDITOR)」及以上角色(OWNER / MANAGER / EDITOR)。
- 授权对象是文档节点本身,不需要也不应该用
wiki member add(那个是知识库容器级授权)。
修改文档权限(节点级)
Usage:
dws doc permission update [flags]
Example:
dws doc permission update --node <DOC_ID> --users uid1 --role EDITOR
dws doc permission update --node <DOC_ID> --users uid1,uid2 --role READER
Flags:
--node string 目标文档/文件夹的 ID 或 URL (必填)
--users strings 目标用户 userId 列表,逗号分隔 (必填,单次最多 30 个)
--role string 新角色 (必填,大小写敏感,必须全大写): MANAGER / EDITOR / DOWNLOADER / READER
--workspace string 所属知识库 ID (选填)
列出文档权限(节点级)
Usage:
dws doc permission list [flags]
Example:
dws doc permission list --node <DOC_ID>
dws doc permission list --node <DOC_ID> --limit 50
dws doc permission list --node <DOC_ID> --filter-role EDITOR
Flags:
--node string 目标文档/文件夹的 ID 或 URL (必填)
--workspace string 所属知识库 ID (选填)
--limit int 返回数量上限,最大 200 (默认 50)
--filter-role string 按角色过滤: MANAGER / EDITOR / DOWNLOADER / READER (选填)
接口不支持游标分页,使用
--limit一次性拉取。
导出在线文档为 docx(一体化命令)
Usage:
dws doc export [flags]
Example:
dws doc export --node "https://alidocs.dingtalk.com/i/nodes/xxx" --output ./exported.docx
dws doc export --node <DOC_ID> --output ~/downloads/
Flags:
--node string 要导出的文档标识,支持文档 URL 或 dentryUuid (必填)
--output string 本地保存路径,文件路径或目录 (必填)
--export-format string 导出格式,当前仅支持 docx (默认)
CLI 内部自动完成:提交导出任务 → 渐进式退避轮询(最多约 5 分钟)→ 成功后自动下载文件。 只需一条命令,无需手动轮询。
查询导出任务结果(手动兜底)
Usage:
dws doc export get [flags]
Example:
dws doc export get --job-id <JOB_ID>
Flags:
--job-id string 导出任务 ID (必填)
仅在 dws doc export 超时或中断后,用于手动查询任务状态。通常不需要调用。
URL 识别与 DOC_ID 提取
当用户输入包含钉钉文档 URL 时,必须先识别并提取 DOC_ID,再判断意图。
补充:如果这是用户直接提供的原始 alidocs URL,必须先按 链接规范 probe 一次确认真实类型,再判断是否继续走 doc。
支持的 URL 格式
| 格式 | 示例 | DOC_ID 提取方式 |
|---|---|---|
alidocs.dingtalk.com/i/nodes/{id} |
https://alidocs.dingtalk.com/i/nodes/9E05BDRVQePjzLkZt2p2vE7kV63zgkYA |
取 URL 路径最后一段:9E05BDRVQePjzLkZt2p2vE7kV63zgkYA |
alidocs.dingtalk.com/i/nodes/{id}?queryParams |
https://alidocs.dingtalk.com/i/nodes/abc123?doc_type=wiki_doc |
忽略 query 参数,取路径最后一段:abc123 |
alidocs.dingtalk.com/document/{edit|preview}?...&dentryKey={key} |
https://alidocs.dingtalk.com/document/edit?dentryKey=wo1g3x54FzVEJ5yE |
不要提取 dentryKey 单独使用,必须将完整 URL 原样传给 --node |
提取规则
- 匹配 URL 中
alidocs.dingtalk.com域名 - 路径为
/i/nodes/{id}时,取 URL path 的最后一段作为 DOC_ID(去掉 query string 和 fragment) - 路径为
/document/edit或/document/preview且 query 含dentryKey时,禁止提取dentryKey当 DOC_ID;将整段 URL 原样传给--node,CLI 会自动解析(追踪参数如utm_source、chInfo也不必清理) - 提取出的 DOC_ID 可直接用于所有
--node参数,也可将完整 URL 传给--node(CLI 会自动解析)
ID 边界与参数映射
nodeId是doc命令的统一节点标识;文档、文件夹、文件都通过nodeId或完整alidocsURL 传给--node/--folder。dentryUuid是alidocsURL/i/nodes/{dentryUuid}的最后一段,在doc场景中等价于可传入 CLI 的nodeId;不要把它改写成数字 ID。dentryId通常是纯数字,不是doc的nodeId,也不是doc --folder的目标文件夹 ID;不要把数字dentryId当作--node、--folder,也不要当作隐藏兼容 alias(如--parent-id/--parent-folder-id)的取值。- 目标父文件夹的 canonical flag 是
--folder <folderNodeId或folderUrl>,目标知识库使用--workspace <workspaceId或workspaceUrl>。CLI 可能接受--parent-id/--parent-folder-id作为隐藏兼容 alias,但 skill 正文和示例应统一教--folder,不要把 drive/chat 链路里的数字 parentId 搬到 doc 命令。 - 如果上下文只有数字
dentryId,但用户要读、改、移动、复制、重命名文档,先通过drive search/drive list/ 用户提供的alidocsURL 获取nodeId/dentryUuid,不要用数字dentryId重试为父目录参数。
处理流程
用户输入含 alidocs.dingtalk.com URL
→ 若是用户直接提供的原始 URL,先按链接规范做 probe
→ 提取 DOC_ID(URL 路径最后一段)
→ 结合用户意图选择命令(doc 默认 read,folder 默认 drive list,file 默认 drive download)
→ 将 DOC_ID 传给 --node 参数
意图判断
用户说"找文档/搜文档/最近文档":
- 搜索 →
dws drive search(全局)或dws wiki node search --workspace <id>(指定知识库) - 浏览 →
dws drive list(doc search/doc list已弃用,见本文顶部「搜索 / 遍历文件」)
用户说"看文档/读内容/文档内容":
- 读取 →
read(需文档 ID 或 URL) - 元信息 →
info
用户说"写文档/创建文档":
- 新建文字文档(adoc)→
doc create - 追加内容 →
update --mode append - 整篇覆盖替换 → 先
update --mode overwrite --dry-run预览,用户确认后再update --mode overwrite --yes - 指定父目录时,只有明确的文档文件夹
nodeId/alidocs文件夹 URL 才能放入--folder;上一步若只返回了纯数字dentryId、spaceId或 driveparent-id,不要把它传给 doc 的--folder
严禁把「创建表格」路由到
doc create:
- 用户说"创建表格/新建表格/建个电子表格/在线表格" → 走
dws sheet create(axls 在线电子表格)- 用户说"创建多维表格/新建 AI 表格/建 base/数据库表" → 走
dws aitable base create(able 多维表格)
用户说"新建脑图/白板/多维表/演示文稿":
- 用
dws wiki node create --workspace <WS_ID> --type <type>指定类型 (axls/amind/adraw/able/appt);doc file create已弃用 - 注意
wiki node create必须带--workspace(知识库上下文)
用户说"建文件夹/新建目录":
- 个人空间/钉盘 →
dws drive mkdir --name "<名称>" - 知识库内 →
dws wiki node create --workspace <WS_ID> --type folder(doc folder create/doc file create --type folder已弃用)
用户说"上传文件/传文件/上传到文档/上传到知识库":
- 上传 →
upload(需本地文件路径) - 上传并转换 →
upload --convert
用户说"导入文件/导入为在线文档/导入 Word/导入 Excel/导入 xmind/导入 Markdown/把本地文件转在线文档":
- 导入并转换为在线文档 →
doc import --file <本地路径> - 支持 docx/doc/xlsx/xls/md/txt/xmind/mark,文件大小不超过 20MB
- 如果用户指定知识库或文件夹,补充
--workspace或--folder - 不要把本地文件内容先读出来再
doc create/update;应直接使用doc import
用户说"下载/导出/下载到本地/导出文档/导出为Word/导出为docx/把文档导出来":
- 必须先判断目标文件类型,再决定走
doc export还是drive download:- 在线文档(alidocs/adoc)→
doc export(内容级命令,格式转换后导出为 docx,未迁移) - 已有文件(PDF、图片、附件、视频等非在线文档)→
drive download(doc download已弃用)
- 在线文档(alidocs/adoc)→
- 判断方法:
- 用户明确说"导出文档"/"导出为 Word/docx" → 直接走
doc export - 用户明确说"下载 PDF/图片/附件" → 直接走
drive download - 不确定时,先用
doc info --node <ID>查询节点信息,根据contentType判断:contentType=ALIDOC→ 走doc exportcontentType=DOCUMENT/IMAGE/VIDEO等 → 走drive download
- 用户明确说"导出文档"/"导出为 Word/docx" → 直接走
严禁将"导出文档"直接路由到
drive download。drive download只能下载已有文件(原样下载),doc export是将在线文档格式转换后导出为 docx,两者完全不同。
用户说"复制文档/拷贝一份/复制到":
- 复制 →
copy(需源 --node 和目标 --folder/--workspace)
用户说"移动文档/搬到/移到/转移文件":
- 移动 →
move(需源 --node 和目标 --folder/--workspace)
用户说"重命名/rename/改名/改文档名/修改文档名称/修改文档标题/把这个文档叫做...":
- 重命名 →
doc rename(需文档 ID 或 URL + 新名称) - 只要意图是修改文档在列表和链接中展示的名称,统一路由到
dws doc rename --node <DOC_ID_OR_URL> --name "新名称";不要走drive、doc update或重新doc create - 只有用户明确说"正文里的标题/章节标题/段落标题/H1 标题"时,才走
block update
用户说"删除文档/删掉这个文件/移到回收站/丢掉这篇文档":
- 删除节点 →
delete(危险操作,需--yes确认;需文档 ID 或 URL)
用户说"插入附件/上传附件到文档/往文档里加文件/加附件":
- 插入附件 →
media insert(需文档 ID 或 URL + 本地文件路径)
用户说"插入图片/加图片/放张图/嵌入图片/往文档里插图":
- 插入图片 →
media insert(需文档 ID 或 URL + 本地图片文件路径) - 注意:图片也是通过
media insert作为附件块插入文档,不是通过block insert
用户说"下载附件/获取附件/取出文档里的附件":
- 下载附件 →
media download(需文档 ID 或 URL + 资源 ID)
用户说"编辑块/改段落/插入标题/删除块":
- 查看结构 →
block list - 插入 →
block insert - 修改 →
block update - 删除 →
block delete
用户说"给某人开权限/分享给某人/授权某文档/把这篇文档给 xxx 看":
- 新增权限 →
permission add(需--node+--user+--role) - 修改权限 →
permission update - 查看谁有权限 →
permission list
关键区分:
- "把某篇文档授权给某人" →
doc permission add(节点级,包括「我的文档」下的文档都支持)- "把某个知识库整体授权给某人" →
wiki member add(容器级,但**「我的文档」个人空间不支持**)
补充:如果用户直接粘贴的是原始
alidocsURL,先按 链接规范 probe;只有 probe 确认是adoc/file/folder后,才继续按下列意图执行。
用户直接粘贴文档 URL(无其他指令):
- 默认 →
read(读取文档内容) - 如 URL 明显是文件夹 →
drive list(列出文件夹内容;doc list 已弃用)
用户粘贴 URL + 附加指令:
- "帮我看看这个文档" →
read - "这个文档的信息" →
info - "往这个文档追加内容" →
update --mode append - "把这个文档标题改成 X" / "这个文档改名为 X" →
rename - "把正文里的一级标题/章节标题改成 X" →
block update
关键区分: doc(文档编辑/阅读) vs aitable(数据表格操作) vs drive(钉盘文件管理)
用户说"上传文件/传文件/上传到文档/上传到知识库":
- 上传 →
upload(需本地文件路径) - 上传并转换 →
upload --convert
用户说"下载文件/导出文件/下载到本地":
- 下载 →
download(需文件节点 ID 或 URL)
用户说"编辑块/改段落/插入标题/删除块":
- 查看结构 →
block list - 插入 →
block insert - 修改 →
block update - 删除 →
block delete
用户直接粘贴文档 URL(无其他指令):
- 默认 →
read(读取文档内容) - 如 URL 明显是文件夹 →
drive list(列出文件夹内容;doc list 已弃用)
用户粘贴 URL + 附加指令:
- "帮我看看这个文档" →
read - "这个文档的信息" →
info - "往这个文档追加内容" →
update --mode append - "编辑这个文档的标题" →
block update
关键区分: doc(文档编辑/阅读) vs aitable(数据表格操作) vs drive(钉盘文件管理)
核心工作流
# ── 工作流 1: 浏览并阅读文档 ──
# 1. 浏览我的文档/钉盘根目录(doc list 已弃用 → drive list)
dws drive list --format json
# 2. 浏览子文件夹
dws drive list --folder <DOC_FOLDER_NODE_ID> --format json
# 3. 获取文档元信息 (标题、类型、权限)
dws doc info --node <DOC_ID> --format json
# 4. 读取文档内容 (Markdown 格式)
dws doc read --node <DOC_ID> --format json
# ── 工作流 2: 创建文档并写入内容 ──
# 1. (可选) 创建文件夹 — 提取 nodeId(doc folder create 已弃用 → drive mkdir)
dws drive mkdir --name "项目资料" --format json
# 2. 创建文档 — 提取 nodeId
dws doc create --name "项目周报" --folder <DOC_FOLDER_NODE_ID> --format json
# 3. 写入内容 (追加模式)
dws doc update --node <DOC_ID> --content "# 本周总结\n\n- 完成了 A\n- 推进了 B" --mode append --format json
# ── 工作流 3: 一步创建带内容的文档 ──
dws doc create --name "会议纪要" --content "# 会议纪要\n\n## 议题\n\n1. ..." --format json
# ── 工作流 4: 上传本地文件到钉钉文档/知识库 ──
# 1. 上传到"我的文档"根目录
dws doc upload --file ./report.pdf
# 2. 上传到指定文件夹
dws doc upload --file ./slides.pptx --name "Q1汇报.pptx" --folder <DOC_FOLDER_NODE_ID>
# 3. 上传到知识库并转换为在线文档
dws doc upload --file ./data.xlsx --workspace <WS_ID> --convert
# ── 工作流 5: 下载/导出文件到本地 ──
# 必须先用 info 判断文件类型,再决定用 drive download 还是 doc export:
# - contentType 为 ALIDOC(在线文档)→ 用 doc export
# - contentType 为 DOCUMENT/IMAGE/VIDEO 等(已有文件)→ 用 drive download
# 步骤 1: 查询文件类型
dws doc info --node <NODE_ID> --format json
# 根据返回的 contentType 字段判断:
# 如果是已有文件 (非 ALIDOC),用 drive download(doc download 已弃用):
dws drive download --node <NODE_ID> --output ~/downloads/
# 如果是在线文档 (ALIDOC),用 doc export:
dws doc export --node <NODE_ID> --output ~/downloads/
# ── 工作流 5a: 导入本地文件为在线文档 ──
# 导入到默认位置
dws doc import --file ./report.docx --format json
# 导入到指定文件夹
dws doc import --file ./notes.md --folder <DOC_FOLDER_NODE_ID> --format json
# 导入到知识库
dws doc import --file ./data.xlsx --workspace <WS_ID> --format json
# 如果导入命令超时或中断,可用 import get 手动查询任务状态:
# dws doc import get --task-id <TASK_ID>
# ── 工作流 6: 上传附件并插入文档 ──
# media insert 自动完成三步流程:
# 1. 获取附件上传凭证 (get_doc_attachment_upload_info)
# 2. HTTP PUT 上传文件到 OSS
# 3. 插入附件块到文档 (insert_document_block)
# 1. 基本用法: 插入本地文件到文档
dws doc media insert --node <DOC_ID> --file ./report.pdf
# 2. 指定附件显示名称
dws doc media insert --node <DOC_ID> --file ./data.xlsx --name "Q1数据报表.xlsx"
# 3. 指定 MIME 类型 (文件扩展名无法推断时)
dws doc media insert --node <DOC_ID> --file ./data.bin --name "导出数据.dat" --mime-type application/octet-stream
# 4. 在指定块之前插入附件
dws doc media insert --node <DOC_ID> --file ./image.png --ref-block <BLOCK_ID> --where before
# 5. 完整流程: 创建文档 → 写入内容 → 插入附件
dws doc create --name "项目报告" --content "# 项目报告\n\n以下为相关附件:" --format json
# 提取 nodeId 后:
dws doc media insert --node <DOC_ID> --file ./design.pdf
dws doc media insert --node <DOC_ID> --file ./timeline.xlsx --name "项目时间线.xlsx"
# ── 工作流 7: 块级精细编辑 ──
# 1. 查看文档块结构 — 获取 blockId
dws doc block list --node <DOC_ID> --format json
# 2. 在文档末尾插入段落
dws doc block insert --node <DOC_ID> --text "新增内容"
# 3. 在指定块之前插入标题
dws doc block insert --node <DOC_ID> --heading "新章节" --level 2 --ref-block <BLOCK_ID> --where before
# 4. 更新某个块的内容
dws doc block update --node <DOC_ID> --block-id <BLOCK_ID> --text "修改后的内容"
# 5. 删除块
dws doc block delete --node <DOC_ID> --block-id <BLOCK_ID> --yes
# ── 工作流 8: 复制/移动/重命名文档 ──
# 获取 nodeId 的三种方式(按场景选择,无需全部执行):
# 方式 A: 用户直接提供文档 URL — 直接传给 --node,无需额外查询
# 方式 B: 搜索文档 — 从返回中提取 nodeId(doc search 已弃用 → drive search)
dws drive search --query "项目周报" --format json
# 方式 C: 浏览文件夹 — 从返回中提取 nodeId(doc list 已弃用 → drive list)
dws drive list --folder <DOC_FOLDER_NODE_ID> --format json
# 注意: 这里的 <DOC_FOLDER_NODE_ID> 是文件夹 nodeId/dentryUuid 或文件夹 URL,不是数字 dentryId;示例统一使用 canonical --folder。
# 复制文档到指定文件夹(--node 支持 ID 或 URL)
dws doc copy --node <DOC_ID_OR_URL> --folder <TARGET_DOC_FOLDER_NODE_ID> --format json
# 复制到目标知识库根目录(不传 --folder 时)
dws doc copy --node <DOC_ID_OR_URL> --workspace <TARGET_WS_ID> --format json
# 移动文档到指定文件夹
dws doc move --node <DOC_ID_OR_URL> --folder <TARGET_DOC_FOLDER_NODE_ID> --format json
# 移动到目标知识库根目录(不传 --folder 时)
dws doc move --node <DOC_ID_OR_URL> --workspace <TARGET_WS_ID> --format json
# 重命名文档
dws doc rename --node <DOC_ID_OR_URL> --name "新名称" --format json
# 删除文档到回收站(危险操作:必须先向用户确认,用户同意后才加 --yes 执行)
# 正确流程:1.向用户展示"即将删除「文档名」到回收站" → 2.等用户确认 → 3.执行下面命令
dws doc delete --node <DOC_ID_OR_URL> --yes --format json
# ── 工作流 9: 文档评论管理 ──
# 1. 查看文档的所有评论
dws doc comment list --node <DOC_ID> --format json
# 2. 在文档上创建评论
dws doc comment create --node <DOC_ID> --content "这里需要补充数据来源" --format json
# 3. 创建评论并 @ 相关人
# 先搜索用户: dws contact user search --query "张三" --format json → 提取 userId
# 再将 userId 传入 --mention
dws doc comment create --node <DOC_ID> --content "请确认这部分内容" --mention <userId1>,<userId2> --format json
# 4. 更新某条评论(可选 --mention)
dws doc comment update --node <DOC_ID> --comment-key <COMMENT_KEY> --content "已按最新数据修正" --format json
# 5. 删除某条评论(不可恢复,必须先确认)
dws doc comment delete --node <DOC_ID> --comment-key <COMMENT_KEY> --yes --format json
# 6. 回复某条评论(commentKey 从 list 或 create 返回中获取)
dws doc comment reply --node <DOC_ID> --comment-key <COMMENT_KEY> --content "已修改" --format json
# 7. 用表情回复评论
dws doc comment reply --node <DOC_ID> --comment-key <COMMENT_KEY> --content "比心" --emoji --format json
# 8. 创建划词评论(针对文档中某段选中文本)
# 先获取块列表: dws doc block list --node <DOC_ID> --format json → 提取 blockId 和文本内容
# 确定选中文本在块内的起始偏移量 (start) 和结束偏移量 (end)
dws doc comment create-inline --node <DOC_ID> --block-id <BLOCK_ID> --start 0 --end 10 --content "这里需要修改" --format json
# 9. 创建划词评论并附带引用原文 + @ 相关人
dws doc comment create-inline --node <DOC_ID> --block-id <BLOCK_ID> --start 5 --end 20 --content "请确认这部分" --selected-text "被选中的原文内容" --mention <userId1>,<userId2> --format json
# ── 工作流 10: 导出在线文档为 docx ──
# 一条命令自动完成(提交→轮询→下载),无需手动编排
dws doc export --node <DOC_ID_OR_URL> --output ./exported.docx
# 如果导出命令超时或中断,可用 export get 手动查询任务状态:
# dws doc export get --job-id <JOB_ID>
上下文传递表
| 操作 | 从返回中提取 | 用于 |
|---|---|---|
drive list(原 doc list,已弃用) |
nodes[].nodeId / folder 类型 nodeId |
read / info / update / block 的 --node;folder 用作 --folder |
drive search(原 doc search,已弃用) |
文档 nodeId / URL / createTime / creatorUid |
read / info / update 的 --node;创建时间与创建者信息 |
create |
nodeId |
update / block 操作的 --node |
import |
nodeId / documentUrl / documentName / documentType;中断时提取 taskId |
后续 read / info / sheet 操作;中断后用 doc import get --task-id |
drive mkdir(原 doc folder create,已弃用) |
nodeId |
create 的 --folder |
block list |
blockId |
block insert 的 --ref-block, block update/delete 的 --block-id |
comment list |
commentList[].commentKey |
comment reply/update/delete 的 --comment-key |
comment create / comment create-inline |
commentKey |
comment reply/update/delete 的 --comment-key |
block list |
blockId + 文本内容 |
comment create-inline 的 --block-id 及 --start/--end 计算 |
contact user search |
userId |
comment create / create-inline / reply / update 的 --mention |
wiki node create(原 doc file create,已弃用) |
nodeId |
后续 read / update / block 操作的 --node(仅 adoc 支持 read/update,axls/amind 等类型用各自产品的命令) |
copy / move |
新 nodeId(copy)或原 nodeId(move) |
后续 read / info 等的 --node |
nodeId 多格式说明
所有 --node 参数同时支持以下格式,系统自动识别:
- 文档 ID: 字母数字字符串,如
9E05BDRVQePjzLkZt2p2vE7kV63zgkYA - 文档 URL:
https://alidocs.dingtalk.com/i/nodes/{dentryUuid},如https://alidocs.dingtalk.com/i/nodes/9E05BDRVQePjzLkZt2p2vE7kV63zgkYA - 文档链接(edit/preview):
https://alidocs.dingtalk.com/document/{edit|preview}?...&dentryKey={key}(必须传入完整 URL,不要提取其中的 query 参数单独使用)
以下命令效果相同:
dws doc read --node 9E05BDRVQePjzLkZt2p2vE7kV63zgkYA
dws doc read --node "https://alidocs.dingtalk.com/i/nodes/9E05BDRVQePjzLkZt2p2vE7kV63zgkYA"
dws doc read --node "https://alidocs.dingtalk.com/document/edit?dentryKey=wo1g3x54FzVEJ5yE"
dws doc read --node "https://alidocs.dingtalk.com/document/preview?cid=74993670680&type=d&docKey=Pd6l2Z7V8ZWydl7M&dentryKey=rBGBr2r1HmwanAGW"
注意:
document/edit和document/preview格式 URL 中的dentryKey参数值不是合法的独立 nodeId,禁止提取后单独使用,必须传入完整 URL。URL 中可能包含utm_source、chInfo等追踪参数,无需手动去除,直接传入完整 URL 即可。
--folder 参数同样支持文件夹 URL 或 ID。
长 Markdown 写入
核心规则:含多行、表格、\n 或长度 >2KB 的 Markdown 必须通过 --content-file 或 --content -(stdin)传入,禁止直接作为 --content 命令行字符串——shell escape 会破坏换行和表格,且命令行长度受限。
dws doc create 和 dws doc update 支持两种内容来源(--content-file 优先于 --content):
| 形式 | 说明 |
|---|---|
--content "..." |
字面量(仅推荐短文本 <2KB 且无换行/表格) |
--content - |
从 stdin 读取(可配合 heredoc/pipe) |
--content-file path |
从文件读取(UTF-8),推荐 |
短/中等长度(< 200KB)— 单步创建
# 1. 把内容写入 UTF-8 文本文件:
# Linux/Mac: /tmp/<name>.md;Windows: %TEMP%\<name>.md
# 2. 一步创建+写入:
dws doc create --name "<文档名>" --content-file <tmp> [--folder <ID>] [--workspace <ID>]
超长(> 200KB 兜底)— 创建空文档 + 分片追加
# 1. 创建空文档拿 nodeId
dws doc create --name "<文档名>" [--folder/--workspace] # → nodeId
# 2. 按 markdown 标题或段落边界切成 ≤200KB 的片段(不要切断表格)
# 3. 逐个追加:
dws doc update --node <nodeId> --content-file <part> --mode append
stdin 变体
# pipe
cat report.md | dws doc update --node <DOC_ID> --content - --mode append
# heredoc(真实换行,含表格)
dws doc update --node <DOC_ID> --mode append --content - <<'EOF'
## 追加段落
| 列1 | 列2 |
|---|---|
| a | b |
EOF
注意事项
export是一体化命令,一条命令自动完成提交→轮询→下载,无需手动编排轮询。CLI 内部使用渐进式退避轮询(最多约 5 分钟)export超时或中断后,CLI 会输出jobId,可用dws doc export get --job-id <jobId>手动查询任务状态export当前仅支持钉钉在线文档 (alidocs) 导出为docx;当前开源 CLI 未暴露在线表格导出命令,在线表格数据读取走dws sheet range read --node <ID>update --mode overwrite会清空原内容后重写,⚠️ 谨慎使用;必须先--dry-run预览并在用户确认后加--yes;默认--mode append(追加)更安全read返回 Markdown 格式的文档内容,仅限有"下载"权限的文档read返回的内容中,文档里的附件会以 OSS 临时下载链接形式给出(如https://alidocs2.oss-cn-zhangjiakou.aliyuncs.com/res/.../att/<resourceId>.ext?Expires=...),该链接会过期。链接过期后,可从 URL 路径中提取<resourceId>(即/att/后、扩展名前的 UUID 部分),然后使用media download --node <DOC_ID> --resource-id <resourceId>重新获取下载链接create不传--folder和--workspace时,默认创建在"我的文档"根目录create只能建"文档"(adoc);要建表格/脑图/白板/多维表/演示,用dws wiki node create --workspace <id> --type <type>(doc file create已弃用);建普通文件夹用dws drive mkdirblock list/insert/update/delete是块级精细编辑,适合结构化修改;简单内容追加建议用update --mode appendblock insert优先使用--text或--heading快捷方式;复杂块类型 (table, callout 等) 使用--elementJSON--content参数中的换行必须使用真实换行符(即实际的换行字符,UnicodeU+000A),而不是字面量字符串\n(反斜杠加字母 n)。在通过程序或大模型构造此参数时,请确保字符串在发送前已正确反转义。如果传入的是两个字符的字面量\n,所有内容将渲染在同一行,导致标题、段落和表格格式全部错乱。含多行/表格/长文本时优先用--content-file path.md或--content -(stdin),不经过 shell escape,换行和表格都保持原样(详见下方「长 Markdown 写入」)。- 块类型包括: paragraph, heading, blockquote, callout, columns, orderedList, unorderedList, table, sheet, attachment, slot
- 关键区分: doc(文档内容级操作) vs wiki(知识库空间级管理) vs aitable(数据表格操作) vs drive(钉盘文件管理)
- wiki 是知识库容器,doc 是知识库中的文档内容;需要
workspaceId时,先用dws wiki space list/search获取,再传给 doc 的--workspace参数 doc upload vs drive upload:用户提到"知识库/文档空间/workspace" →doc upload;提到"钉盘/网盘/我的文件" →drive upload;未明确目标时默认drive uploadupload支持上传任意类型文件 (PDF、Office、图片等) 到钉钉文档空间或知识库;--convert可将 Office 文件转换为钉钉在线文档upload是三步自动完成的流程 (获取凭证 → OSS 上传 → 提交入库),无需手动分步操作download是两步自动完成的流程 (获取下载链接 → HTTP GET 下载),支持自动推断文件名;--output可指定文件路径或目录media insert是三步自动完成的流程 (获取附件上传凭证 → OSS 上传 → 插入附件块到文档),无需手动分步操作media insert的--mime-type可选,不指定时根据文件扩展名自动推断;支持常见文件类型 (PDF、Office、图片、视频、压缩包等)media insert与upload的区别:upload将文件上传到文档空间/知识库作为独立文件;media insert将文件作为附件块插入到文档正文中media download用于获取文档正文中附件的临时下载链接,--resource-id可通过block list返回的 attachment 块获取copy需要对源节点有"阅读"权限,且对目标文件夹有"编辑"权限move需要对源节点有"管理"权限,且对目标文件夹有"编辑"权限;移动后原位置的文档将不再存在rename需要对文档有"编辑"权限copy/move不传--folder时,--workspace表示放到知识库根目录;两者都不传则回落到"我的文档"comment create是全文评论;comment create-inline是划词评论,必须先block list拿到blockId并确定--start/--end偏移(按块内纯文本字符算,从 0 开始)
自动化脚本
| 脚本 | 场景 | 用法 |
|---|---|---|
| doc_create_and_write.py | 创建文档并写入 Markdown 内容 | python doc_create_and_write.py --name "周报" --content "# 本周总结" |