| name | dingtalk-aitable |
| description | 钉钉 AI 表格(多维表)。Use when 用户说 AI表格/多维表/数据表/base/table/建表/查记录/写数据/字段/记录增删改查/筛选/排序/公式/模板搜索/批量导入CSV或JSON/导出/仪表盘/图表/上传附件到表格/按字段类型建表/数据源/创建数据源/更新数据源配置/触发数据源同步/按任务 ID 查询同步状态/获取数据源配置/列出数据源可用来源/获取数据源可同步字段/审批数据同步。不做电子表格单元格读写(走 dingtalk-misc)、文档编辑(走 dingtalk-doc);听记待办入表先用 dingtalk-minutes 提取,再由本 skill 写入。命令前缀:dws aitable。 |
| metadata | {"cli_version":">=0.2.14","category":"product","requires":{"bins":["dws"]}} |
钉钉 AI 表格 Skill
最小 DWS 执行契约
- 钉钉业务操作只通过
dws CLI;本 Skill 明确发布的脚本可编排 dws 并完成预签名文件上传。结构化读取使用 --format json,按真实返回判断结果。
- 已知 leaf 直接执行。只有参数或安全语义不确定时,最多读取一次
dws schema --cli-path "aitable <leaf>" --compact --format json;仅当该 compact leaf Schema 与 Cobra 实际不一致时,才读取同一 leaf 的 dws aitable <leaf> --help。禁止通过父级 Help、产品 Help 或完整 Catalog 探索命令。
- 不猜命令、flag、字段、ID、账号或时间。后续 ID 必须来自真实返回;零命中、多候选或类型不明时停止并消歧。
- 解析目标、读取上下文和最终执行必须使用同一 profile;不得跨组织复用 userId、openDingTalkId 或 openConversationId。多账号组织只使用明确的
isOrgCurrent=true 默认账号;没有默认账号时要求用户指定,禁止选择第一项、最近登录或最近使用账号。
- 不输出或记录 token、refresh token、appSecret、webhook token 等凭据;宿主已注入认证时不要索要凭据。
- 写操作必须符合用户明确意图。是否需要确认以最终 Runtime gate 和 Schema 为准;本轮用户已明确要求执行、目标与影响无歧义的非破坏性写操作时,该明确指令就是本次确认,首次调用直接携带 Runtime 所需的
--yes,不先制造 confirmation_required。删除、停用自动化等破坏性或高风险动作仍须先说明对象、动作与影响并取得独立确认。
- 写后按任务结果契约验证;不能仅凭退出码宣称成功。部分结果、未知投递状态和失败项必须如实保留。
- 时间戳面向用户展示时转换为带时区的可读时间;默认使用当前会话时区,必要时同时保留原值。
- 遇到认证、权限、profile、confirmation 或未知错误时,只加载
dingtalk-shared 中对应 reference;不要连续猜测替代命令。
Shortcut 发现(按需)
aitable 当前有 100 条公开 shortcut,完整清单保留在 Runtime Catalog 与 Schema,不在高频产品根 Skill 中重复展开。已知 leaf 直接执行。只有参数不确定时,最多读取一次 dws schema --cli-path "aitable <leaf>" --compact --format json;仅当该 compact leaf Schema 与 Cobra 实际不一致时,才读取同一 leaf 的 dws aitable <leaf> --help。禁止用父级 Help、产品 Help 或完整 Catalog 探索命令;一个 Case 一旦读取 Reference,就不再读取 Help 或第二个 Reference。
仅当根路由、精确 task reference 和 references/aitable.md 的低频原子索引都无法定位能力时,才执行 dws shortcut list --service aitable --format json 做最终回退;不要为已知意图加载完整 Shortcut Catalog 或产品级 Schema。
Golden Route(高频复合任务)
已有 ID 直接使用;完整 URL 先解析;名称先唯一解析为稳定 ID。零命中或多候选时停止,不默认选第一项。
| 用户意图 | 唯一推荐入口 | 关键边界 |
|---|
| 从 URL 解析稳定 ID | dws aitable +url-resolve --url <URL> | 只解析 URL 中已有的 baseId/tableId/viewId/recordId,不做远端名称搜索 |
| 按名称唯一定位并操作 Base/Table | dws aitable +resolve-base --name <名称> → dws aitable +resolve-table --base <ID> --name <表名> | 默认精确匹配;只有用户明确接受模糊匹配时才加 --fuzzy |
| 搜索 Base 候选或检查是否存在 | dws aitable +base-search --query <关键词> | 用户说“搜索/找一下/候选/如果没有就创建”时直接走本入口,不先调用 +resolve-base;返回 hasMore/nextCursor,仅 hasMore=true 时续页;AITable Base 名称不得路由到 dws aisearch person |
| 浏览 Base 下的数据表 | dws aitable +list-tables --base <ID> | 只返回 tableId/tableName,不加载字段 |
| 新建 Base 与整套表字段 | dws aitable +base-bootstrap --name <名称> --tables '[{"name":"<表名>","fields":[{"fieldName":"<字段名>","type":"text"}]}]' | 表对象键必须是 name,不是 tableName;字段使用 fieldName/type/config;参数已足够时直接执行 |
| 复制 Base 到文档目录 | dws aitable +base-copy --base-id <B> --target-folder-id <FOLDER_NODE_ID> [--only-struct] [--new-name <名称>];只有 URL 时先用 dws doc info --node <URL> --format json 解析 nodeId,然后仍传 --target-folder-id <NODE_ID> | target-folder-id 必须是文件夹 nodeId,不接受 URL、路径、纯数字 dentryId 或 rootFolderId;若 Runtime 返回 target_not_supported/retryable=false,立即报告,不查 Help、不换 ID、不建测试文件夹,也不手工降级复制 |
| 已有 Base 新建一张表与字段 | dws aitable +table-bootstrap --base-id <ID> --name <表名> --fields '<JSON数组>' | 字段使用 fieldName/type/config;自动按 15 个字段分片并读回验证 |
| 读取字段目录或完整配置 | dws aitable field list --base-id <B> --table-id <T> / dws aitable +field-get --base-id <B> --table-id <T> | 只需 fieldId/name/type 用 field list;需要 config 用 +field-get;不存在 +field-list 或 +list-fields |
| 查询记录、记录筛选/排序或字段投影 | dws aitable +record-query --base-id <ID> --table-id <ID> [--record-ids <IDs>] [--field-ids <IDs>] [--filters <JSON>] [--sort <JSON>] [--query <关键词>] |
简单 leaf
意图明确时直接使用;参数不确定才读 leaf Schema:
| 用户意图 | 入口 |
|---|
| 查看 / 改名 / 删除 Base | +base-get / +base-update / +base-delete |
| 搜索模板 | +template-search |
| 查看 / 跨 Base 复制 / 改名 / 删除 Table | +table-get / +table-copy / +table-update / +table-delete |
| 创建 / 更新 / 删除普通字段 | field create / field update / field delete |
| 查看 / 删除 View | +view-get / +view-delete |
| 查看 / 改名 / 删除 Dashboard | +dashboard-get / +dashboard-update / +dashboard-delete |
命令接在 dws aitable 后;资源 ID 使用 --base-id/--table-id/--field-id/--view-id/--dashboard-id,改名使用 --name。+table-copy 参数不规则,执行前只读其 leaf Schema。不读操作 Reference、Help 或产品 Catalog。
数据源查看来源用 +datasource-list-sources,获取字段用 +datasource-get-fields,创建、更新、同步、查状态和查配置用 +datasource-create / +datasource-update / +datasource-sync / +datasource-sync-status / +datasource-get-config。
执行约束
- 记录 filter/sort 缺 fieldId 时才读取字段目录。
- record filter/sort 与 view filter/sort/group 的协议和 Reference 互斥。普通 record query/create/update/upsert 直达;只有历史、分享、删除恢复、空行或特殊字段值读
record-ops。
- 普通字段 type 使用
text/number/date/singleSelect/currency;singleSelect 的 config 为 {"options":[{"name":"<选项>"}]},人民币 currency 为 {"currencyType":"CNY","formatter":"FLOAT_2"}。
- 仅任务包含 4 个及以上独立业务步骤或用户明确要求时使用 TodoWrite;不按单条 CLI 拆步,只在阶段切换时更新。
- 多个资源名要求同一时间戳时,只取一次并复用。
- 复用 JSON 已返回字段,不以
--verbose/raw/pretty 重复请求。
- 数据源创建前必须先
+datasource-list-sources 获取 processCode 等透传字段,不凭记忆构造 sourceConfig。
记录稳定约束
- 记录
cells 使用当前 fieldId,按真实字段类型写值,只读字段不得写入。
- 新增或更新只使用真实返回的 ID 回读;写入效果未知时回读,不重放成功批次。
- 全量查询检查
hasMore,批量写检查最终状态;分页未结束或 partial_success 都不得声称完整完成。
安全边界
- 删除不可逆,按 Runtime confirmation 核对真实目标;
base list 只是最近访问。字段零/多候选、类型不明时停止;多批写保留已完成批次和续跑位置。
- 数据源
+datasource-create / +datasource-update 会触发真实数据同步;执行前确认目标 Base 和 sourceConfig。+datasource-sync 单次最多 5 张表。
按需加载(复杂 JSON 与恢复语义)
Golden/次级直达覆盖时不读 Reference;否则按最终专有能力读取一个精确 Reference。读取后直接执行,不再读取其他 AITable Reference。
不要预加载这些 Reference。
错误最短路径
- 零/多候选、字段歧义或分页不完整:停止并返回证据;需要后续页时只透传真实
nextCursor。
- 类型错误只复核目标字段,不删字段或丢输入;
partial_success 从 checkpoint 续跑,未知写入先回读。
- 错误提供
actions / available_flags 时只按其中的 next_command 修正一次;retryable=false 或目标 ID 类型不符时停止。
- 数据源同步
errorCode=4014 表示同步运行中重复触发,可稍后重试;非数据源表触发同步前先用 +base-get 确认 sync=true。
跨产品边界
- Excel 式单元格、区域和公式操作 →
dingtalk-misc 的 Sheet。
- Base 作为整体在普通文件夹间移动或做外层存储重命名 → Drive;Base 结构复制/删除,以及 Base 内 Table、Dashboard、Section 的创建、复制、移动、重命名、删除 → AITable。
- 记录主键文档正文 → 取得真实 nodeId 后切
dingtalk-doc。