Files
EP-Hub-Skill/.agents/skills/dingtalk-misc/references/url-patterns.md
T
2026-09-02 11:44:52 +08:00

9.0 KiB
Raw Blame History

URL 格式与处理规范

路由第 0 步:意图直达(优先级高于 URL 探测)

用户已经明确表达某产品的内容意图时,直接进入对应产品场域,不要先做 URL 类型 探测。尤其:

  • 明确提到 Markdown / .md 文件的读取或修改,按普通文件走 drive 场域: 先 dws drive download 下载到本地处理,再用 dws drive upload 回传。
  • 明确“读这篇文档 / 编辑文档正文”进入 doc;明确“看这个在线表格数据”进入 sheet

仅当用户只粘贴 URL、没有明确产品意图,或意图与链接类型可能冲突时,才执行下方 类型探测。

alidocs URL 分流决策(意图不明确时执行)

收到 alidocs.dingtalk.com URL 且无法从指令判断产品时,必须按以下顺序判断:

  1. URL 路径含 /i/p/分享短链,禁止调用 dws doc 任何子命令 → 按下方 分享短链处理 执行
  2. URL 路径含 /i/nodes/节点链接,需探测类型 → 按下方 alidocs URL 类型探测流程 执行
  3. URL 路径含 /spreadsheetv2/电子表格直链,直接路由到 sheet,将完整 URL 原样传给 --node 参数
  4. URL 路径含 /document/edit/document/preview 且 query 参数包含 dentryKey文档链接,直接路由到 doc,将完整 URL 原样传给 --node 参数(URL 中不一定有 type=d,只需匹配路径和 dentryKey 参数即可)
  5. 其他 alidocs URL 格式 → 告知用户当前暂不支持该链接格式

已知 URL 格式

需要自行拼接链接时,只能使用以下模板:

