cc-lark 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/.github/workflows/ci.yml +47 -0
  2. package/.github/workflows/release.yml +47 -0
  3. package/.github/workflows/sync-upstream.yml +127 -0
  4. package/.prettierrc.json +7 -0
  5. package/README.md +214 -0
  6. package/dist/core/api-error.d.ts +193 -0
  7. package/dist/core/api-error.d.ts.map +1 -0
  8. package/dist/core/api-error.js +263 -0
  9. package/dist/core/api-error.js.map +1 -0
  10. package/dist/core/auth-errors.d.ts +13 -0
  11. package/dist/core/auth-errors.d.ts.map +1 -0
  12. package/dist/core/auth-errors.js +14 -0
  13. package/dist/core/auth-errors.js.map +1 -0
  14. package/dist/core/config.d.ts +60 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +115 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/device-flow.d.ts +80 -0
  19. package/dist/core/device-flow.d.ts.map +1 -0
  20. package/dist/core/device-flow.js +231 -0
  21. package/dist/core/device-flow.js.map +1 -0
  22. package/dist/core/index.d.ts +16 -0
  23. package/dist/core/index.d.ts.map +1 -0
  24. package/dist/core/index.js +16 -0
  25. package/dist/core/index.js.map +1 -0
  26. package/dist/core/lark-client.d.ts +136 -0
  27. package/dist/core/lark-client.d.ts.map +1 -0
  28. package/dist/core/lark-client.js +315 -0
  29. package/dist/core/lark-client.js.map +1 -0
  30. package/dist/core/token-store.d.ts +67 -0
  31. package/dist/core/token-store.d.ts.map +1 -0
  32. package/dist/core/token-store.js +215 -0
  33. package/dist/core/token-store.js.map +1 -0
  34. package/dist/core/types.d.ts +286 -0
  35. package/dist/core/types.d.ts.map +1 -0
  36. package/dist/core/types.js +11 -0
  37. package/dist/core/types.js.map +1 -0
  38. package/dist/core/uat-client.d.ts +64 -0
  39. package/dist/core/uat-client.d.ts.map +1 -0
  40. package/dist/core/uat-client.js +227 -0
  41. package/dist/core/uat-client.js.map +1 -0
  42. package/dist/core/version.d.ts +26 -0
  43. package/dist/core/version.d.ts.map +1 -0
  44. package/dist/core/version.js +50 -0
  45. package/dist/core/version.js.map +1 -0
  46. package/dist/index.d.ts +12 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +116 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/tools/bitable/app.d.ts +20 -0
  51. package/dist/tools/bitable/app.d.ts.map +1 -0
  52. package/dist/tools/bitable/app.js +301 -0
  53. package/dist/tools/bitable/app.js.map +1 -0
  54. package/dist/tools/bitable/field.d.ts +19 -0
  55. package/dist/tools/bitable/field.d.ts.map +1 -0
  56. package/dist/tools/bitable/field.js +315 -0
  57. package/dist/tools/bitable/field.js.map +1 -0
  58. package/dist/tools/bitable/index.d.ts +21 -0
  59. package/dist/tools/bitable/index.d.ts.map +1 -0
  60. package/dist/tools/bitable/index.js +39 -0
  61. package/dist/tools/bitable/index.js.map +1 -0
  62. package/dist/tools/bitable/record.d.ts +22 -0
  63. package/dist/tools/bitable/record.d.ts.map +1 -0
  64. package/dist/tools/bitable/record.js +434 -0
  65. package/dist/tools/bitable/record.js.map +1 -0
  66. package/dist/tools/bitable/table.d.ts +21 -0
  67. package/dist/tools/bitable/table.d.ts.map +1 -0
  68. package/dist/tools/bitable/table.js +361 -0
  69. package/dist/tools/bitable/table.js.map +1 -0
  70. package/dist/tools/calendar/calendar.d.ts +18 -0
  71. package/dist/tools/calendar/calendar.d.ts.map +1 -0
  72. package/dist/tools/calendar/calendar.js +192 -0
  73. package/dist/tools/calendar/calendar.js.map +1 -0
  74. package/dist/tools/calendar/event.d.ts +20 -0
  75. package/dist/tools/calendar/event.d.ts.map +1 -0
  76. package/dist/tools/calendar/event.js +465 -0
  77. package/dist/tools/calendar/event.js.map +1 -0
  78. package/dist/tools/calendar/index.d.ts +19 -0
  79. package/dist/tools/calendar/index.d.ts.map +1 -0
  80. package/dist/tools/calendar/index.js +37 -0
  81. package/dist/tools/calendar/index.js.map +1 -0
  82. package/dist/tools/chat/chat.d.ts +11 -0
  83. package/dist/tools/chat/chat.d.ts.map +1 -0
  84. package/dist/tools/chat/chat.js +106 -0
  85. package/dist/tools/chat/chat.js.map +1 -0
  86. package/dist/tools/chat/index.d.ts +11 -0
  87. package/dist/tools/chat/index.d.ts.map +1 -0
  88. package/dist/tools/chat/index.js +20 -0
  89. package/dist/tools/chat/index.js.map +1 -0
  90. package/dist/tools/chat/members.d.ts +9 -0
  91. package/dist/tools/chat/members.d.ts.map +1 -0
  92. package/dist/tools/chat/members.js +80 -0
  93. package/dist/tools/chat/members.js.map +1 -0
  94. package/dist/tools/common/get-user.d.ts +11 -0
  95. package/dist/tools/common/get-user.d.ts.map +1 -0
  96. package/dist/tools/common/get-user.js +112 -0
  97. package/dist/tools/common/get-user.js.map +1 -0
  98. package/dist/tools/common/index.d.ts +11 -0
  99. package/dist/tools/common/index.d.ts.map +1 -0
  100. package/dist/tools/common/index.js +20 -0
  101. package/dist/tools/common/index.js.map +1 -0
  102. package/dist/tools/common/search-user.d.ts +9 -0
  103. package/dist/tools/common/search-user.d.ts.map +1 -0
  104. package/dist/tools/common/search-user.js +88 -0
  105. package/dist/tools/common/search-user.js.map +1 -0
  106. package/dist/tools/doc/create.d.ts +17 -0
  107. package/dist/tools/doc/create.d.ts.map +1 -0
  108. package/dist/tools/doc/create.js +159 -0
  109. package/dist/tools/doc/create.js.map +1 -0
  110. package/dist/tools/doc/fetch.d.ts +17 -0
  111. package/dist/tools/doc/fetch.d.ts.map +1 -0
  112. package/dist/tools/doc/fetch.js +123 -0
  113. package/dist/tools/doc/fetch.js.map +1 -0
  114. package/dist/tools/doc/index.d.ts +21 -0
  115. package/dist/tools/doc/index.d.ts.map +1 -0
  116. package/dist/tools/doc/index.js +33 -0
  117. package/dist/tools/doc/index.js.map +1 -0
  118. package/dist/tools/doc/shared.d.ts +69 -0
  119. package/dist/tools/doc/shared.d.ts.map +1 -0
  120. package/dist/tools/doc/shared.js +172 -0
  121. package/dist/tools/doc/shared.js.map +1 -0
  122. package/dist/tools/doc/update.d.ts +25 -0
  123. package/dist/tools/doc/update.d.ts.map +1 -0
  124. package/dist/tools/doc/update.js +208 -0
  125. package/dist/tools/doc/update.js.map +1 -0
  126. package/dist/tools/drive/file.d.ts +13 -0
  127. package/dist/tools/drive/file.d.ts.map +1 -0
  128. package/dist/tools/drive/file.js +212 -0
  129. package/dist/tools/drive/file.js.map +1 -0
  130. package/dist/tools/drive/index.d.ts +12 -0
  131. package/dist/tools/drive/index.d.ts.map +1 -0
  132. package/dist/tools/drive/index.js +25 -0
  133. package/dist/tools/drive/index.js.map +1 -0
  134. package/dist/tools/im/format-messages.d.ts +99 -0
  135. package/dist/tools/im/format-messages.d.ts.map +1 -0
  136. package/dist/tools/im/format-messages.js +277 -0
  137. package/dist/tools/im/format-messages.js.map +1 -0
  138. package/dist/tools/im/helpers.d.ts +53 -0
  139. package/dist/tools/im/helpers.d.ts.map +1 -0
  140. package/dist/tools/im/helpers.js +85 -0
  141. package/dist/tools/im/helpers.js.map +1 -0
  142. package/dist/tools/im/index.d.ts +25 -0
  143. package/dist/tools/im/index.d.ts.map +1 -0
  144. package/dist/tools/im/index.js +44 -0
  145. package/dist/tools/im/index.js.map +1 -0
  146. package/dist/tools/im/message-read.d.ts +19 -0
  147. package/dist/tools/im/message-read.d.ts.map +1 -0
  148. package/dist/tools/im/message-read.js +526 -0
  149. package/dist/tools/im/message-read.js.map +1 -0
  150. package/dist/tools/im/message.d.ts +22 -0
  151. package/dist/tools/im/message.d.ts.map +1 -0
  152. package/dist/tools/im/message.js +233 -0
  153. package/dist/tools/im/message.js.map +1 -0
  154. package/dist/tools/im/resource.d.ts +19 -0
  155. package/dist/tools/im/resource.d.ts.map +1 -0
  156. package/dist/tools/im/resource.js +185 -0
  157. package/dist/tools/im/resource.js.map +1 -0
  158. package/dist/tools/im/time-utils.d.ts +70 -0
  159. package/dist/tools/im/time-utils.d.ts.map +1 -0
  160. package/dist/tools/im/time-utils.js +277 -0
  161. package/dist/tools/im/time-utils.js.map +1 -0
  162. package/dist/tools/index.d.ts +85 -0
  163. package/dist/tools/index.d.ts.map +1 -0
  164. package/dist/tools/index.js +135 -0
  165. package/dist/tools/index.js.map +1 -0
  166. package/dist/tools/oauth.d.ts +15 -0
  167. package/dist/tools/oauth.d.ts.map +1 -0
  168. package/dist/tools/oauth.js +379 -0
  169. package/dist/tools/oauth.js.map +1 -0
  170. package/dist/tools/search/doc-search.d.ts +9 -0
  171. package/dist/tools/search/doc-search.d.ts.map +1 -0
  172. package/dist/tools/search/doc-search.js +219 -0
  173. package/dist/tools/search/doc-search.js.map +1 -0
  174. package/dist/tools/search/index.d.ts +11 -0
  175. package/dist/tools/search/index.d.ts.map +1 -0
  176. package/dist/tools/search/index.js +18 -0
  177. package/dist/tools/search/index.js.map +1 -0
  178. package/dist/tools/sheets/index.d.ts +11 -0
  179. package/dist/tools/sheets/index.d.ts.map +1 -0
  180. package/dist/tools/sheets/index.js +18 -0
  181. package/dist/tools/sheets/index.js.map +1 -0
  182. package/dist/tools/sheets/sheet.d.ts +11 -0
  183. package/dist/tools/sheets/sheet.d.ts.map +1 -0
  184. package/dist/tools/sheets/sheet.js +332 -0
  185. package/dist/tools/sheets/sheet.js.map +1 -0
  186. package/dist/tools/task/index.d.ts +12 -0
  187. package/dist/tools/task/index.d.ts.map +1 -0
  188. package/dist/tools/task/index.js +30 -0
  189. package/dist/tools/task/index.js.map +1 -0
  190. package/dist/tools/task/task.d.ts +13 -0
  191. package/dist/tools/task/task.d.ts.map +1 -0
  192. package/dist/tools/task/task.js +225 -0
  193. package/dist/tools/task/task.js.map +1 -0
  194. package/dist/tools/task/tasklist.d.ts +13 -0
  195. package/dist/tools/task/tasklist.d.ts.map +1 -0
  196. package/dist/tools/task/tasklist.js +206 -0
  197. package/dist/tools/task/tasklist.js.map +1 -0
  198. package/dist/tools/wiki/index.d.ts +11 -0
  199. package/dist/tools/wiki/index.d.ts.map +1 -0
  200. package/dist/tools/wiki/index.js +20 -0
  201. package/dist/tools/wiki/index.js.map +1 -0
  202. package/dist/tools/wiki/node.d.ts +11 -0
  203. package/dist/tools/wiki/node.d.ts.map +1 -0
  204. package/dist/tools/wiki/node.js +112 -0
  205. package/dist/tools/wiki/node.js.map +1 -0
  206. package/dist/tools/wiki/space.d.ts +11 -0
  207. package/dist/tools/wiki/space.d.ts.map +1 -0
  208. package/dist/tools/wiki/space.js +125 -0
  209. package/dist/tools/wiki/space.js.map +1 -0
  210. package/dist/utils/index.d.ts +8 -0
  211. package/dist/utils/index.d.ts.map +1 -0
  212. package/dist/utils/index.js +8 -0
  213. package/dist/utils/index.js.map +1 -0
  214. package/dist/utils/logger.d.ts +36 -0
  215. package/dist/utils/logger.d.ts.map +1 -0
  216. package/dist/utils/logger.js +101 -0
  217. package/dist/utils/logger.js.map +1 -0
  218. package/eslint.config.js +13 -0
  219. package/package.json +54 -0
  220. package/skills/feishu-bitable/SKILL.md +248 -0
  221. package/skills/feishu-bitable/references/examples.md +813 -0
  222. package/skills/feishu-bitable/references/field-properties.md +763 -0
  223. package/skills/feishu-bitable/references/record-values.md +911 -0
  224. package/skills/feishu-calendar/SKILL.md +244 -0
  225. package/skills/feishu-channel-rules/SKILL.md +18 -0
  226. package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
  227. package/skills/feishu-create-doc/SKILL.md +719 -0
  228. package/skills/feishu-fetch-doc/SKILL.md +93 -0
  229. package/skills/feishu-im-read/SKILL.md +163 -0
  230. package/skills/feishu-task/SKILL.md +293 -0
  231. package/skills/feishu-troubleshoot/SKILL.md +70 -0
  232. package/skills/feishu-update-doc/SKILL.md +285 -0
  233. package/src/core/api-error.ts +342 -0
  234. package/src/core/auth-errors.ts +27 -0
  235. package/src/core/config.ts +134 -0
  236. package/src/core/device-flow.ts +314 -0
  237. package/src/core/index.ts +16 -0
  238. package/src/core/lark-client.ts +391 -0
  239. package/src/core/token-store.ts +249 -0
  240. package/src/core/types.ts +302 -0
  241. package/src/core/uat-client.ts +298 -0
  242. package/src/core/version.ts +53 -0
  243. package/src/index.ts +138 -0
  244. package/src/tools/bitable/app.ts +390 -0
  245. package/src/tools/bitable/field.ts +406 -0
  246. package/src/tools/bitable/index.ts +43 -0
  247. package/src/tools/bitable/record.ts +559 -0
  248. package/src/tools/bitable/table.ts +472 -0
  249. package/src/tools/calendar/calendar.ts +254 -0
  250. package/src/tools/calendar/event.ts +606 -0
  251. package/src/tools/calendar/index.ts +41 -0
  252. package/src/tools/chat/chat.ts +127 -0
  253. package/src/tools/chat/index.ts +24 -0
  254. package/src/tools/chat/members.ts +93 -0
  255. package/src/tools/common/get-user.ts +127 -0
  256. package/src/tools/common/index.ts +24 -0
  257. package/src/tools/common/search-user.ts +99 -0
  258. package/src/tools/doc/create.ts +184 -0
  259. package/src/tools/doc/fetch.ts +149 -0
  260. package/src/tools/doc/index.ts +38 -0
  261. package/src/tools/doc/shared.ts +228 -0
  262. package/src/tools/doc/update.ts +240 -0
  263. package/src/tools/drive/file.ts +265 -0
  264. package/src/tools/drive/index.ts +29 -0
  265. package/src/tools/im/format-messages.ts +391 -0
  266. package/src/tools/im/helpers.ts +109 -0
  267. package/src/tools/im/index.ts +49 -0
  268. package/src/tools/im/message-read.ts +676 -0
  269. package/src/tools/im/message.ts +303 -0
  270. package/src/tools/im/resource.ts +225 -0
  271. package/src/tools/im/time-utils.ts +347 -0
  272. package/src/tools/index.ts +205 -0
  273. package/src/tools/oauth.ts +460 -0
  274. package/src/tools/search/doc-search.ts +250 -0
  275. package/src/tools/search/index.ts +22 -0
  276. package/src/tools/sheets/index.ts +22 -0
  277. package/src/tools/sheets/sheet.ts +382 -0
  278. package/src/tools/task/index.ts +34 -0
  279. package/src/tools/task/task.ts +265 -0
  280. package/src/tools/task/tasklist.ts +262 -0
  281. package/src/tools/wiki/index.ts +24 -0
  282. package/src/tools/wiki/node.ts +131 -0
  283. package/src/tools/wiki/space.ts +152 -0
  284. package/src/utils/index.ts +8 -0
  285. package/src/utils/logger.ts +132 -0
  286. package/tests/core/config.test.ts +238 -0
  287. package/tests/core/device-flow.test.ts +490 -0
  288. package/tests/core/lark-client.test.ts +378 -0
  289. package/tests/core/token-store.test.ts +438 -0
  290. package/tests/index.test.ts +360 -0
  291. package/tests/tools/doc/create.test.ts +224 -0
  292. package/tests/tools/doc/fetch.test.ts +182 -0
  293. package/tests/tools/doc/shared.test.ts +183 -0
  294. package/tests/tools/doc/update.test.ts +330 -0
  295. package/tests/tools/im/format-messages.test.ts +184 -0
  296. package/tests/tools/im/time-utils.test.ts +178 -0
  297. package/tests/utils/logger.test.ts +140 -0
  298. package/tsconfig.json +20 -0
