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,911 @@
1
+ # 飞书多维表格记录值数据结构详解
2
+
3
+ 本文档详细说明每种字段类型在记录中对应的 `fields` 值格式。
4
+
5
+ > **来源**: 基于飞书开放平台文档 [多维表格记录数据结构](https://go.feishu.cn/s/6lY28723w04)
6
+
7
+ ## 📋 快速索引
8
+
9
+ | 字段类型 | type | 值类型 | 示例 | 限制 |
10
+ |---------|------|--------|------|------|
11
+ | [文本](#文本-type1) | 1 | string (写入) / list of object (返回) | `"任务描述"` | 最多 10 万字符 |
12
+ | [数字](#数字-type2) | 2 | number | `0.5` | - |
13
+ | [单选](#单选-type3) | 3 | string | `"进行中"` | 选项总数≤20,000 |
14
+ | [多选](#多选-type4) | 4 | array<string> | `["审批", "办公"]` | 选项总数≤20,000,单元格≤1,000 |
15
+ | [日期](#日期-type5) | 5 | number | `1675526400000` | Unix 毫秒时间戳 |
16
+ | [复选框](#复选框-type7) | 7 | boolean | `true` | - |
17
+ | [人员](#人员-type11) | 11 | list of object | `[{"id": "ou_xxx"}]` | 单元格≤1,000,写入仅支持 `id` |
18
+ | [电话](#电话号码-type13) | 13 | string | `"17899870000"` | 最多 64 字符 |
19
+ | [超链接](#超链接-type15) | 15 | object | `{"text": "飞书", "link": "..."}` | - |
20
+ | [附件](#附件-type17) | 17 | list of object | `[{"file_token": "xxx"}]` | 单元格≤100 |
21
+ | [单向关联](#单向关联-type18) | 18 | object | `{"link_record_ids": [...]}` | 单元格≤500 |
22
+ | [双向关联](#双向关联-type21) | 21 | object | `{"link_record_ids": [...]}` | 单元格≤500 |
23
+ | [地理位置](#地理位置-type22) | 22 | object | `{"location": "116.3,40.0", ...}` | - |
24
+ | [群组](#群组-type23) | 23 | list of object | `[{"id": "oc_xxx"}]` | 单元格≤10 |
25
+ | [公式/查找引用](#公式查找引用-type20-type19) | 20/19 | object | `{"type": 1, "value": [...]}` | 只读 |
26
+
27
+ ---
28
+
29
+ ## 文本 (type=1)
30
+
31
+ ### 基础文本 (ui_type="Text")
32
+
33
+ **写入格式**: 字符串
34
+
35
+ ```json
36
+ {
37
+ "fields": {
38
+ "任务描述": "维护客户关系"
39
+ }
40
+ }
41
+ ```
42
+
43
+ **返回格式**: 对象数组
44
+
45
+ ```json
46
+ {
47
+ "任务描述": [
48
+ {
49
+ "text": "维护客户关系",
50
+ "type": "text"
51
+ }
52
+ ]
53
+ }
54
+ ```
55
+
56
+ **富文本格式** (提及人、超链接):
57
+
58
+ ```json
59
+ {
60
+ "任务描述": [
61
+ {
62
+ "text": "请 ",
63
+ "type": "text"
64
+ },
65
+ {
66
+ "text": "@张三",
67
+ "type": "mention",
68
+ "token": "ou_user123",
69
+ "mentionType": "User",
70
+ "mentionNotify": true,
71
+ "name": "张三"
72
+ },
73
+ {
74
+ "text": " 查看 ",
75
+ "type": "text"
76
+ },
77
+ {
78
+ "text": "飞书官网",
79
+ "type": "url",
80
+ "link": "https://www.feishu.cn"
81
+ }
82
+ ]
83
+ }
84
+ ```
85
+
86
+ **富文本元素类型**:
87
+
88
+ | type | 说明 | 额外字段 |
89
+ |------|------|---------|
90
+ | `"text"` | 纯文本 | `text` |
91
+ | `"mention"` | 提及(人/文档) | `token`, `mentionType`, `mentionNotify`, `name` |
92
+ | `"url"` | 超链接 | `text`, `link` |
93
+
94
+ **mentionType 可选值**:
95
+ - `"User"`: 提及用户
96
+ - `"Docx"`: 提及文档
97
+ - `"Sheet"`: 提及电子表格
98
+ - `"Bitable"`: 提及多维表格
99
+
100
+ ---
101
+
102
+ ### 条码 (ui_type="Barcode")
103
+
104
+ **写入格式**: 字符串
105
+
106
+ ```json
107
+ {
108
+ "fields": {
109
+ "商品条码": "FS0001"
110
+ }
111
+ }
112
+ ```
113
+
114
+ **返回格式**:
115
+
116
+ ```json
117
+ {
118
+ "商品条码": [
119
+ {
120
+ "text": "FS0001",
121
+ "type": "text"
122
+ }
123
+ ]
124
+ }
125
+ ```
126
+
127
+ ---
128
+
129
+ ### 邮箱 (ui_type="Email")
130
+
131
+ **写入格式**: 字符串
132
+
133
+ ```json
134
+ {
135
+ "fields": {
136
+ "联系邮箱": "zhangmin@xxxgmail.com"
137
+ }
138
+ }
139
+ ```
140
+
141
+ **返回格式**:
142
+
143
+ ```json
144
+ {
145
+ "联系邮箱": [
146
+ {
147
+ "text": "zhangmin@xxxgmail.com",
148
+ "type": "url",
149
+ "link": "mailto:zhangmin@xxxgmail.com"
150
+ }
151
+ ]
152
+ }
153
+ ```
154
+
155
+ ---
156
+
157
+ ## 数字 (type=2)
158
+
159
+ **写入/返回格式**: 数字
160
+
161
+ ```json
162
+ {
163
+ "fields": {
164
+ "工时": 10,
165
+ "完成率": 0.75,
166
+ "预算": 5000.50
167
+ }
168
+ }
169
+ ```
170
+
171
+ **注意**:
172
+ - 进度 (ui_type="Progress"): 0-1 范围的小数
173
+ - 货币 (ui_type="Currency"): 普通数字
174
+ - 评分 (ui_type="Rating"): 整数
175
+
176
+ ---
177
+
178
+ ## 单选 (type=3)
179
+
180
+ **写入格式**: 选项名称字符串
181
+
182
+ ```json
183
+ {
184
+ "fields": {
185
+ "任务状态": "进行中"
186
+ }
187
+ }
188
+ ```
189
+
190
+ **新选项**: 传入不存在的选项名会**自动创建新选项**
191
+
192
+ ```json
193
+ {
194
+ "fields": {
195
+ "任务状态": "已暂停" // 如果不存在,会自动创建
196
+ }
197
+ }
198
+ ```
199
+
200
+ **返回格式**: 与写入相同
201
+
202
+ ```json
203
+ {
204
+ "任务状态": "进行中"
205
+ }
206
+ ```
207
+
208
+ **限制**:
209
+ - 选项总数不超过 20,000
210
+
211
+ ---
212
+
213
+ ## 多选 (type=4)
214
+
215
+ **写入格式**: 字符串数组
216
+
217
+ ```json
218
+ {
219
+ "fields": {
220
+ "标签": ["审批集成", "办公管理", "身份管理"]
221
+ }
222
+ }
223
+ ```
224
+
225
+ **新选项**: 传入不存在的选项名会**自动创建新选项**
226
+
227
+ ```json
228
+ {
229
+ "fields": {
230
+ "标签": ["新标签1", "新标签2"] // 不存在的会自动创建
231
+ }
232
+ }
233
+ ```
234
+
235
+ **返回格式**: 与写入相同
236
+
237
+ ```json
238
+ {
239
+ "标签": ["审批集成", "办公管理"]
240
+ }
241
+ ```
242
+
243
+ **限制**:
244
+ - 选项总数不超过 20,000
245
+ - 单个单元格选项数不超过 1,000
246
+
247
+ ---
248
+
249
+ ## 日期 (type=5)
250
+
251
+ **写入/返回格式**: Unix 毫秒时间戳
252
+
253
+ ```json
254
+ {
255
+ "fields": {
256
+ "截止日期": 1675526400000 // 2023-02-05 00:00:00 (UTC)
257
+ }
258
+ }
259
+ ```
260
+
261
+ **注意**:
262
+ - 必须使用**毫秒级**时间戳(不是秒级)
263
+ - 建议使用北京时间 (UTC+8) 转换
264
+
265
+ **常见错误** (错误码 1254064):
266
+
267
+ ```json
268
+ // ❌ 错误:使用 ISO 字符串
269
+ {"截止日期": "2026-02-27"}
270
+
271
+ // ❌ 错误:使用 RFC3339 格式
272
+ {"截止日期": "2026-02-27T10:00:00+08:00"}
273
+
274
+ // ❌ 错误:使用秒级时间戳
275
+ {"截止日期": 1772121600} // 少了 3 位
276
+
277
+ // ✅ 正确:使用毫秒时间戳
278
+ {"截止日期": 1772121600000}
279
+ ```
280
+
281
+ ---
282
+
283
+ ## 复选框 (type=7)
284
+
285
+ **写入/返回格式**: 布尔值
286
+
287
+ ```json
288
+ {
289
+ "fields": {
290
+ "是否完成": true,
291
+ "是否延期": false
292
+ }
293
+ }
294
+ ```
295
+
296
+ ---
297
+
298
+ ## 人员 (type=11)
299
+
300
+ **写入格式**: 对象数组,**仅支持 `id` 字段**
301
+
302
+ ```json
303
+ {
304
+ "fields": {
305
+ "负责人": [
306
+ {"id": "ou_8240099442cf5da49f04f4bf8f8abcef"}
307
+ ],
308
+ "协作人": [
309
+ {"id": "ou_user1"},
310
+ {"id": "ou_user2"}
311
+ ]
312
+ }
313
+ }
314
+ ```
315
+
316
+ **返回格式**: 对象数组,包含完整信息
317
+
318
+ ```json
319
+ {
320
+ "负责人": [
321
+ {
322
+ "id": "ou_8240099442cf5da49f04f4bf8f8abcef",
323
+ "name": "黄泡泡",
324
+ "en_name": "Amanda Huang",
325
+ "email": "amandahuang@xxxgmail.com",
326
+ "avatar_url": "https://..."
327
+ }
328
+ ]
329
+ }
330
+ ```
331
+
332
+ **⚠️ 重要**:
333
+ - **写入时只支持 `id`**,不能传 `name`、`email` 等字段
334
+ - `id` 类型需与 `user_id_type` 参数一致(open_id/union_id/user_id)
335
+ - 单个单元格人员数不超过 1,000
336
+ - 传空: `null` 或 `[]`
337
+
338
+ ---
339
+
340
+ ## 电话号码 (type=13)
341
+
342
+ **写入/返回格式**: 字符串
343
+
344
+ ```json
345
+ {
346
+ "fields": {
347
+ "联系电话": "17899870000",
348
+ "座机": "+86-010-12345678"
349
+ }
350
+ }
351
+ ```
352
+
353
+ **格式规则**:
354
+ - 符合正则: `(\+)?\d*`
355
+ - 最大长度 64 字符
356
+
357
+ ---
358
+
359
+ ## 超链接 (type=15)
360
+
361
+ **写入/返回格式**: 对象
362
+
363
+ ```json
364
+ {
365
+ "fields": {
366
+ "参考链接": {
367
+ "text": "飞书开放平台",
368
+ "link": "https://open.feishu.cn"
369
+ }
370
+ }
371
+ }
372
+ ```
373
+
374
+ **字段说明**:
375
+ - `text`: 显示的文本
376
+ - `link`: URL 地址
377
+
378
+ **常见错误** (错误码 1254068):
379
+
380
+ ```json
381
+ // ❌ 错误:直接传字符串 URL
382
+ {
383
+ "参考链接": "https://open.feishu.cn"
384
+ }
385
+
386
+ // ✅ 正确:使用对象格式
387
+ {
388
+ "参考链接": {
389
+ "text": "飞书开放平台",
390
+ "link": "https://open.feishu.cn"
391
+ }
392
+ }
393
+
394
+ // ✅ text 和 link 可以相同
395
+ {
396
+ "参考链接": {
397
+ "text": "https://open.feishu.cn",
398
+ "link": "https://open.feishu.cn"
399
+ }
400
+ }
401
+ ```
402
+
403
+ ---
404
+
405
+ ## 附件 (type=17)
406
+
407
+ **写入格式**: 对象数组,**仅传 `file_token`**
408
+
409
+ ```json
410
+ {
411
+ "fields": {
412
+ "附件": [
413
+ {"file_token": "DRiFbwaKsoZaLax4WKZbEGCccoe"},
414
+ {"file_token": "BZk3bL1Enoy4pzxaPL9bNeKqcLe"}
415
+ ]
416
+ }
417
+ }
418
+ ```
419
+
420
+ **返回格式**: 对象数组,包含完整信息
421
+
422
+ ```json
423
+ {
424
+ "附件": [
425
+ {
426
+ "file_token": "J7GdbgNWWoD1fwx7oWccxdgknIe",
427
+ "name": "58cc930b89.png",
428
+ "type": "image/png",
429
+ "size": 108867,
430
+ "url": "https://open.feishu.cn/open-apis/drive/v1/medias/...",
431
+ "tmp_url": "https://open.feishu.cn/open-apis/drive/v1/medias/batch_get_tmp_download_url?..."
432
+ }
433
+ ]
434
+ }
435
+ ```
436
+
437
+ **⚠️ 重要**:
438
+ - 写入前必须先调用[上传素材接口](https://go.feishu.cn/s/63soQp6O80s)获取 `file_token`
439
+ - 单个单元格附件数不超过 100
440
+ - 错误码 1254303: 附件未挂载到当前多维表格
441
+
442
+ ---
443
+
444
+ ## 单向关联 (type=18)
445
+
446
+ **写入格式**: `link_record_ids` 数组
447
+
448
+ ```json
449
+ {
450
+ "fields": {
451
+ "关联任务": {
452
+ "link_record_ids": ["recHTLvO7x", "recbS8zb2m"]
453
+ }
454
+ }
455
+ }
456
+ ```
457
+
458
+ **简化写入** (直接数组):
459
+
460
+ ```json
461
+ {
462
+ "fields": {
463
+ "关联任务": ["recHTLvO7x", "recbS8zb2m"]
464
+ }
465
+ }
466
+ ```
467
+
468
+ **返回格式**:
469
+
470
+ ```json
471
+ {
472
+ "关联任务": {
473
+ "link_record_ids": ["recHTLvO7x", "recbS8zb2m"]
474
+ }
475
+ }
476
+ ```
477
+
478
+ **限制**:
479
+ - 单个单元格关联数不超过 500
480
+
481
+ ---
482
+
483
+ ## 双向关联 (type=21)
484
+
485
+ **写入/返回格式**: 与单向关联相同
486
+
487
+ ```json
488
+ {
489
+ "fields": {
490
+ "相关项目": {
491
+ "link_record_ids": ["reclzUoBLn", "rec7bYQoX1"]
492
+ }
493
+ }
494
+ }
495
+ ```
496
+
497
+ **注意**:
498
+ - 更新双向关联会同步更新对方表的对应字段
499
+ - 单个单元格关联数不超过 500
500
+
501
+ ---
502
+
503
+ ## 地理位置 (type=22)
504
+
505
+ **写入格式**: 经纬度字符串
506
+
507
+ ```json
508
+ {
509
+ "fields": {
510
+ "办公地址": "116.397755,39.903179"
511
+ }
512
+ }
513
+ ```
514
+
515
+ **返回格式**: 对象,包含详细信息
516
+
517
+ ```json
518
+ {
519
+ "办公地址": {
520
+ "location": "116.352681,40.01437",
521
+ "pname": "北京市",
522
+ "cityname": "北京市",
523
+ "adname": "海淀区",
524
+ "address": "学清路10号院学清嘉创大厦",
525
+ "name": "Bytedance",
526
+ "full_address": "Bytedance,北京市北京市海淀区学清路10号院学清嘉创大厦"
527
+ }
528
+ }
529
+ ```
530
+
531
+ **字段说明**:
532
+ - `location`: 经纬度 (格式: "经度,纬度")
533
+ - `pname`: 省
534
+ - `cityname`: 市
535
+ - `adname`: 区
536
+ - `address`: 详细地址
537
+ - `name`: 地名
538
+ - `full_address`: 完整地址
539
+
540
+ ---
541
+
542
+ ## 群组 (type=23)
543
+
544
+ **写入格式**: 对象数组,**仅传 `id`**
545
+
546
+ ```json
547
+ {
548
+ "fields": {
549
+ "协作群": [
550
+ {"id": "oc_d2a947abb78bbbbb12d4cad55fbabcef"}
551
+ ]
552
+ }
553
+ }
554
+ ```
555
+
556
+ **返回格式**: 对象数组,包含完整信息
557
+
558
+ ```json
559
+ {
560
+ "协作群": [
561
+ {
562
+ "id": "oc_d2a947abb78bbbbb12d4cad55fbabcef",
563
+ "name": "测试部门",
564
+ "avatar_url": "https://..."
565
+ }
566
+ ]
567
+ }
568
+ ```
569
+
570
+ **限制**:
571
+ - 单个单元格群组数不超过 10
572
+
573
+ ---
574
+
575
+ ## 公式/查找引用 (type=20, type=19)
576
+
577
+ **格式**: 对象,包含 `type`、`ui_type` 和 `value`
578
+
579
+ ```json
580
+ {
581
+ "是否延期": {
582
+ "type": 1, // 底层数据类型
583
+ "ui_type": "Text", // UI 展示类型
584
+ "value": [ // 计算结果
585
+ {
586
+ "text": "✅ 正常",
587
+ "type": "text"
588
+ }
589
+ ]
590
+ }
591
+ }
592
+ ```
593
+
594
+ **字段说明**:
595
+ - `type`: 底层数据类型枚举(1=文本, 2=数字, 5=日期...)
596
+ - `ui_type`: UI 展示类型("Text"/"Number"/"Progress"/...)
597
+ - `value`: 计算结果,格式由 `type` 决定
598
+
599
+ **示例 - 数字类型公式**:
600
+
601
+ ```json
602
+ {
603
+ "总价": {
604
+ "type": 2,
605
+ "ui_type": "Currency",
606
+ "value": 1250.50
607
+ }
608
+ }
609
+ ```
610
+
611
+ **示例 - 日期类型公式**:
612
+
613
+ ```json
614
+ {
615
+ "计算日期": {
616
+ "type": 5,
617
+ "ui_type": "DateTime",
618
+ "value": 1675526400000
619
+ }
620
+ }
621
+ ```
622
+
623
+ **⚠️ 注意**:
624
+ - 公式字段为**只读**,不能通过写接口设置
625
+ - `value` 的数据结构取决于 `type` 对应的字段类型
626
+
627
+ ---
628
+
629
+ ## 系统字段
630
+
631
+ ### 创建时间 (type=1001)
632
+
633
+ **返回格式**: Unix 毫秒时间戳
634
+
635
+ ```json
636
+ {
637
+ "创建于": 1675526400000
638
+ }
639
+ ```
640
+
641
+ **⚠️ 只读**: 不能通过写接口设置
642
+
643
+ ---
644
+
645
+ ### 最后更新时间 (type=1002)
646
+
647
+ **返回格式**: Unix 毫秒时间戳
648
+
649
+ ```json
650
+ {
651
+ "更新于": 1675612800000
652
+ }
653
+ ```
654
+
655
+ **⚠️ 只读**: 不能通过写接口设置
656
+
657
+ ---
658
+
659
+ ### 创建人 / 修改人 (type=1003, type=1004)
660
+
661
+ **返回格式**: 对象数组(与人员字段相同)
662
+
663
+ ```json
664
+ {
665
+ "创建人": [
666
+ {
667
+ "id": "ou_8240099442cf5da49f04f4bf8f8abcef",
668
+ "name": "黄泡泡",
669
+ "en_name": "Amanda Huang",
670
+ "email": "amandahuang@xxxgmail.com",
671
+ "avatar_url": "https://..."
672
+ }
673
+ ]
674
+ }
675
+ ```
676
+
677
+ **⚠️ 只读**: 不能通过写接口设置
678
+
679
+ ---
680
+
681
+ ### 自动编号 (type=1005)
682
+
683
+ **返回格式**: 字符串
684
+
685
+ ```json
686
+ {
687
+ "工单号": "WO-20240226-0001"
688
+ }
689
+ ```
690
+
691
+ **⚠️ 只读**: 不能通过写接口设置
692
+
693
+ ---
694
+
695
+ ## 🔍 常见错误与排查
696
+
697
+ ### 字段类型不匹配 (错误码 1254015)
698
+
699
+ **错误示例**:
700
+
701
+ ```json
702
+ // ❌ 错误: 日期字段传字符串
703
+ {
704
+ "fields": {
705
+ "截止日期": "2024-02-26" // 应该传时间戳
706
+ }
707
+ }
708
+
709
+ // ✅ 正确
710
+ {
711
+ "fields": {
712
+ "截止日期": 1708905600000
713
+ }
714
+ }
715
+ ```
716
+
717
+ ---
718
+
719
+ ### 人员字段格式错误 (错误码 1254066)
720
+
721
+ **常见原因**:
722
+
723
+ 1. **传入了不支持的字段**:
724
+
725
+ ```json
726
+ // ❌ 错误
727
+ {
728
+ "负责人": [
729
+ {"name": "张三"} // 只能传 id
730
+ ]
731
+ }
732
+
733
+ // ✅ 正确
734
+ {
735
+ "负责人": [
736
+ {"id": "ou_xxx"}
737
+ ]
738
+ }
739
+ ```
740
+
741
+ 2. **user_id_type 不匹配**:
742
+
743
+ ```bash
744
+ # 请求时指定了 user_id_type=open_id,但传的是 union_id
745
+ ```
746
+
747
+ 3. **跨应用传 open_id**:
748
+
749
+ ```
750
+ 不同应用的 open_id 不能交叉使用,建议使用 user_id
751
+ ```
752
+
753
+ ---
754
+
755
+ ### 附件未挂载 (错误码 1254303)
756
+
757
+ **原因**: 直接传入外部 file_token
758
+
759
+ **解决**:
760
+
761
+ 1. 先调用[上传素材接口](https://go.feishu.cn/s/63soQp6O80s)上传到当前多维表格
762
+ 2. 使用返回的 `file_token` 写入记录
763
+
764
+ ---
765
+
766
+ ### 字段名不存在 (错误码 1254045)
767
+
768
+ **原因**: 字段名称不完全匹配(可能有空格、换行、特殊字符)
769
+
770
+ **排查**:
771
+
772
+ 1. 调用[列出字段接口](https://go.feishu.cn/s/62nuKkQlk03)获取准确字段名
773
+ 2. 检查首尾空格、换行符
774
+
775
+ ---
776
+
777
+ ### 超链接字段转换失败 (错误码 1254068)
778
+
779
+ **原因**: 缺少 `text` 或 `link` 字段
780
+
781
+ ```json
782
+ // ❌ 错误
783
+ {
784
+ "参考链接": {
785
+ "link": "https://example.com" // 缺少 text
786
+ }
787
+ }
788
+
789
+ // ✅ 正确
790
+ {
791
+ "参考链接": {
792
+ "text": "示例网站",
793
+ "link": "https://example.com"
794
+ }
795
+ }
796
+ ```
797
+
798
+ ---
799
+
800
+ ## 📌 最佳实践
801
+
802
+ ### 1. 批量写入优化
803
+
804
+ ```json
805
+ {
806
+ "fields": {
807
+ "任务名称": "拜访客户",
808
+ "负责人": [{"id": "ou_xxx"}],
809
+ "截止日期": 1708905600000,
810
+ "标签": ["重要", "紧急"],
811
+ "是否完成": false
812
+ }
813
+ }
814
+ ```
815
+
816
+ **建议**:
817
+ - 一次性传入所有字段,避免多次调用
818
+ - 只传需要设置的字段,不必包含所有列
819
+
820
+ ---
821
+
822
+ ### 2. 清空字段值
823
+
824
+ **方法 1**: 传 `null`
825
+
826
+ ```json
827
+ {
828
+ "fields": {
829
+ "负责人": null,
830
+ "标签": null
831
+ }
832
+ }
833
+ ```
834
+
835
+ **方法 2**: 传空数组/空字符串(根据字段类型)
836
+
837
+ ```json
838
+ {
839
+ "fields": {
840
+ "负责人": [],
841
+ "任务名称": ""
842
+ }
843
+ }
844
+ ```
845
+
846
+ ---
847
+
848
+ ### 3. 时间戳转换
849
+
850
+ **JavaScript**:
851
+
852
+ ```javascript
853
+ // 北京时间字符串 → Unix 毫秒时间戳
854
+ const timestamp = new Date("2024-02-26 14:00").getTime() // 1708927200000
855
+
856
+ // Unix 毫秒时间戳 → 日期字符串
857
+ const date = new Date(1708927200000).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
858
+ ```
859
+
860
+ **Python**:
861
+
862
+ ```python
863
+ import datetime
864
+
865
+ # 北京时间字符串 → Unix 毫秒时间戳
866
+ dt = datetime.datetime(2024, 2, 26, 14, 0, 0)
867
+ timestamp = int(dt.timestamp() * 1000) # 1708927200000
868
+
869
+ # Unix 毫秒时间戳 → 日期字符串
870
+ dt = datetime.datetime.fromtimestamp(1708927200000 / 1000)
871
+ ```
872
+
873
+ ---
874
+
875
+ ### 4. 关联字段的级联更新
876
+
877
+ **双向关联**:
878
+
879
+ ```json
880
+ // 更新 Table A 的双向关联字段
881
+ {
882
+ "fields": {
883
+ "关联项目": {
884
+ "link_record_ids": ["rec123"]
885
+ }
886
+ }
887
+ }
888
+ // Table B 的对应双向关联字段会自动更新
889
+ ```
890
+
891
+ **单向关联**:
892
+
893
+ ```json
894
+ // 只更新当前表,不影响关联表
895
+ {
896
+ "fields": {
897
+ "参考任务": {
898
+ "link_record_ids": ["rec456"]
899
+ }
900
+ }
901
+ }
902
+ ```
903
+
904
+ ---
905
+
906
+ ## 🔗 参考链接
907
+
908
+ - [飞书开放平台 - 多维表格记录数据结构](https://go.feishu.cn/s/6lY28723w04)
909
+ - [新增记录接口文档](https://go.feishu.cn/s/61Y-IrQjU02)
910
+ - [更新记录接口文档](https://go.feishu.cn/s/6lY28723A04)
911
+ - [上传素材接口](https://go.feishu.cn/s/63soQp6O80s)