产品 用途 URL 格式 ID 来源
aitable AI表格 Base 链接 https://alidocs.dingtalk.com/i/nodes/{baseId} base list/search/create/get 返回的 baseId
aitable AI表格指定数据表链接 https://alidocs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId} baseId + table create/getbase get 返回的 tableId
aitable AI表格指定数据表+视图链接 https://alidocs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}%26viewId%3D{viewId} baseId + tableId + view create/get 返回的 viewId
aitable AI表格模板预览 https://docs.dingtalk.com/table/template/{templateId} template search 返回的 templateId
doc 文档链接 https://alidocs.dingtalk.com/i/nodes/{dentryUuid} doc 命令返回的 dentryUuid
sheet 电子表格链接 https://alidocs.dingtalk.com/i/nodes/{dentryUuid} sheet create 返回的 dentryUuid
sheet 电子表格直链 https://alidocs.dingtalk.com/spreadsheetv2/{key}/...?dentryKey={key}&type=s 用户提供的完整 URL,直接传给 --node
doc 文档链接(edit/preview https://alidocs.dingtalk.com/document/{edit|preview}?...&dentryKey={key} 用户提供的完整 URL,直接传给 --node
minutes 听记链接 https://shanji.dingtalk.com/app/transcribes/{taskUuid} list mine/shared 返回的 taskUuid

不在此表中的产品,禁止自行拼接 URL。命令返回中包含完整链接时直接使用,否则告知用户无法提供。

分享短链处理

alidocs.dingtalk.com/i/p/{shortKey} 是钉钉文档的对外分享短链dws doc 命令无法解析此格式。

识别规则

URL 路径中包含 /i/p/ 即为分享短链(无论后面是否还有子路径),例如:

  • https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2
  • https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2/docs/AY39rGpMPmeVNpXZevZm8OZkXKnaoNQ7
  • https://alidocs.dingtalk.com/i/p/AbCdEfGh1234
  • https://alidocs.dingtalk.com/i/p/AbCdEfGh1234/sheets/XYZ789

关键:只要 URL 中出现 /i/p/,无论后面跟什么子路径(/docs/.../sheets/... 等),都属于分享短链,一律禁止调用 dws doc

处理方式

不要调用 dws doc 任何子命令(包括 doc infodoc read 等),dws 无法解析此格式。

  • 需要获取文档内容时:使用 read_url 工具直接读取该链接
  • 其他操作(如移动、复制、权限管理等):告知用户此链接为分享短链,无法直接执行复制、移动、权限管理等操作。如需保存该文档内容,建议用户在钉钉客户端中打开该页面,手动复制文本内容,然后可通过 dws doc create 创建一篇新文档并将内容写入
# 需要读取文档内容时(无论 /i/p/ 后面有没有子路径,都用 read_url
read_url("https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2")
read_url("https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2/docs/AY39rGpMPmeVNpXZevZm8OZkXKnaoNQ7")

# 禁止(以下全部会失败,dws 无法解析任何含 /i/p/ 的 URL
dws doc info --node "https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2" --format json
dws doc read --node "https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2/docs/AY39rGpMPmeVNpXZevZm8OZkXKnaoNQ7" --format json

read_url 返回内容不完整时

钉钉文档分享页是动态渲染的,read_url 可能只能获取到页面标题等有限信息,无法获取文档正文。此时禁止猜测原因(如"权限不足""文档为空""文档已删除"等),禁止建议用户"提供 /i/nodes/ 格式链接"(分享短链和节点链接是不同体系,普通用户无法自行转换)。应直接告知用户:

这个链接是钉钉文档的分享短链,由于页面是动态渲染的,我无法通过该链接直接获取文档的完整正文内容。

你可以:

  1. 在钉钉客户端中打开该文档,将正文内容复制粘贴给我
  2. 如果文档已保存在你的文档空间中,可以告诉我文档名称,我通过 dws drive search 搜索后再读取

alidocs URL 类型探测流程

alidocs.dingtalk.com/i/nodes/{id} 是钉钉文档空间的统一 URL,可能指向文档、电子表格、多维表、文件、文件夹等不同类型。禁止仅凭 URL 就假定为文档,必须先探测类型再路由到正确的产品。

探测步骤

Step 1 → dws drive info --node "<URL>" --format json
Step 2 → 从返回中提取 extension、nodeType 字段
Step 3 → 按下方路由规则映射到对应产品

路由依据是 extension,不是 contentTypedrive info 检测到 adoc / axls / able 时会自动补充在线文档信息。

路由映射表

条件 路由到产品 后续操作
extension=adoc doc 加载 dingtalk-doc 操作内容
extension=axls sheet 加载本包 references/sheet.md 操作(仅 axls 在线电子表格)
extension=able aitable 将 nodeId 作为 baseId,加载 dingtalk-aitable 操作
extension=xlsx / xls / xlsm / csv drive 必须用 dws drive download 下载到本地处理,禁止走 sheet
nodeType=file(非在线文档扩展名,含 md drive 下载用 dws drive download --node <ID> --output <PATH> --format json;上传/覆盖用 dws drive upload
nodeType=folder drive / wiki 调用 dws drive list --workspace <WS_ID>dws wiki node list 列出子节点
以上均不匹配 告知用户当前暂不支持该类型

axls vs xlsx 关键区分:

  • axls(钉钉在线电子表格,contentType=ALIDOC)→ 走 sheet 产品线(读/写/筛选/导出等服务端原子操作)
  • xlsx / xls / xlsm / csv(上传到文档空间的本地表格文件,contentType=DOCUMENT)→ 必须走 dws drive download 下载到本地后再解析处理,严禁错误路由到 sheet 产品线(sheet 命令只支持在线表格,调用 xlsx 节点会直接报错)
  • 用户想把在线表格导出为 xlsx 文件 → 用 dws sheet export(输入是 axls,输出是 xlsx,这是 axls → xlsx 的格式转换,不属于 xlsx 读取场景)

示例

# 用户传入: https://alidocs.dingtalk.com/i/nodes/abc123
dws drive info --node "https://alidocs.dingtalk.com/i/nodes/abc123" --format json

# 返回 extension=axls → 在线电子表格,路由到 sheet
dws sheet list --node "https://alidocs.dingtalk.com/i/nodes/abc123" --format json

# 返回 extension=xlsx/xls/csv → 本地表格文件,必须下载处理(禁止走 sheet)
dws drive download --node "https://alidocs.dingtalk.com/i/nodes/xlsx456" --output <PATH> --format json

# 返回 nodeType=file → 普通文件,下载
dws drive download --node "https://alidocs.dingtalk.com/i/nodes/def456" --output <PATH> --format json

# 返回 nodeType=folder → 文件夹,列出子节点
dws drive list --workspace <WS_ID> --format json

何时可跳过探测

当用户指令中已明确指定产品(如"帮我读这个文档"、"看下这个表格的数据"),可结合用户意图跳过探测直接路由。仅在以下情况必须执行探测

  • 用户只粘贴 URL,无其他上下文
  • 用户指令与 URL 实际类型可能不一致(如说"文档"但实际是表格)