@@ -0,0 +1,248 @@
1
+ ---
2
+ name: feishu-bitable
3
+ description: |
4
+ 飞书多维表格(Bitable)的创建、查询、编辑和管理工具。包含 27 种字段类型支持、高级筛选、批量操作和视图管理。
5
+
6
+ **当以下情况时使用此 Skill**:
7
+ (1) 需要创建或管理飞书多维表格 App
8
+ (2) 需要在多维表格中新增、查询、修改、删除记录(行数据)
9
+ (3) 需要管理字段(列)、视图、数据表
10
+ (4) 用户提到"多维表格"、"bitable"、"数据表"、"记录"、"字段"
11
+ (5) 需要批量导入数据或批量更新多维表格
12
+ ---
13
+
14
+ # Feishu Bitable (多维表格) SKILL
15
+
16
+ ## 🚨 执行前必读
17
+
18
+ - ✅ **创建数据表**:支持两种模式 — ① 明确需求时,在 `create` 时通过 `table.fields` 一次性定义字段(减少 API 调用);② 探索式场景时,使用默认表 + 逐步修改字段(更稳定,易调整)
19
+ - ⚠️ **默认表的空行坑**:`app.create` 自带的默认表中会有空记录(空行)!插入数据前建议先调用 `feishu_bitable_app_table_record.list` + `batch_delete` 删除空行,避免数据污染
20
+ - ✅ **写记录前**:先调用 `feishu_bitable_app_table_field.list` 获取字段 type/ui_type
21
+ - ✅ **人员字段**:默认 open_id(ou_...),值必须是 `[{id:"ou_xxx"}]`(数组对象)
22
+ - ✅ **日期字段**:毫秒时间戳(例如 `1674206443000`),不是秒
23
+ - ✅ **单选字段**:字符串(例如 `"选项1"`),不是数组
24
+ - ✅ **多选字段**:字符串数组(例如 `["选项1", "选项2"]`)
25
+ - ✅ **附件字段**:必须先上传到当前多维表格,使用返回的 file_token
26
+ - ✅ **批量上限**:单次 ≤ 500 条,超过需分批(批量操作是原子性的)
27
+ - ✅ **并发限制**:同一数据表不支持并发写,需串行调用 + 延迟 0.5-1 秒
28
+
29
+ ---
30
+
31
+ ## 📋 快速索引:意图 → 工具 → 必填参数
32
+
33
+ | 用户意图 | 工具 | action | 必填参数 | 常用可选 |
34
+ |---------|------|--------|---------|---------|
35
+ | 查表有哪些字段 | feishu_bitable_app_table_field | list | app_token, table_id | - |
36
+ | 查记录 | feishu_bitable_app_table_record | list | app_token, table_id | filter, sort, field_names |
37
+ | 新增一行 | feishu_bitable_app_table_record | create | app_token, table_id, fields | - |
38
+ | 批量导入 | feishu_bitable_app_table_record | batch_create | app_token, table_id, records (≤500) | - |
39
+ | 更新一行 | feishu_bitable_app_table_record | update | app_token, table_id, record_id, fields | - |
40
+ | 批量更新 | feishu_bitable_app_table_record | batch_update | app_token, table_id, records (≤500) | - |
41
+ | 创建多维表格 | feishu_bitable_app | create | name | folder_token |
42
+ | 创建数据表 | feishu_bitable_app_table | create | app_token, name | fields |
43
+ | 创建字段 | feishu_bitable_app_table_field | create | app_token, table_id, field_name, type | property |
44
+ | 创建视图 | feishu_bitable_app_table_view | create | app_token, table_id, view_name, view_type | - |
45
+
46
+ ---
47
+
48
+ ## 🎯 核心约束(Schema 未透露的知识)
49
+
50
+ ### 📚 详细参考文档
51
+
52
+ **当遇到字段配置、记录值格式问题或需要完整示例时,查阅以下文档**:
53
+
54
+ - **[字段 Property 配置详解](references/field-properties.md)** - 每种字段类型创建/更新时需要的 `property` 参数结构(单选的 options、进度的 min/max、关联的 table_id 等)
55
+ - **[记录值数据结构详解](references/record-values.md)** - 每种字段类型在记录中对应的 `fields` 值格式(人员字段只传 id、日期是毫秒时间戳、附件需先上传等)
56
+ - **[使用场景完整示例](references/examples.md)** - 8 个完整场景示例(创建表模式对比、批量导入、筛选查询、附件处理、关联字段等)
57
+
58
+ **何时查阅**:
59
+ - 创建/更新字段时收到 `125408X` 错误码(property 结构错误)→ 查 field-properties.md
60
+ - 写入记录时收到 `125406X` 错误码(字段值转换失败)→ 查 record-values.md
61
+ - 需要完整的操作流程和参数示例 → 查 examples.md
62
+
63
+ ---
64
+
65
+ ### 1. 字段类型与值格式必须严格匹配
66
+
67
+ **Bitable 最大的坑**:不同字段类型对 value 的数据结构要求完全不同。
68
+
69
+ #### 最易错的字段类型(完整列表见 [record-values.md](references/record-values.md))
70
+
71
+ | type | ui_type | 字段类型 | 正确格式 | ❌ 常见错误 |
72
+ |------|---------|----------|---------|-----------|
73
+ | 11 | User | 人员 | `[{id: "ou_xxx"}]` | 传字符串 `"ou_xxx"` 或 `[{name: "张三"}]` |
74
+ | 5 | DateTime | 日期 | `1674206443000`(毫秒) | 传秒时间戳或字符串 |
75
+ | 3 | SingleSelect | 单选 | `"选项名"` | 传数组 `["选项名"]` |
76
+ | 4 | MultiSelect | 多选 | `["选项1", "选项2"]` | 传字符串 `"选项1"` |
77
+ | 15 | Url | 超链接 | `{link: "...", text: "..."}` | 只传字符串 URL |
78
+ | 17 | Attachment | 附件 | `[{file_token: "..."}]` | 传外部 URL 或本地路径 |
79
+
80
+ **强制流程**:
81
+ 1. 先调用 `feishu_bitable_app_table_field.list` 获取字段的 `type` 和 `ui_type`
82
+ 2. 根据上表或 [record-values.md](references/record-values.md) 构造正确格式
83
+ 3. 错误码 `125406X` 或 `1254015` → 检查字段值格式
84
+
85
+ **人员字段特别注意**:
86
+ - 默认使用 open_id(ou_...),与 calendar/task 一致
87
+ - 格式:`[{id: "ou_xxx"}]`(数组对象)
88
+ - **只能传 id 字段**,不能传 name/email 等
89
+
90
+
91
+ ## 📌 核心使用场景
92
+
93
+ > **完整示例**: 查阅 [examples.md](references/examples.md) 了解更多场景(创建表模式对比、空行处理、附件上传、关联字段等)
94
+
95
+ ### 场景 1: 查字段类型(必做第一步)
96
+
97
+ ```json
98
+ {
99
+ "action": "list",
100
+ "app_token": "S404b...",
101
+ "table_id": "tbl..."
102
+ }
103
+ ```
104
+
105
+ **返回**:包含每个字段的 `field_id`、`field_name`、`type`、`ui_type`、`property`
106
+
107
+ ### 场景 2: 批量导入客户数据
108
+
109
+ ```json
110
+ {
111
+ "action": "batch_create",
112
+ "app_token": "S404b...",
113
+ "table_id": "tbl...",
114
+ "records": [
115
+ {
116
+ "fields": {
117
+ "客户名称": "Bytedance",
118
+ "负责人": [{"id": "ou_xxx"}],
119
+ "签约日期": 1674206443000,
120
+ "状态": "进行中"
121
+ }
122
+ },
123
+ {
124
+ "fields": {
125
+ "客户名称": "飞书",
126
+ "负责人": [{"id": "ou_yyy"}],
127
+ "签约日期": 1675416243000,
128
+ "状态": "已完成"
129
+ }
130
+ }
131
+ ]
132
+ }
133
+ ```
134
+
135
+ **字段值格式**:
136
+ - 人员:`[{id: "ou_xxx"}]`(数组对象)
137
+ - 日期:毫秒时间戳
138
+ - 单选:字符串
139
+ - 多选:字符串数组
140
+
141
+ **限制**: 最多 500 条记录
142
+
143
+ ### 场景 3: 筛选查询(高级筛选)
144
+
145
+ ```json
146
+ {
147
+ "action": "list",
148
+ "app_token": "S404b...",
149
+ "table_id": "tbl...",
150
+ "filter": {
151
+ "conjunction": "and",
152
+ "conditions": [
153
+ {
154
+ "field_name": "状态",
155
+ "operator": "is",
156
+ "value": ["进行中"]
157
+ },
158
+ {
159
+ "field_name": "截止日期",
160
+ "operator": "isLess",
161
+ "value": ["ExactDate", "1740441600000"]
162
+ }
163
+ ]
164
+ },
165
+ "sort": [
166
+ {
167
+ "field_name": "截止日期",
168
+ "desc": false
169
+ }
170
+ ]
171
+ }
172
+ ```
173
+
174
+ **filter 说明**:
175
+ - 支持 10 种 operator(is/isNot/contains/isEmpty 等,见附录 C)
176
+ - ⚠️ **isEmpty/isNotEmpty 必须传 `value: []`**(虽然逻辑上不需要值,但 API 要求必须传空数组)
177
+ - 日期筛选可使用 `["Today"]`、`["ExactDate", "时间戳"]` 等
178
+ - `sort` 可指定多个排序字段
179
+
180
+ ---
181
+
182
+ ## 🔍 常见错误与排查
183
+
184
+ | 错误码 | 错误现象 | 根本原因 | 解决方案 |
185
+ |--------|---------|---------|---------|
186
+ | 1254064 | DatetimeFieldConvFail | 日期字段格式错误 | **必须用毫秒时间戳**(如 `1772121600000`),不能用字符串(`"2026-02-27"`、RFC3339)或秒级时间戳 |
187
+ | 1254068 | URLFieldConvFail | 超链接字段格式错误 | **必须用对象** `{text: "显示文本", link: "URL"}`,不能直接传字符串 URL |
188
+ | 1254066 | UserFieldConvFail | 人员字段格式错误或 ID 类型不匹配 | 必须传 `[{id: "ou_xxx"}]`,确认 `user_id_type` |
189
+ | 1254015 | Field types do not match | 字段值格式与类型不匹配 | 先 list 字段,按类型构造正确格式 |
190
+ | 1254104 | RecordAddOnceExceedLimit | 批量创建超过 500 条 | 分批调用,每批 ≤ 500 |
191
+ | 1254291 | Write conflict | 并发写冲突 | 串行调用 + 延迟 0.5-1 秒 |
192
+ | 1254303 | AttachPermNotAllow | 附件未上传到当前表格 | 先调用上传素材接口 |
193
+ | 1254045 | FieldNameNotFound | 字段名不存在 | 检查字段名(包括空格、大小写) |
194
+
195
+ ---
196
+
197
+ ## 📚 附录:背景知识
198
+
199
+ ### A. 资源层级关系
200
+
201
+ ```
202
+ App (多维表格应用)
203
+ ├── Table (数据表) ×100
204
+ │ ├── Record (记录/行) ×20,000
205
+ │ ├── Field (字段/列) ×300
206
+ │ └── View (视图) ×200
207
+ └── Dashboard (仪表盘)
208
+ ```
209
+
210
+ ### B. 筛选条件 operator 列表
211
+
212
+ | operator | 含义 | 支持字段 | value 要求 |
213
+ |----------|------|----------|-----------|
214
+ | `is` | 等于 | 所有 | 单个值 |
215
+ | `isNot` | 不等于 | 除日期外 | 单个值 |
216
+ | `contains` | 包含 | 除日期外 | 可多个值 |
217
+ | `doesNotContain` | 不包含 | 除日期外 | 可多个值 |
218
+ | `isEmpty` | 为空 | 所有 | 必须为 `[]` |
219
+ | `isNotEmpty` | 不为空 | 所有 | 必须为 `[]` |
220
+ | `isGreater` | 大于 | 数字、日期 | 单个值 |
221
+ | `isGreaterEqual` | 大于等于 | 数字(不支持日期) | 单个值 |
222
+ | `isLess` | 小于 | 数字、日期 | 单个值 |
223
+ | `isLessEqual` | 小于等于 | 数字(不支持日期) | 单个值 |
224
+
225
+ **日期字段特殊值**: `["Today"]`, `["Tomorrow"]`, `["ExactDate", "时间戳"]` 等(完整列表见 [examples.md](references/examples.md#场景-3-筛选查询高级筛选))
226
+
227
+ ### C. 使用限制
228
+
229
+ | 限制项 | 上限 |
230
+ |--------|------|
231
+ | 数据表 + 仪表盘 | 100(单个 App) |
232
+ | 记录数 | 20,000(单个数据表) |
233
+ | 字段数 | 300(单个数据表) |
234
+ | 视图数 | 200(单个数据表) |
235
+ | 批量创建/更新/删除 | 500(单次 API 调用) |
236
+ | 单元格文本 | 10 万字符 |
237
+ | 单选/多选选项 | 20,000(单个字段) |
238
+ | 单元格附件 | 100 |
239
+ | 单元格人员 | 1,000 |
240
+
241
+
242
+
243
+ ### D. 其他约束
244
+
245
+ - 从其他数据源同步的数据表,**不支持增删改**记录
246
+ - 公式字段、查看引用字段是**只读**的
247
+ - 删除操作**无法恢复**
248
+ - 视图筛选条件使用 `field_id`,需先调用 field.list 获取