@yanhaidao/wecom 2.4.120 → 2.5.110

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 (323) hide show
  1. package/README.md +4 -5
  2. package/dist/index.js +68 -0
  3. package/dist/src/accounts.js +20 -0
  4. package/dist/src/agent/handler.js +895 -0
  5. package/dist/src/agent/index.js +5 -0
  6. package/dist/src/app/account-runtime.js +216 -0
  7. package/dist/src/app/bootstrap.js +19 -0
  8. package/dist/src/app/index.js +118 -0
  9. package/dist/src/capability/agent/delivery-service.js +63 -0
  10. package/dist/src/capability/agent/fallback-policy.js +6 -0
  11. package/dist/src/capability/agent/ingress-service.js +33 -0
  12. package/dist/src/capability/agent/upstream-delivery-service.js +71 -0
  13. package/dist/src/capability/bot/dispatch-config.js +45 -0
  14. package/dist/src/capability/bot/fallback-delivery.js +147 -0
  15. package/dist/src/capability/bot/local-path-delivery.js +178 -0
  16. package/dist/src/capability/bot/sandbox-media.js +138 -0
  17. package/dist/src/capability/bot/service.js +49 -0
  18. package/dist/src/capability/bot/stream-delivery.js +321 -0
  19. package/dist/src/capability/bot/stream-finalizer.js +81 -0
  20. package/dist/src/capability/bot/stream-orchestrator.js +318 -0
  21. package/dist/src/capability/bot/types.js +1 -0
  22. package/{src/capability/calendar/client.ts → dist/src/capability/calendar/client.js} +118 -241
  23. package/{src/capability/calendar/schema.ts → dist/src/capability/calendar/schema.js} +0 -38
  24. package/dist/src/capability/calendar/tool.js +365 -0
  25. package/dist/src/capability/calendar/types.js +12 -0
  26. package/{src/capability/doc/client.ts → dist/src/capability/doc/client.js} +370 -605
  27. package/{src/capability/doc/schema.ts → dist/src/capability/doc/schema.js} +345 -394
  28. package/dist/src/capability/doc/tool.js +1556 -0
  29. package/dist/src/capability/doc/types.js +113 -0
  30. package/dist/src/capability/mcp/index.js +3 -0
  31. package/dist/src/capability/mcp/schema.js +102 -0
  32. package/dist/src/capability/mcp/tool.js +146 -0
  33. package/dist/src/capability/mcp/transport.js +293 -0
  34. package/dist/src/channel.js +224 -0
  35. package/dist/src/config/accounts.js +236 -0
  36. package/dist/src/config/derived-paths.js +31 -0
  37. package/dist/src/config/index.js +7 -0
  38. package/dist/src/config/media.js +110 -0
  39. package/dist/src/config/network.js +32 -0
  40. package/dist/src/config/routing.js +20 -0
  41. package/dist/src/config/runtime-config.js +25 -0
  42. package/dist/src/config/schema.js +4 -0
  43. package/{src/config-schema.ts → dist/src/config-schema.js} +1 -1
  44. package/dist/src/context-store.js +219 -0
  45. package/{src/crypto/aes.ts → dist/src/crypto/aes.js} +11 -28
  46. package/dist/src/crypto/index.js +9 -0
  47. package/{src/crypto/signature.ts → dist/src/crypto/signature.js} +3 -18
  48. package/{src/crypto/xml.ts → dist/src/crypto/xml.js} +3 -11
  49. package/dist/src/crypto.js +145 -0
  50. package/dist/src/domain/models.js +1 -0
  51. package/dist/src/domain/policies.js +32 -0
  52. package/{src/dynamic-agent.ts → dist/src/dynamic-agent.js} +36 -73
  53. package/dist/src/gateway-monitor.js +139 -0
  54. package/dist/src/http.js +114 -0
  55. package/{src/media.ts → dist/src/media.js} +21 -40
  56. package/dist/src/monitor/limits.js +7 -0
  57. package/dist/src/monitor/state.js +28 -0
  58. package/dist/src/monitor.js +84 -0
  59. package/dist/src/observability/audit-log.js +30 -0
  60. package/dist/src/observability/legacy-operational-event-store.js +22 -0
  61. package/dist/src/observability/raw-envelope-log.js +24 -0
  62. package/dist/src/observability/status-registry.js +9 -0
  63. package/dist/src/observability/transport-session-view.js +14 -0
  64. package/dist/src/onboarding.js +546 -0
  65. package/dist/src/outbound.js +557 -0
  66. package/dist/src/runtime/dispatcher.js +57 -0
  67. package/{src/runtime/index.ts → dist/src/runtime/index.js} +0 -1
  68. package/dist/src/runtime/outbound-intent.js +1 -0
  69. package/dist/src/runtime/reply-orchestrator.js +38 -0
  70. package/dist/src/runtime/routing-bridge.js +26 -0
  71. package/dist/src/runtime/session-manager.js +112 -0
  72. package/dist/src/runtime/source-registry.js +174 -0
  73. package/dist/src/runtime.js +1 -0
  74. package/dist/src/shared/command-auth.js +57 -0
  75. package/{src/shared/index.ts → dist/src/shared/index.js} +0 -1
  76. package/dist/src/shared/media-asset.js +65 -0
  77. package/dist/src/shared/media-service.js +59 -0
  78. package/dist/src/shared/media-types.js +1 -0
  79. package/{src/shared/xml-parser.ts → dist/src/shared/xml-parser.js} +72 -63
  80. package/dist/src/store/active-reply-store.js +41 -0
  81. package/dist/src/store/interfaces.js +1 -0
  82. package/dist/src/store/memory-store.js +33 -0
  83. package/dist/src/store/stream-batch-store.js +319 -0
  84. package/{src/target.ts → dist/src/target.js} +15 -48
  85. package/dist/src/transport/agent-api/client.js +168 -0
  86. package/dist/src/transport/agent-api/core.js +337 -0
  87. package/dist/src/transport/agent-api/delivery.js +28 -0
  88. package/dist/src/transport/agent-api/media-upload.js +4 -0
  89. package/dist/src/transport/agent-api/reply.js +24 -0
  90. package/dist/src/transport/agent-api/upstream-delivery.js +30 -0
  91. package/dist/src/transport/agent-api/upstream-media-upload.js +46 -0
  92. package/dist/src/transport/agent-api/upstream-reply.js +26 -0
  93. package/dist/src/transport/agent-callback/http-handler.js +30 -0
  94. package/dist/src/transport/agent-callback/inbound.js +4 -0
  95. package/dist/src/transport/agent-callback/reply.js +8 -0
  96. package/dist/src/transport/agent-callback/request-handler.js +189 -0
  97. package/dist/src/transport/agent-callback/session.js +15 -0
  98. package/dist/src/transport/bot-webhook/active-reply.js +27 -0
  99. package/dist/src/transport/bot-webhook/http-handler.js +31 -0
  100. package/dist/src/transport/bot-webhook/inbound-normalizer.js +496 -0
  101. package/dist/src/transport/bot-webhook/inbound.js +4 -0
  102. package/dist/src/transport/bot-webhook/message-shape.js +98 -0
  103. package/dist/src/transport/bot-webhook/protocol.js +124 -0
  104. package/dist/src/transport/bot-webhook/reply.js +9 -0
  105. package/dist/src/transport/bot-webhook/request-handler.js +285 -0
  106. package/dist/src/transport/bot-webhook/session.js +15 -0
  107. package/dist/src/transport/bot-ws/inbound.js +147 -0
  108. package/dist/src/transport/bot-ws/media.js +236 -0
  109. package/dist/src/transport/bot-ws/reply.js +310 -0
  110. package/dist/src/transport/bot-ws/sdk-adapter.js +257 -0
  111. package/dist/src/transport/bot-ws/session.js +15 -0
  112. package/dist/src/transport/http/common.js +78 -0
  113. package/dist/src/transport/http/registry.js +71 -0
  114. package/dist/src/transport/http/request-handler.js +51 -0
  115. package/{src/transport/index.ts → dist/src/transport/index.js} +2 -10
  116. package/dist/src/types/account.js +1 -0
  117. package/dist/src/types/config.js +1 -0
  118. package/dist/src/types/constants.js +28 -0
  119. package/dist/src/types/events.js +1 -0
  120. package/dist/src/types/index.js +1 -0
  121. package/dist/src/types/legacy-stream.js +1 -0
  122. package/dist/src/types/message.js +5 -0
  123. package/dist/src/types/runtime-context.js +1 -0
  124. package/dist/src/types/runtime.js +1 -0
  125. package/dist/src/types.js +1 -0
  126. package/dist/src/upstream/index.js +111 -0
  127. package/dist/src/wecom_msg_adapter/markdown_adapter.js +280 -0
  128. package/openclaw.plugin.json +15 -0
  129. package/package.json +18 -1
  130. package/.github/workflows/release.yml +0 -143
  131. package/GOVERNANCE.md +0 -26
  132. package/MENU_EVENT_CONF.md +0 -500
  133. package/MENU_EVENT_PLAN.md +0 -440
  134. package/SKILLS_CAL.md +0 -895
  135. package/SKILLS_DOC.md +0 -2288
  136. package/UPSTREAM_CONFIG.md +0 -170
  137. package/UPSTREAM_PLAN.md +0 -175
  138. package/assets/01.bot-add.png +0 -0
  139. package/assets/01.bot-setp2.png +0 -0
  140. package/assets/01.image.jpg +0 -0
  141. package/assets/02.agent.add.png +0 -0
  142. package/assets/02.agent.api-set.png +0 -0
  143. package/assets/02.image.jpg +0 -0
  144. package/assets/03.agent.page.png +0 -0
  145. package/assets/03.bot.page.png +0 -0
  146. package/assets/link-me.jpg +0 -0
  147. package/assets/register.png +0 -0
  148. package/changelog/v2.2.28.md +0 -70
  149. package/changelog/v2.3.10.md +0 -17
  150. package/changelog/v2.3.11.md +0 -19
  151. package/changelog/v2.3.12.md +0 -25
  152. package/changelog/v2.3.13.md +0 -19
  153. package/changelog/v2.3.14.md +0 -48
  154. package/changelog/v2.3.15.md +0 -15
  155. package/changelog/v2.3.16.md +0 -11
  156. package/changelog/v2.3.18.md +0 -22
  157. package/changelog/v2.3.19.md +0 -73
  158. package/changelog/v2.3.2.md +0 -28
  159. package/changelog/v2.3.26.md +0 -21
  160. package/changelog/v2.3.27.md +0 -33
  161. package/changelog/v2.3.4.md +0 -20
  162. package/changelog/v2.3.9.md +0 -22
  163. package/changelog/v2.4.12.md +0 -37
  164. package/compat-single-account.md +0 -148
  165. package/index.test.ts +0 -38
  166. package/scripts/test-proxy.ts +0 -70
  167. package/scripts/wecom/README.md +0 -123
  168. package/scripts/wecom/menu-click-help.js +0 -59
  169. package/scripts/wecom/menu-click-help.py +0 -55
  170. package/src/accounts.ts +0 -34
  171. package/src/agent/api-client.upload.test.ts +0 -109
  172. package/src/agent/event-router.test.ts +0 -421
  173. package/src/agent/event-router.ts +0 -272
  174. package/src/agent/handler.event-filter.test.ts +0 -135
  175. package/src/agent/handler.ts +0 -1250
  176. package/src/agent/index.ts +0 -12
  177. package/src/agent/script-runner.ts +0 -186
  178. package/src/agent/test-fixtures/invalid-json-script.mjs +0 -1
  179. package/src/agent/test-fixtures/reply-event-script.mjs +0 -29
  180. package/src/agent/test-fixtures/reply-event-script.py +0 -17
  181. package/src/app/account-runtime.ts +0 -276
  182. package/src/app/bootstrap.ts +0 -29
  183. package/src/app/index.ts +0 -192
  184. package/src/capability/agent/delivery-service.ts +0 -87
  185. package/src/capability/agent/fallback-policy.ts +0 -13
  186. package/src/capability/agent/ingress-service.ts +0 -38
  187. package/src/capability/agent/upstream-delivery-service.ts +0 -96
  188. package/src/capability/bot/dispatch-config.ts +0 -47
  189. package/src/capability/bot/fallback-delivery.ts +0 -178
  190. package/src/capability/bot/local-path-delivery.ts +0 -215
  191. package/src/capability/bot/sandbox-media.test.ts +0 -221
  192. package/src/capability/bot/sandbox-media.ts +0 -176
  193. package/src/capability/bot/service.ts +0 -56
  194. package/src/capability/bot/stream-delivery.ts +0 -379
  195. package/src/capability/bot/stream-finalizer.ts +0 -120
  196. package/src/capability/bot/stream-orchestrator.ts +0 -371
  197. package/src/capability/bot/types.ts +0 -8
  198. package/src/capability/calendar/SKILLS_CHECKLIST.md +0 -251
  199. package/src/capability/calendar/tool.ts +0 -417
  200. package/src/capability/calendar/types.ts +0 -309
  201. package/src/capability/doc/tool.ts +0 -1629
  202. package/src/capability/doc/types.ts +0 -792
  203. package/src/capability/mcp/index.ts +0 -10
  204. package/src/capability/mcp/schema.ts +0 -107
  205. package/src/capability/mcp/tool.ts +0 -174
  206. package/src/capability/mcp/transport.ts +0 -394
  207. package/src/channel.config.test.ts +0 -180
  208. package/src/channel.lifecycle.test.ts +0 -255
  209. package/src/channel.meta.test.ts +0 -26
  210. package/src/channel.ts +0 -256
  211. package/src/config/accounts.resolve.test.ts +0 -75
  212. package/src/config/accounts.ts +0 -312
  213. package/src/config/derived-paths.test.ts +0 -111
  214. package/src/config/derived-paths.ts +0 -41
  215. package/src/config/index.ts +0 -22
  216. package/src/config/media.test.ts +0 -113
  217. package/src/config/media.ts +0 -139
  218. package/src/config/network.ts +0 -20
  219. package/src/config/routing.test.ts +0 -88
  220. package/src/config/routing.ts +0 -26
  221. package/src/config/runtime-config.ts +0 -46
  222. package/src/config/schema.ts +0 -144
  223. package/src/context-store.ts +0 -297
  224. package/src/crypto/index.ts +0 -24
  225. package/src/crypto.test.ts +0 -32
  226. package/src/crypto.ts +0 -176
  227. package/src/domain/models.ts +0 -7
  228. package/src/domain/policies.ts +0 -36
  229. package/src/dynamic-agent.account-scope.test.ts +0 -17
  230. package/src/gateway-monitor.ts +0 -181
  231. package/src/http.ts +0 -137
  232. package/src/media.test.ts +0 -82
  233. package/src/monitor/limits.ts +0 -7
  234. package/src/monitor/state.queue.test.ts +0 -185
  235. package/src/monitor/state.ts +0 -34
  236. package/src/monitor.active.test.ts +0 -245
  237. package/src/monitor.inbound-filter.test.ts +0 -63
  238. package/src/monitor.integration.test.ts +0 -208
  239. package/src/monitor.ts +0 -121
  240. package/src/monitor.webhook.test.ts +0 -774
  241. package/src/observability/audit-log.ts +0 -48
  242. package/src/observability/legacy-operational-event-store.ts +0 -36
  243. package/src/observability/raw-envelope-log.ts +0 -28
  244. package/src/observability/status-registry.ts +0 -13
  245. package/src/observability/transport-session-view.ts +0 -14
  246. package/src/onboarding.test.ts +0 -336
  247. package/src/onboarding.ts +0 -704
  248. package/src/outbound.test.ts +0 -1271
  249. package/src/outbound.ts +0 -746
  250. package/src/runtime/dispatcher.ts +0 -71
  251. package/src/runtime/outbound-intent.ts +0 -4
  252. package/src/runtime/reply-orchestrator.test.ts +0 -71
  253. package/src/runtime/reply-orchestrator.ts +0 -67
  254. package/src/runtime/routing-bridge.test.ts +0 -115
  255. package/src/runtime/routing-bridge.ts +0 -44
  256. package/src/runtime/session-manager.test.ts +0 -174
  257. package/src/runtime/session-manager.ts +0 -139
  258. package/src/runtime/source-registry.ts +0 -249
  259. package/src/runtime.ts +0 -14
  260. package/src/shared/command-auth.ts +0 -87
  261. package/src/shared/media-asset.ts +0 -78
  262. package/src/shared/media-service.test.ts +0 -111
  263. package/src/shared/media-service.ts +0 -84
  264. package/src/shared/media-types.ts +0 -5
  265. package/src/shared/xml-parser.test.ts +0 -50
  266. package/src/store/active-reply-store.ts +0 -42
  267. package/src/store/interfaces.ts +0 -11
  268. package/src/store/memory-store.ts +0 -43
  269. package/src/store/stream-batch-store.ts +0 -350
  270. package/src/transport/agent-api/client.ts +0 -277
  271. package/src/transport/agent-api/core.ts +0 -463
  272. package/src/transport/agent-api/delivery.ts +0 -41
  273. package/src/transport/agent-api/media-upload.ts +0 -11
  274. package/src/transport/agent-api/reply.ts +0 -39
  275. package/src/transport/agent-api/upstream-delivery.ts +0 -45
  276. package/src/transport/agent-api/upstream-media-upload.ts +0 -70
  277. package/src/transport/agent-api/upstream-reply.ts +0 -43
  278. package/src/transport/agent-callback/http-handler.ts +0 -47
  279. package/src/transport/agent-callback/inbound.ts +0 -5
  280. package/src/transport/agent-callback/reply.ts +0 -13
  281. package/src/transport/agent-callback/request-handler.ts +0 -244
  282. package/src/transport/agent-callback/session.ts +0 -23
  283. package/src/transport/bot-webhook/active-reply.ts +0 -39
  284. package/src/transport/bot-webhook/http-handler.ts +0 -48
  285. package/src/transport/bot-webhook/inbound-normalizer.ts +0 -371
  286. package/src/transport/bot-webhook/inbound.ts +0 -5
  287. package/src/transport/bot-webhook/message-shape.ts +0 -89
  288. package/src/transport/bot-webhook/protocol.ts +0 -148
  289. package/src/transport/bot-webhook/reply.ts +0 -15
  290. package/src/transport/bot-webhook/request-handler.ts +0 -394
  291. package/src/transport/bot-webhook/session.ts +0 -23
  292. package/src/transport/bot-ws/inbound.test.ts +0 -96
  293. package/src/transport/bot-ws/inbound.ts +0 -116
  294. package/src/transport/bot-ws/media.test.ts +0 -44
  295. package/src/transport/bot-ws/media.ts +0 -321
  296. package/src/transport/bot-ws/reply.test.ts +0 -450
  297. package/src/transport/bot-ws/reply.ts +0 -365
  298. package/src/transport/bot-ws/sdk-adapter.test.ts +0 -187
  299. package/src/transport/bot-ws/sdk-adapter.ts +0 -314
  300. package/src/transport/bot-ws/session.ts +0 -28
  301. package/src/transport/http/common.ts +0 -109
  302. package/src/transport/http/registry.ts +0 -92
  303. package/src/transport/http/request-handler.ts +0 -84
  304. package/src/types/account.ts +0 -72
  305. package/src/types/config.ts +0 -166
  306. package/src/types/constants.ts +0 -31
  307. package/src/types/events.ts +0 -21
  308. package/src/types/global.d.ts +0 -9
  309. package/src/types/index.ts +0 -17
  310. package/src/types/legacy-stream.ts +0 -50
  311. package/src/types/message.ts +0 -187
  312. package/src/types/runtime-context.ts +0 -28
  313. package/src/types/runtime.ts +0 -165
  314. package/src/types.ts +0 -41
  315. package/src/upstream/index.ts +0 -150
  316. package/src/upstream.test.ts +0 -84
  317. package/src/wecom_msg_adapter/markdown_adapter.ts +0 -331
  318. package/tsconfig.json +0 -22
  319. package/vitest.config.ts +0 -26
  320. /package/{src/capability/agent/index.ts → dist/src/capability/agent/index.js} +0 -0
  321. /package/{src/capability/bot/index.ts → dist/src/capability/bot/index.js} +0 -0
  322. /package/{src/capability/calendar/index.ts → dist/src/capability/calendar/index.js} +0 -0
  323. /package/{src/capability/index.ts → dist/src/capability/index.js} +0 -0
package/SKILLS_DOC.md DELETED
@@ -1,2288 +0,0 @@
1
- # OpenClaw 企业微信文档能力技能清单
2
-
3
- > 本清单列出所有企业微信文档相关的 MCP Tools,按功能模块分类,方便 OpenClaw 直接调用。
4
-
5
- ## 一、文档基础操作 (Doc Basic Operations)
6
-
7
- ### 1.1 创建文档
8
- ```json
9
- {
10
- "name": "wecom_doc",
11
- "action": "create",
12
- "description": "创建文档/表格/智能表格",
13
- "parameters": {
14
- "docName": "文档名称",
15
- "docType": "doc|spreadsheet|smart_table|3|4|10",
16
- "spaceId": "可选:空间 ID",
17
- "fatherId": "可选:父目录 fileid",
18
- "adminUsers": "可选但推荐:文档管理员 userid 列表,创建智能表格时建议填写",
19
- "viewers": "可选:查看成员列表",
20
- "collaborators": "可选:协作者列表",
21
- "init_content": "可选:初始内容数组"
22
- },
23
- "returns": {
24
- "docId": "文档 ID",
25
- "url": "文档链接",
26
- "title": "文档标题",
27
- "resourceType": "资源类型"
28
- }
29
- }
30
- ```
31
-
32
- **⚠️ 智能表格创建注意事项**:
33
- 1. **adminUsers 参数** - 创建智能表格时强烈建议传入 `adminUsers: ["userid1", "userid2"]`,确保有管理员权限
34
- 2. **自动初始化** - 创建智能表格后会自动清理默认字段(5 个保留 1 个)和默认空白记录(5 条)
35
- 3. **默认字段类型** - 文本、数字、日期、单选、人员,其中文本/数字/日期等可作为主键
36
-
37
- ### 1.2 重命名文档
38
- ```json
39
- {
40
- "name": "wecom_doc",
41
- "action": "rename",
42
- "description": "重命名文档",
43
- "parameters": {
44
- "docId": "文档 ID",
45
- "newName": "新名称"
46
- }
47
- }
48
- ```
49
-
50
- ### 1.3 复制文档
51
- ```json
52
- {
53
- "name": "wecom_doc",
54
- "action": "copy",
55
- "description": "复制文档",
56
- "parameters": {
57
- "docId": "文档 ID",
58
- "newName": "新文档名称",
59
- "spaceId": "可选:目标空间 ID",
60
- "fatherId": "可选:目标父目录"
61
- }
62
- }
63
- ```
64
-
65
- ### 1.4 获取文档信息
66
- ```json
67
- {
68
- "name": "wecom_doc",
69
- "action": "get_info",
70
- "description": "获取文档基本信息",
71
- "parameters": {
72
- "docId": "文档 ID"
73
- },
74
- "returns": {
75
- "doc_name": "文档名称",
76
- "doc_type": "文档类型"
77
- }
78
- }
79
- ```
80
-
81
- ### 1.5 获取分享链接
82
- ```json
83
- {
84
- "name": "wecom_doc",
85
- "action": "share",
86
- "description": "获取文档分享链接",
87
- "parameters": {
88
- "docId": "文档 ID"
89
- },
90
- "returns": {
91
- "shareUrl": "分享链接"
92
- }
93
- }
94
- ```
95
-
96
- ### 1.6 删除文档
97
- ```json
98
- {
99
- "name": "wecom_doc",
100
- "action": "delete",
101
- "description": "删除文档或收集表",
102
- "parameters": {
103
- "docId": "可选:文档 ID",
104
- "formId": "可选:收集表 ID"
105
- }
106
- }
107
- ```
108
-
109
- ---
110
-
111
- ## 二、文档权限管理 (Doc Permission Management)
112
-
113
- ### 2.1 获取文档权限
114
- ```json
115
- {
116
- "name": "wecom_doc",
117
- "action": "get_auth",
118
- "description": "获取文档权限信息",
119
- "parameters": {
120
- "docId": "文档 ID"
121
- },
122
- "returns": {
123
- "docMembers": "查看成员列表",
124
- "coAuthList": "协作者列表",
125
- "accessRule": "访问规则"
126
- }
127
- }
128
- ```
129
-
130
- ### 2.2 诊断文档权限
131
- ```json
132
- {
133
- "name": "wecom_doc",
134
- "action": "diagnose_auth",
135
- "description": "诊断文档访问权限问题",
136
- "parameters": {
137
- "docId": "文档 ID"
138
- },
139
- "returns": {
140
- "internalAccessEnabled": "企业内访问是否开启",
141
- "externalAccessEnabled": "企业外访问是否开启",
142
- "requesterRole": "请求人角色",
143
- "findings": "诊断发现",
144
- "recommendations": "建议"
145
- }
146
- }
147
- ```
148
-
149
- ### 2.3 校验分享链接
150
- ```json
151
- {
152
- "name": "wecom_doc",
153
- "action": "validate_share_link",
154
- "description": "校验分享链接可用性",
155
- "parameters": {
156
- "shareUrl": "分享链接"
157
- },
158
- "returns": {
159
- "httpStatus": "HTTP 状态码",
160
- "userType": "访问身份",
161
- "padType": "页面类型",
162
- "findings": "诊断发现"
163
- }
164
- }
165
- ```
166
-
167
- ### 2.4 设置加入规则
168
- ```json
169
- {
170
- "name": "wecom_doc",
171
- "action": "set_join_rule",
172
- "description": "设置文档加入规则",
173
- "parameters": {
174
- "docId": "文档 ID",
175
- "request": {
176
- "enable_corp_internal": "是否开启企业内访问",
177
- "corp_internal_auth": "企业内权限:1 只读 2 编辑",
178
- "enable_corp_external": "是否开启企业外访问",
179
- "ban_share_external": "是否禁止外部分享"
180
- }
181
- }
182
- }
183
- ```
184
-
185
- ### 2.5 设置成员权限
186
- ```json
187
- {
188
- "name": "wecom_doc",
189
- "action": "set_member_auth",
190
- "description": "设置文档通知范围及成员权限",
191
- "parameters": {
192
- "docId": "文档 ID",
193
- "request": {
194
- "notified_scope_type": "通知范围类型",
195
- "notified_member_list": "通知成员列表"
196
- }
197
- }
198
- }
199
- ```
200
-
201
- ### 2.6 授予/撤销访问权限
202
- ```json
203
- {
204
- "name": "wecom_doc",
205
- "action": "grant_access",
206
- "description": "批量授予或撤销文档访问权限",
207
- "parameters": {
208
- "docId": "文档 ID",
209
- "viewers": "可选:查看成员列表",
210
- "collaborators": "可选:协作者列表",
211
- "removeViewers": "可选:移除查看成员",
212
- "removeCollaborators": "可选:移除协作者",
213
- "auth": "可选:权限级别"
214
- }
215
- }
216
- ```
217
-
218
- ### 2.7 添加协作者
219
- ```json
220
- {
221
- "name": "wecom_doc",
222
- "action": "add_collaborators",
223
- "description": "添加文档协作者",
224
- "parameters": {
225
- "docId": "文档 ID",
226
- "collaborators": "协作者列表",
227
- "auth": "可选:权限级别"
228
- }
229
- }
230
- ```
231
-
232
- ### 2.8 设置安全设置
233
- ```json
234
- {
235
- "name": "wecom_doc",
236
- "action": "set_safety_setting",
237
- "description": "设置文档安全设置(水印、复制等)",
238
- "parameters": {
239
- "docId": "文档 ID",
240
- "request": {
241
- "watermark": "水印设置",
242
- "disable_copy": "禁止复制",
243
- "disable_print": "禁止打印"
244
- }
245
- }
246
- }
247
- ```
248
-
249
- ### 2.9 获取安全设置
250
- ```json
251
- {
252
- "name": "wecom_doc",
253
- "action": "get_doc_security_setting",
254
- "description": "获取文档安全设置",
255
- "parameters": {
256
- "docId": "文档 ID"
257
- }
258
- }
259
- ```
260
-
261
- ---
262
-
263
- ## 三、文档内容操作 (Doc Content Operations)
264
-
265
- ### 3.1 获取文档内容
266
- ```json
267
- {
268
- "name": "wecom_doc",
269
- "action": "get_content",
270
- "description": "获取文档完整内容(包含版本号和文档树)",
271
- "parameters": {
272
- "docId": "文档 ID"
273
- },
274
- "returns": {
275
- "version": "文档版本号",
276
- "document": "文档内容树(Node 结构)"
277
- }
278
- }
279
- ```
280
-
281
- ### 3.2 更新文档内容
282
- ```json
283
- {
284
- "name": "wecom_doc",
285
- "action": "update_content",
286
- "description": "批量更新文档内容(最多 30 个操作)",
287
- "parameters": {
288
- "docId": "文档 ID",
289
- "requests": [
290
- {
291
- "replace_text": { "text": "替换文本", "ranges": [{"start_index": 0, "length": 5}] }
292
- },
293
- {
294
- "insert_text": { "text": "插入文本", "location": { "index": 10 } }
295
- },
296
- {
297
- "insert_image": { "image_id": "图片 URL", "location": { "index": 20 } }
298
- },
299
- {
300
- "insert_table": { "rows": 3, "cols": 3, "location": { "index": 30 } }
301
- },
302
- {
303
- "insert_paragraph": { "location": { "index": 40 } }
304
- },
305
- {
306
- "update_text_property": { "text_property": { "bold": true }, "ranges": [...] }
307
- }
308
- ],
309
- "version": "可选:文档版本号"
310
- },
311
- "returns": {
312
- "batches": "分批数量(超过 30 个操作时自动分批)"
313
- }
314
- }
315
- ```
316
-
317
- ### 3.3 上传图片到文档
318
- ```json
319
- {
320
- "name": "wecom_doc",
321
- "action": "upload_doc_image",
322
- "description": "上传图片到文档(获取 image_id)",
323
- "parameters": {
324
- "docId": "文档 ID",
325
- "file_path": "本地图片路径"
326
- },
327
- "returns": {
328
- "url": "图片 URL",
329
- "width": "图片宽度",
330
- "height": "图片高度",
331
- "size": "文件大小"
332
- }
333
- }
334
- ```
335
-
336
- ---
337
-
338
- ## 四、在线表格操作 (Spreadsheet Operations)
339
-
340
- ### 4.1 获取表格属性
341
- ```json
342
- {
343
- "name": "wecom_doc",
344
- "action": "get_sheet_properties",
345
- "description": "获取在线表格所有工作表属性",
346
- "parameters": {
347
- "docId": "文档 ID"
348
- },
349
- "returns": {
350
- "properties": [
351
- {
352
- "sheet_id": "工作表 ID",
353
- "title": "工作表标题",
354
- "row_count": "行数",
355
- "column_count": "列数"
356
- }
357
- ]
358
- }
359
- }
360
- ```
361
-
362
- ### 4.2 获取表格数据
363
- ```json
364
- {
365
- "name": "wecom_doc",
366
- "action": "get_sheet_data",
367
- "description": "获取指定范围内的单元格数据",
368
- "parameters": {
369
- "docId": "文档 ID",
370
- "sheetId": "工作表 ID",
371
- "range": "A1 表示法范围,如 A1:B5"
372
- },
373
- "returns": {
374
- "data": {
375
- "start_row": "起始行",
376
- "start_column": "起始列",
377
- "rows": [{ "values": [{ "cell_value": {...}, "cell_format": {...} }] }]"
378
- }
379
- }
380
- }
381
- ```
382
-
383
- ### 4.3 编辑表格数据
384
- ```json
385
- {
386
- "name": "wecom_doc",
387
- "action": "edit_sheet_data",
388
- "description": "编辑表格单元格数据(最多 5 个操作)",
389
- "parameters": {
390
- "docId": "文档 ID",
391
- "sheetId": "工作表 ID",
392
- "startRow": "可选:起始行(从 0 开始)",
393
- "startColumn": "可选:起始列(从 0 开始)",
394
- "gridData": {
395
- "rows": [
396
- { "values": [{ "cell_value": { "text": "内容" } }] }
397
- ]
398
- }
399
- }
400
- }
401
- ```
402
-
403
- ### 4.4 修改表格属性
404
- ```json
405
- {
406
- "name": "wecom_doc",
407
- "action": "modify_sheet_properties",
408
- "description": "修改工作表属性(添加/删除/重命名)",
409
- "parameters": {
410
- "docId": "文档 ID",
411
- "requests": [
412
- {
413
- "add_sheet_request": { "title": "新工作表", "row_count": 10, "column_count": 10 }
414
- },
415
- {
416
- "delete_sheet_request": { "sheet_id": "要删除的工作表 ID" }
417
- },
418
- {
419
- "update_range_request": { "sheet_id": "...", "grid_data": {...} }
420
- },
421
- {
422
- "delete_dimension_request": { "sheet_id": "...", "dimension": "ROW|COLUMN", "start_index": 1, "end_index": 5 }
423
- }
424
- ]
425
- }
426
- }
427
- ```
428
-
429
- ---
430
-
431
- ## 五、智能表格操作 (Smart Table Operations)
432
-
433
- ### 5.1 查询子表
434
- ```json
435
- {
436
- "name": "wecom_doc",
437
- "action": "smartsheet_get_sheets",
438
- "description": "查询智能表格所有子表信息",
439
- "parameters": {
440
- "docId": "文档 ID",
441
- "sheet_id": "可选:指定子表 ID 查询",
442
- "need_all_type_sheet": "可选:获取所有类型子表(包含仪表盘和说明页)"
443
- },
444
- "returns": {
445
- "sheet_list": [
446
- {
447
- "sheet_id": "子表 ID",
448
- "title": "子表名称",
449
- "is_visible": "是否可见",
450
- "type": "smartsheet|dashboard|external"
451
- }
452
- ]
453
- }
454
- }
455
- ```
456
-
457
- **⚠️ 智能表格自动初始化**:
458
- 创建智能表格 (`docType=10` 或 `smart_table`) 时,系统会自动执行以下初始化操作:
459
- 1. 获取默认子表(类型为 `smartsheet` 的第一个子表)
460
- 2. 获取默认字段(通常有 5 个:文本、数字、日期、单选、人员)
461
- 3. 删除 4 个默认字段,保留 1 个可作为主键的字段
462
- 4. 获取默认记录(通常有 5 条空白记录)
463
- 5. 删除所有默认空白记录
464
-
465
- 这样可以确保新创建的智能表格是干净的,用户可以根据需求添加自定义字段和记录。
466
-
467
- ### 5.2 添加子表
468
- ```json
469
- {
470
- "name": "wecom_doc",
471
- "action": "smartsheet_add_sheet",
472
- "description": "添加智能表格子表",
473
- "parameters": {
474
- "docId": "文档 ID",
475
- "title": "子表标题",
476
- "index": "可选:子表下标"
477
- },
478
- "returns": {
479
- "properties": {
480
- "sheet_id": "生成的子表 ID",
481
- "title": "子表标题",
482
- "index": "子表下标"
483
- }
484
- }
485
- }
486
- ```
487
-
488
- ### 5.3 删除子表
489
- ```json
490
- {
491
- "name": "wecom_doc",
492
- "action": "smartsheet_del_sheet",
493
- "description": "删除智能表格子表",
494
- "parameters": {
495
- "docId": "文档 ID",
496
- "sheetId": "子表 ID"
497
- }
498
- }
499
- ```
500
-
501
- ### 5.4 更新子表
502
- ```json
503
- {
504
- "name": "wecom_doc",
505
- "action": "smartsheet_update_sheet",
506
- "description": "修改子表标题",
507
- "parameters": {
508
- "docId": "文档 ID",
509
- "sheetId": "子表 ID",
510
- "title": "新标题"
511
- }
512
- }
513
- ```
514
-
515
- ### 5.5 添加视图
516
- ```json
517
- {
518
- "name": "wecom_doc",
519
- "action": "smartsheet_add_view",
520
- "description": "在子表中添加新视图",
521
- "parameters": {
522
- "docId": "文档 ID",
523
- "sheetId": "子表 ID",
524
- "view_title": "视图标题",
525
- "view_type": "VIEW_TYPE_GRID|VIEW_TYPE_KANBAN|VIEW_TYPE_GALLERY|VIEW_TYPE_GANTT|VIEW_TYPE_CALENDAR",
526
- "property": "可选:视图属性(sort_spec, filter_spec, group_spec 等)"
527
- },
528
- "returns": {
529
- "view": {
530
- "view_id": "视图 ID",
531
- "view_title": "视图标题",
532
- "view_type": "视图类型"
533
- }
534
- }
535
- }
536
- ```
537
-
538
- ### 5.6 更新视图
539
- ```json
540
- {
541
- "name": "wecom_doc",
542
- "action": "smartsheet_update_view",
543
- "description": "更新视图属性",
544
- "parameters": {
545
- "docId": "文档 ID",
546
- "sheetId": "子表 ID",
547
- "view_id": "视图 ID",
548
- "view_title": "可选:新视图标题",
549
- "property": "可选:视图属性(sort_spec, filter_spec, group_spec, color_config 等)"
550
- }
551
- }
552
- ```
553
-
554
- ### 5.7 删除视图
555
- ```json
556
- {
557
- "name": "wecom_doc",
558
- "action": "smartsheet_del_view",
559
- "description": "删除一个或多个视图",
560
- "parameters": {
561
- "docId": "文档 ID",
562
- "sheetId": "子表 ID",
563
- "view_ids": ["视图 ID 列表"]
564
- }
565
- }
566
- ```
567
-
568
- ### 5.8 查询视图
569
- ```json
570
- {
571
- "name": "wecom_doc",
572
- "action": "smartsheet_get_views",
573
- "description": "获取子表下所有视图信息",
574
- "parameters": {
575
- "docId": "文档 ID",
576
- "sheetId": "子表 ID",
577
- "view_ids": "可选:指定视图 ID 列表",
578
- "offset": "可选:偏移量",
579
- "limit": "可选:分页大小(最大 1000)"
580
- },
581
- "returns": {
582
- "views": [...],
583
- "total": "视图总数",
584
- "has_more": "是否还有更多",
585
- "next": "下次查询的偏移量"
586
- }
587
- }
588
- ```
589
-
590
- ### 5.9 添加字段
591
- ```json
592
- {
593
- "name": "wecom_doc",
594
- "action": "smartsheet_add_fields",
595
- "description": "在子表中添加一个或多个字段(单表最多 150 个字段)",
596
- "parameters": {
597
- "docId": "必填:string,文档的 docid",
598
- "sheetId": "必填:string,表格 ID",
599
- "fields": "必填:object[],字段详情数组",
600
- "fields[].field_title": "必填:string,字段标题",
601
- "fields[].field_type": "必填:string,字段类型,见下方字段类型对照表",
602
- "fields[].property_number": "可选:object,数字类型的字段属性,{decimal_places: 2, use_separate: true}",
603
- "fields[].property_checkbox": "可选:object,复选框类型的字段属性,{checked: true}",
604
- "fields[].property_date_time": "可选:object,日期类型的字段属性,{format: \"yyyy-mm-dd\", auto_fill: false}",
605
- "fields[].property_attachment": "可选:object,文件类型的字段属性,{display_mode: \"DISPLAY_MODE_LIST\"}",
606
- "fields[].property_user": "可选:object,人员类型的字段属性,{is_multiple: true, is_notified: true}",
607
- "fields[].property_url": "可选:object,超链接类型的字段属性,{type: \"LINK_TYPE_PURE_TEXT\"}",
608
- "fields[].property_select": "可选:object,多选类型的字段属性,{is_quick_add: true, options: [{id: \"1\", text: \"选项 1\", style: 1}]}",
609
- "fields[].property_created_time": "可选:object,创建时间类型的字段属性,{format: \"yyyy-mm-dd\"}",
610
- "fields[].property_modified_time": "可选:object,最后编辑时间类型的字段属性,{format: \"yyyy-mm-dd\"}",
611
- "fields[].property_progress": "可选:object,进度类型的字段属性,{decimal_places: 2}",
612
- "fields[].property_single_select": "可选:object,单选类型的字段属性,{is_quick_add: true, options: [...]}",
613
- "fields[].property_reference": "可选:object,关联类型的字段属性,{sub_id: \"\", field_id: \"\", is_multiple: false, view_id: \"\"}",
614
- "fields[].property_location": "可选:object,地理位置类型的字段属性,{input_type: \"LOCATION_INPUT_TYPE_MANUAL\"}",
615
- "fields[].property_auto_number": "可选:object,自动编号类型的字段属性,{type: \"NUMBER_TYPE_INCR\", rules: [...], reformat_existing_record: false}",
616
- "fields[].property_currency": "可选:object,货币类型的字段属性,{currency_type: \"CURRENCY_TYPE_CNY\", decimal_places: 2, use_separate: true}",
617
- "fields[].property_ww_group": "可选:object,群类型的字段属性,{allow_multiple: true}",
618
- "fields[].property_percentage": "可选:object,百分数类型的字段属性,{decimal_places: 2, use_separate: true}",
619
- "fields[].property_barcode": "可选:object,条码类型的字段属性,{mobile_scan_only: false}",
620
- "autoCleanupDefaultField": "可选:boolean,是否自动删除遗留的默认字段(默认 true)"
621
- },
622
- "returns": {
623
- "errcode": "integer,错误码",
624
- "errmsg": "string,错误码描述",
625
- "fields": "object[],字段详情数组",
626
- "fields[].field_id": "string,生成的字段 ID",
627
- "fields[].field_title": "string,字段标题",
628
- "fields[].field_type": "string,字段类型"
629
- }
630
- }
631
- ```
632
-
633
- **使用示例** - 添加文本字段:
634
- ```json
635
- {
636
- "name": "wecom_doc",
637
- "action": "smartsheet_add_fields",
638
- "parameters": {
639
- "docId": "DOCID123",
640
- "sheetId": "SHEET456",
641
- "fields": [
642
- {
643
- "field_title": "姓名",
644
- "field_type": "FIELD_TYPE_TEXT"
645
- },
646
- {
647
- "field_title": "备注",
648
- "field_type": "FIELD_TYPE_TEXT"
649
- }
650
- ]
651
- }
652
- }
653
- ```
654
-
655
- **使用示例** - 添加数字和日期字段:
656
- ```json
657
- {
658
- "name": "wecom_doc",
659
- "action": "smartsheet_add_fields",
660
- "parameters": {
661
- "docId": "DOCID123",
662
- "sheetId": "SHEET456",
663
- "fields": [
664
- {
665
- "field_title": "年龄",
666
- "field_type": "FIELD_TYPE_NUMBER",
667
- "property_number": {
668
- "decimal_places": 0,
669
- "use_separate": false
670
- }
671
- },
672
- {
673
- "field_title": "入职日期",
674
- "field_type": "FIELD_TYPE_DATE_TIME",
675
- "property_date_time": {
676
- "format": "yyyy-mm-dd",
677
- "auto_fill": false
678
- }
679
- }
680
- ]
681
- }
682
- }
683
- ```
684
-
685
- **使用示例** - 添加多选字段:
686
- ```json
687
- {
688
- "name": "wecom_doc",
689
- "action": "smartsheet_add_fields",
690
- "parameters": {
691
- "docId": "DOCID123",
692
- "sheetId": "SHEET456",
693
- "fields": [
694
- {
695
- "field_title": "技能",
696
- "field_type": "FIELD_TYPE_SELECT",
697
- "property_select": {
698
- "is_quick_add": true,
699
- "options": [
700
- {"text": "Java", "style": 1},
701
- {"text": "Python", "style": 2},
702
- {"text": "JavaScript", "style": 3}
703
- ]
704
- }
705
- }
706
- ]
707
- }
708
- }
709
- ```
710
-
711
- **⚠️ 重要注意事项**:
712
- 1. **字段属性必须与字段类型匹配** - 一种字段类型对应一种字段属性
713
- 2. **新增选项时不需要 id** - 只需填写 `text` 和 `style`,系统会自动生成 id
714
- 3. **field_type 必须使用官方常量** - 如 `FIELD_TYPE_TEXT`、`FIELD_TYPE_NUMBER` 等
715
- 4. **单表最多 150 个字段** - 超过限制会失败
716
- 5. **默认字段清理** - 创建智能表格时会自动清理默认字段(保留 1 个)
717
- 6. **自动删除遗留字段** - 第一次调用 `smartsheet_add_fields` 添加新字段后,会自动删除遗留的默认字段(可通过 `autoCleanupDefaultField: false` 禁用)
718
-
719
- **字段类型与属性对照表**:
720
-
721
- | 字段类型 | 字段属性 | 说明 |
722
- |----------|----------|------|
723
- | FIELD_TYPE_TEXT | 无 | 文本类型不需要属性 |
724
- | FIELD_TYPE_NUMBER | property_number | 数字类型,可设置小数位数和千位符 |
725
- | FIELD_TYPE_CHECKBOX | property_checkbox | 复选框类型,可设置默认是否勾选 |
726
- | FIELD_TYPE_DATE_TIME | property_date_time | 日期类型,可设置日期格式和自动填充 |
727
- | FIELD_TYPE_IMAGE | 无 | 图片类型不需要属性 |
728
- | FIELD_TYPE_ATTACHMENT | property_attachment | 文件类型,可设置展示样式(列表/宫格) |
729
- | FIELD_TYPE_USER | property_user | 人员类型,可设置是否多选和是否通知 |
730
- | FIELD_TYPE_URL | property_url | 超链接类型,可设置展示样式(文字/图标文字) |
731
- | FIELD_TYPE_SELECT | property_select | 多选类型,可设置选项和是否允许新增 |
732
- | FIELD_TYPE_SINGLE_SELECT | property_single_select | 单选类型,可设置选项和是否允许新增 |
733
- | FIELD_TYPE_CREATED_TIME | property_created_time | 创建时间类型,可设置日期格式 |
734
- | FIELD_TYPE_MODIFIED_TIME | property_modified_time | 最后编辑时间类型,可设置日期格式 |
735
- | FIELD_TYPE_PROGRESS | property_progress | 进度类型,可设置小数位数 |
736
- | FIELD_TYPE_PHONE_NUMBER | 无 | 电话类型不需要属性 |
737
- | FIELD_TYPE_EMAIL | 无 | 邮箱类型不需要属性 |
738
- | FIELD_TYPE_REFERENCE | property_reference | 关联类型,可设置关联子表和字段 |
739
- | FIELD_TYPE_LOCATION | property_location | 地理位置类型,可设置输入类型(手动/自动) |
740
- | FIELD_TYPE_CURRENCY | property_currency | 货币类型,可设置货币类型和小数位数 |
741
- | FIELD_TYPE_WWGROUP | property_ww_group | 群类型,可设置是否多选 |
742
- | FIELD_TYPE_AUTONUMBER | property_auto_number | 自动编号类型,可设置编号规则 |
743
- | FIELD_TYPE_PERCENTAGE | property_percentage | 百分数类型,可设置小数位数 |
744
- | FIELD_TYPE_BARCODE | property_barcode | 条码类型,可设置是否仅限手机扫描 |
745
-
746
- ### 5.10 删除字段
747
- ```json
748
- {
749
- "name": "wecom_doc",
750
- "action": "smartsheet_del_fields",
751
- "description": "删除一个或多个字段",
752
- "parameters": {
753
- "docId": "必填:string,文档的 docid",
754
- "sheetId": "必填:string,表格 ID",
755
- "field_ids": "必填:string[],需要删除的字段 id 列表"
756
- },
757
- "returns": {
758
- "errcode": "integer,错误码",
759
- "errmsg": "string,错误码描述"
760
- }
761
- }
762
- ```
763
-
764
- **使用示例**:
765
- ```json
766
- {
767
- "name": "wecom_doc",
768
- "action": "smartsheet_del_fields",
769
- "parameters": {
770
- "docId": "DOCID123",
771
- "sheetId": "SHEET456",
772
- "field_ids": ["f1gHSR", "fabcde"]
773
- }
774
- }
775
- ```
776
-
777
- ---
778
-
779
- ### 5.11 更新字段
780
- ```json
781
- {
782
- "name": "wecom_doc",
783
- "action": "smartsheet_update_fields",
784
- "description": "更新字段的标题和字段属性(不能更新字段类型)",
785
- "parameters": {
786
- "docId": "必填:string,文档的 docid",
787
- "sheetId": "必填:string,表格 ID",
788
- "fields": "必填:object[],字段详情数组",
789
- "fields[].field_id": "必填:string,字段 ID(不能更新)",
790
- "fields[].field_title": "可选:string,新字段标题(不能更新为原值)",
791
- "fields[].field_type": "必填:string,字段类型(必须为原类型)",
792
- "fields[].property_number": "可选:object,数字类型的字段属性",
793
- "fields[].property_checkbox": "可选:object,复选框类型的字段属性",
794
- "fields[].property_date_time": "可选:object,日期类型的字段属性",
795
- "fields[].property_attachment": "可选:object,文件类型的字段属性",
796
- "fields[].property_user": "可选:object,人员类型的字段属性",
797
- "fields[].property_url": "可选:object,超链接类型的字段属性",
798
- "fields[].property_select": "可选:object,多选类型的字段属性",
799
- "fields[].property_created_time": "可选:object,创建时间类型的字段属性",
800
- "fields[].property_modified_time": "可选:object,最后编辑时间类型的字段属性",
801
- "fields[].property_progress": "可选:object,进度类型的字段属性",
802
- "fields[].property_single_select": "可选:object,单选类型的字段属性",
803
- "fields[].property_reference": "可选:object,关联类型的字段属性",
804
- "fields[].property_location": "可选:object,地理位置类型的字段属性",
805
- "fields[].property_auto_number": "可选:object,自动编号类型的字段属性",
806
- "fields[].property_currency": "可选:object,货币类型的字段属性",
807
- "fields[].property_ww_group": "可选:object,群类型的字段属性",
808
- "fields[].property_percentage": "可选:object,百分数类型的字段属性",
809
- "fields[].property_barcode": "可选:object,条码类型的字段属性"
810
- },
811
- "returns": {
812
- "errcode": "integer,错误码",
813
- "errmsg": "string,错误码描述",
814
- "fields": "object[],字段详情数组"
815
- }
816
- }
817
- ```
818
-
819
- **使用示例** - 更新字段标题:
820
- ```json
821
- {
822
- "name": "wecom_doc",
823
- "action": "smartsheet_update_fields",
824
- "parameters": {
825
- "docId": "DOCID123",
826
- "sheetId": "SHEET456",
827
- "fields": [
828
- {
829
- "field_id": "f1gHSR",
830
- "field_title": "员工姓名",
831
- "field_type": "FIELD_TYPE_TEXT"
832
- }
833
- ]
834
- }
835
- }
836
- ```
837
-
838
- **使用示例** - 更新字段属性:
839
- ```json
840
- {
841
- "name": "wecom_doc",
842
- "action": "smartsheet_update_fields",
843
- "parameters": {
844
- "docId": "DOCID123",
845
- "sheetId": "SHEET456",
846
- "fields": [
847
- {
848
- "field_id": "fabcde",
849
- "field_type": "FIELD_TYPE_NUMBER",
850
- "property_number": {
851
- "decimal_places": 2,
852
- "use_separate": true
853
- }
854
- }
855
- ]
856
- }
857
- }
858
- ```
859
-
860
- **⚠️ 重要注意事项**:
861
- 1. **不能更新字段类型** - 只能更新字段标题和字段属性
862
- 2. **field_title 和 property 至少传一个** - 且 field_title 不能被更新为原值
863
- 3. **field_id 不能更新** - 仅用于标识要更新的字段
864
- 4. **字段属性必须与字段类型匹配** - 与添加字段时相同
865
-
866
- ---
867
-
868
- ### 5.12 查询字段
869
- ```json
870
- {
871
- "name": "wecom_doc",
872
- "action": "smartsheet_get_fields",
873
- "description": "获取子表下字段信息(支持分页、按字段 ID 或字段标题筛选)",
874
- "parameters": {
875
- "docId": "必填:string,文档的 docid",
876
- "sheetId": "必填:string,表格 ID",
877
- "view_id": "可选:string,视图 ID",
878
- "field_ids": "可选:string[],由字段 ID 组成的 JSON 数组",
879
- "field_titles": "可选:string[],由字段标题组成的 JSON 数组",
880
- "offset": "可选:integer,偏移量,初始值为 0",
881
- "limit": "可选:integer,分页大小,每页返回多少条数据;当不填写该参数或将该参数设置为 0 时,如果总数大于 1000,一次性返回 1000 个字段,当总数小于 1000 时,返回全部字段;limit 最大值为 1000"
882
- },
883
- "returns": {
884
- "errcode": "integer,错误码",
885
- "errmsg": "string,错误码描述",
886
- "total": "integer,字段总数",
887
- "fields": "object[],字段详情数组",
888
- "fields[].field_id": "string,字段 ID",
889
- "fields[].field_title": "string,字段标题",
890
- "fields[].field_type": "string,字段类型",
891
- "fields[].property_*": "可选:object,对应字段类型的属性"
892
- }
893
- }
894
- ```
895
-
896
- **使用示例** - 获取全部字段:
897
- ```json
898
- {
899
- "name": "wecom_doc",
900
- "action": "smartsheet_get_fields",
901
- "parameters": {
902
- "docId": "DOCID123",
903
- "sheetId": "SHEET456",
904
- "offset": 0,
905
- "limit": 100
906
- }
907
- }
908
- ```
909
-
910
- **使用示例** - 按字段 ID 查询:
911
- ```json
912
- {
913
- "name": "wecom_doc",
914
- "action": "smartsheet_get_fields",
915
- "parameters": {
916
- "docId": "DOCID123",
917
- "sheetId": "SHEET456",
918
- "field_ids": ["f1gHSR", "fabcde"]
919
- }
920
- }
921
- ```
922
-
923
- **使用示例** - 按字段标题查询:
924
- ```json
925
- {
926
- "name": "wecom_doc",
927
- "action": "smartsheet_get_fields",
928
- "parameters": {
929
- "docId": "DOCID123",
930
- "sheetId": "SHEET456",
931
- "field_titles": ["姓名", "年龄"]
932
- }
933
- }
934
- ```
935
-
936
- ### 5.13 添加编组
937
- ```json
938
- {
939
- "name": "wecom_doc",
940
- "action": "smartsheet_add_group",
941
- "description": "添加字段编组",
942
- "parameters": {
943
- "docId": "文档 ID",
944
- "sheetId": "子表 ID",
945
- "name": "编组名称",
946
- "children": ["可选:字段 ID 列表"]
947
- }
948
- }
949
- ```
950
-
951
- ### 5.14 删除编组
952
- ```json
953
- {
954
- "name": "wecom_doc",
955
- "action": "smartsheet_del_group",
956
- "description": "删除编组",
957
- "parameters": {
958
- "docId": "文档 ID",
959
- "sheetId": "子表 ID",
960
- "field_group_id": "编组 ID"
961
- }
962
- }
963
- ```
964
-
965
- ### 5.15 更新编组
966
- ```json
967
- {
968
- "name": "wecom_doc",
969
- "action": "smartsheet_update_group",
970
- "description": "更新编组",
971
- "parameters": {
972
- "docId": "文档 ID",
973
- "sheetId": "子表 ID",
974
- "field_group_id": "编组 ID",
975
- "name": "可选:新编组名称",
976
- "children": ["可选:字段 ID 列表"]
977
- }
978
- }
979
- ```
980
-
981
- ### 5.16 获取编组
982
- ```json
983
- {
984
- "name": "wecom_doc",
985
- "action": "smartsheet_get_groups",
986
- "description": "获取编组列表",
987
- "parameters": {
988
- "docId": "文档 ID",
989
- "sheetId": "子表 ID"
990
- }
991
- }
992
- ```
993
-
994
- ### 5.17 添加记录
995
- ```json
996
- {
997
- "name": "wecom_doc",
998
- "action": "smartsheet_add_records",
999
- "description": "添加一行或多行记录(单表最多 100000 行记录,1500000 个单元格,单次建议 500 行内)",
1000
- "parameters": {
1001
- "docId": "必填:string,文档的 docid",
1002
- "sheetId": "必填:string,Smartsheet 子表 ID",
1003
- "key_type": "可选:string,values 的 key 类型,CELL_VALUE_KEY_TYPE_FIELD_TITLE(默认,用字段标题)|CELL_VALUE_KEY_TYPE_FIELD_ID(用字段 ID)",
1004
- "records": "必填:object[],需要添加的记录数组",
1005
- "records[].values": "必填:object,记录的具体内容,key 为字段标题或字段 ID",
1006
- "records[].values.文本字段 (FIELD_TYPE_TEXT)": "可选:object[],[{\"type\": \"text\", \"text\": \"内容\"}] 或 [{\"type\": \"url\", \"text\": \"文本\", \"link\": \"URL\"}]",
1007
- "records[].values.数字字段 (FIELD_TYPE_NUMBER)": "可选:number,直接写数字如 25 或 15000.50(不需要数组)",
1008
- "records[].values.日期字段 (FIELD_TYPE_DATE_TIME)": "可选:string,毫秒时间戳字符串如 \"1704067200000\"(不需要数组)",
1009
- "records[].values.多选字段 (FIELD_TYPE_SELECT)": "可选:object[],[{\"text\": \"选项文本\", \"style\": 1}] 新增选项,或 [{\"id\": \"已有选项 ID\"}] 使用已有选项",
1010
- "records[].values.单选字段 (FIELD_TYPE_SINGLE_SELECT)": "可选:object[],[{\"text\": \"选项文本\", \"style\": 1}] 新增选项,或 [{\"id\": \"已有选项 ID\"}] 使用已有选项",
1011
- "records[].values.成员字段 (FIELD_TYPE_USER)": "可选:object[],[{\"user_id\": \"成员 userid\"}]",
1012
- "records[].values.复选框字段 (FIELD_TYPE_CHECKBOX)": "可选:boolean[],[true] 或 [false]",
1013
- "records[].values.进度字段 (FIELD_TYPE_PROGRESS)": "可选:number,直接写数字如 0.5 表示 50%(不需要数组)",
1014
- "records[].values.电话字段 (FIELD_TYPE_PHONE_NUMBER)": "可选:string[],[\"13800138000\"]",
1015
- "records[].values.邮箱字段 (FIELD_TYPE_EMAIL)": "可选:string[] 或 object[],[\"test@example.com\"] 或 [{\"type\": \"url\", \"text\": \"test@example.com\", \"link\": \"mailto:test@example.com\"}]",
1016
- "records[].values.链接字段 (FIELD_TYPE_URL)": "可选:object[],[{\"type\": \"url\", \"text\": \"显示文本\", \"link\": \"跳转 URL\"}]",
1017
- "records[].values.地理位置字段 (FIELD_TYPE_LOCATION)": "可选:object[],[{\"id\": \"地点 ID\", \"latitude\": \"纬度\", \"longitude\": \"经度\", \"title\": \"地点名称\", \"source_type\": 1}]",
1018
- "records[].values.货币字段 (FIELD_TYPE_CURRENCY)": "可选:number,直接写数字如 100.50(不需要数组)",
1019
- "records[].values.百分数字段 (FIELD_TYPE_PERCENTAGE)": "可选:number,直接写数字如 0.75 表示 75%(不需要数组)",
1020
- "records[].values.条码字段 (FIELD_TYPE_BARCODE)": "可选:string[],[\"6901234567890\"]"
1021
- },
1022
- "returns": {
1023
- "errcode": "integer,错误码",
1024
- "errmsg": "string,错误码描述",
1025
- "records": "object[],添加成功的记录数组"
1026
- }
1027
- }
1028
- ```
1029
-
1030
- **使用示例** - 添加文本和数字记录:
1031
- ```json
1032
- {
1033
- "name": "wecom_doc",
1034
- "action": "smartsheet_add_records",
1035
- "parameters": {
1036
- "docId": "DOCID123",
1037
- "sheetId": "SHEET456",
1038
- "key_type": "CELL_VALUE_KEY_TYPE_FIELD_TITLE",
1039
- "records": [
1040
- {
1041
- "values": {
1042
- "姓名": [{"type": "text", "text": "张三"}],
1043
- "年龄": 25,
1044
- "部门": [{"type": "text", "text": "技术部"}],
1045
- "入职日期": "1704067200000",
1046
- "是否全职": [true],
1047
- "工资": 15000.50
1048
- }
1049
- }
1050
- ]
1051
- }
1052
- }
1053
- ```
1054
-
1055
- **⚠️ 关键格式说明(根据实际 API 测试)**:
1056
-
1057
- 1. **字段值格式因类型而异**:
1058
- - ✅ 数字类型 (NUMBER, PROGRESS, CURRENCY, PERCENTAGE): 直接写数字 `25`、`0.75`、`100.50`
1059
- - ✅ 日期类型 (DATE_TIME): 直接写毫秒时间戳字符串 `"1704067200000"`
1060
- - ✅ 文本类型 (TEXT, URL): 数组格式 `[{"type": "text", "text": "内容"}]`
1061
- - ✅ 成员类型 (USER): 数组格式 `[{"user_id": "zhangsan"}]`
1062
- - ✅ 选项类型 (SELECT, SINGLE_SELECT): 数组格式 `[{"text": "选项", "style": 1}]` 或 `[{"id": "opt1"}]`
1063
- - ✅ 复选框 (CHECKBOX): 数组格式 `[true]` 或 `[false]`
1064
- - ✅ 电话/邮箱/条码:数组格式 `["13800138000"]`
1065
-
1066
- 2. **文本类型必须带 type 字段**
1067
- - 普通文本:`[{"type": "text", "text": "内容"}]`
1068
- - 链接文本:`[{"type": "url", "text": "显示文本", "link": "跳转 URL"}]`
1069
-
1070
- 3. **日期类型是毫秒时间戳字符串**
1071
- - ✅ 正确:`"1704067200000"`
1072
- - ❌ 错误:`1704067200000`(数字)、`"2024-01-01"`(日期字符串)
1073
-
1074
- 4. **单选/多选字段使用 Option 对象**
1075
- - 新增选项:`[{"text": "选项文本", "style": 1}]`(不需要 id)
1076
- - 使用已有选项:`[{"id": "已有选项 ID"}]`(优先匹配已有选项)
1077
-
1078
- 5. **values 的 key 必须与字段标题或字段 ID 完全匹配**
1079
- - 如果 `key_type` 为 `CELL_VALUE_KEY_TYPE_FIELD_TITLE`,使用字段标题
1080
- - 如果 `key_type` 为 `CELL_VALUE_KEY_TYPE_FIELD_ID`,使用字段 ID
1081
-
1082
- 6. **严格验证,不自动转换**:
1083
- - ❌ 不会将普通字符串自动转换为 `[{"type": "text", "text": "..."}]`
1084
- - ❌ 不会将 13 位数字字符串误判为时间戳(必须是字符串格式)
1085
- - ✅ 数字和日期类型保持原样
1086
- - ✅ 对象格式自动包裹为数组:`{user_id: "..."}` → `[{user_id: "..."}]`
1087
- - ⚠️ 模糊的原始值(如普通字符串 `"张三"`)会被拒绝,必须明确使用数组格式
1088
-
1089
- **使用示例** - 添加多选和成员记录:
1090
- ```json
1091
- {
1092
- "name": "wecom_doc",
1093
- "action": "smartsheet_add_records",
1094
- "parameters": {
1095
- "docId": "DOCID123",
1096
- "sheetId": "SHEET456",
1097
- "records": [
1098
- {
1099
- "values": {
1100
- "姓名": [{"type": "text", "text": "王五"}],
1101
- "技能": [
1102
- {"text": "Java", "style": 1},
1103
- {"text": "Python", "style": 2}
1104
- ],
1105
- "负责人": [{"user_id": "zhangsan"}],
1106
- "进度": [0.75],
1107
- "邮箱": [{"type": "url", "text": "wangwu@example.com", "link": "mailto:wangwu@example.com"}]
1108
- }
1109
- }
1110
- ]
1111
- }
1112
- }
1113
- ```
1114
-
1115
- **⚠️ 单选/多选字段格式说明**:
1116
-
1117
- 1. **新增选项**(选项中不存在该值):
1118
- ```json
1119
- [{"text": "新选项", "style": 1}]
1120
- ```
1121
- - 不需要填写 `id`
1122
- - 必须填写 `text` 和 `style`(颜色 1-27)
1123
-
1124
- 2. **使用已有选项**(选项中已存在):
1125
- ```json
1126
- [{"id": "已有选项 ID"}]
1127
- ```
1128
- - 只需要填写 `id`
1129
- - 系统会优先匹配已有选项
1130
-
1131
- 3. **混合使用**:
1132
- ```json
1133
- [
1134
- {"id": "已有选项 ID"},
1135
- {"text": "新选项", "style": 1}
1136
- ]
1137
- ```
1138
-
1139
- **⚠️ 重要注意事项**:
1140
- 1. **字段值格式因类型而异** - 数字/日期类型直接写值(`25`、`"1704067200000"`),文本/成员/选项类型用数组(`[{"type": "text", "text": "内容"}]`)
1141
- 2. **文本类型必须带 type** - `[{"type": "text", "text": "内容"}]` 或 `[{"type": "url", "text": "文本", "link": "URL"}]`
1142
- 3. **不能添加记录的字段类型** - 创建时间、最后编辑时间、创建人、最后编辑人这四种类型的字段不能通过接口添加值(系统自动填充)
1143
- 4. **key_type 决定 values 的 key** - 使用字段标题或字段 ID 作为 key,默认使用字段标题
1144
- 5. **单次添加建议 500 行内** - 避免超时或失败
1145
- 6. **插件严格验证** - 拒绝模糊的原始值,必须使用正确的格式
1146
-
1147
- **字段类型与值类型对照表**:
1148
-
1149
- | 字段类型 | 值类型 | 示例值 |
1150
- |----------|--------|--------|
1151
- | 文本 (FIELD_TYPE_TEXT) | object[] | `[{"type": "text", "text": "内容"}]` |
1152
- | 数字 (FIELD_TYPE_NUMBER) | number | `25` 或 `15000.50` |
1153
- | 复选框 (FIELD_TYPE_CHECKBOX) | boolean[] | `[true]` 或 `[false]` |
1154
- | 日期 (FIELD_TYPE_DATE_TIME) | string | `"1704067200000"` (毫秒时间戳) |
1155
- | 成员 (FIELD_TYPE_USER) | object[] | `[{"user_id": "zhangsan"}]` |
1156
- | 多选 (FIELD_TYPE_SELECT) | object[] | `[{"id": "opt1", "text": "选项", "style": 1}]` |
1157
- | 单选 (FIELD_TYPE_SINGLE_SELECT) | object[] | `[{"id": "opt1", "text": "选项", "style": 1}]` |
1158
- | 进度 (FIELD_TYPE_PROGRESS) | number | `0.75` (0-1 之间) |
1159
- | 电话 (FIELD_TYPE_PHONE_NUMBER) | string[] | `["13800138000"]` |
1160
- | 邮箱 (FIELD_TYPE_EMAIL) | string[] 或 object[] | `["test@example.com"]` 或 `[{"type": "url", "text": "test@example.com", "link": "mailto:test@example.com"}]` |
1161
- | 链接 (FIELD_TYPE_URL) | object[] | `[{"type": "url", "text": "显示文本", "link": "https://..."}]` |
1162
- | 货币 (FIELD_TYPE_CURRENCY) | number | `100.50` |
1163
- | 百分数 (FIELD_TYPE_PERCENTAGE) | number | `0.75` (表示 75%) |
1164
- | 条码 (FIELD_TYPE_BARCODE) | string[] | `["6901234567890"]` |
1165
- | 地理位置 (FIELD_TYPE_LOCATION) | object[] | `[{"id": "地点 ID", "latitude": "23.10647", "longitude": "113.32446", "title": "广州塔", "source_type": 1}]` |
1166
-
1167
- ### 5.18 更新记录
1168
- ```json
1169
- {
1170
- "name": "wecom_doc",
1171
- "action": "smartsheet_update_records",
1172
- "description": "更新一行或多行记录(不能更新创建时间、最后编辑时间、创建人、最后编辑人字段)",
1173
- "parameters": {
1174
- "docId": "必填:string,文档的 docid",
1175
- "sheetId": "必填:string,Smartsheet 子表 ID",
1176
- "key_type": "可选:string,请求中 values 的 key 类型,使用字段标题(默认)或字段 ID",
1177
- "records": "必填:object[],需要更新的记录数组",
1178
- "records[].record_id": "必填:string,记录 ID",
1179
- "records[].values": "必填:object,记录的具体内容,格式与添加记录相同",
1180
- "记录格式参考添加记录": "数字/日期类型直接写值,文本/成员/选项类型用数组"
1181
- },
1182
- "returns": {
1183
- "errcode": "integer,错误码",
1184
- "errmsg": "string,错误码描述",
1185
- "records": "object[],更新成功的记录数组"
1186
- }
1187
- }
1188
- ```
1189
-
1190
- **使用示例**:
1191
- ```json
1192
- {
1193
- "name": "wecom_doc",
1194
- "action": "smartsheet_update_records",
1195
- "parameters": {
1196
- "docId": "DOCID123",
1197
- "sheetId": "SHEET456",
1198
- "records": [
1199
- {
1200
- "record_id": "re9IqD",
1201
- "values": {
1202
- "姓名": [{"type": "text", "text": "张三丰"}],
1203
- "年龄": 26,
1204
- "部门": [{"type": "text", "text": "技术部"}],
1205
- "工资": 16000.00,
1206
- "是否全职": [true]
1207
- }
1208
- },
1209
- {
1210
- "record_id": "rpS0P9",
1211
- "values": {
1212
- "姓名": [{"type": "text", "text": "李四光"}],
1213
- "年龄": 29,
1214
- "部门": [{"type": "text", "text": "产品部"}],
1215
- "工资": 19000.00
1216
- }
1217
- }
1218
- ]
1219
- }
1220
- }
1221
- ```
1222
-
1223
- **⚠️ 重要注意事项**:
1224
- 1. **必须指定 record_id** - 用于标识要更新的记录
1225
- 2. **字段值格式与添加记录相同** - 数字/日期类型直接写值,文本/成员/选项类型用数组
1226
- 3. **不能更新的字段类型** - 创建时间、最后编辑时间、创建人、最后编辑人(系统自动更新)
1227
- 4. **只更新指定的字段** - 未指定的字段保持不变
1228
- 5. **文本类型必须带 type** - `[{"type": "text", "text": "内容"}]`
1229
-
1230
- ### 5.19 删除记录
1231
- ```json
1232
- {
1233
- "name": "wecom_doc",
1234
- "action": "smartsheet_del_records",
1235
- "description": "删除一行或多行记录(单表最多 100000 行记录,单次删除建议 500 行内)",
1236
- "parameters": {
1237
- "docId": "必填:string,文档的 docid",
1238
- "sheetId": "必填:string,Smartsheet 子表 ID",
1239
- "record_ids": "必填:string[],要删除的记录 ID 列表"
1240
- },
1241
- "returns": {
1242
- "errcode": "integer,错误码",
1243
- "errmsg": "string,错误码描述"
1244
- }
1245
- }
1246
- ```
1247
-
1248
- **使用示例**:
1249
- ```json
1250
- {
1251
- "name": "wecom_doc",
1252
- "action": "smartsheet_del_records",
1253
- "parameters": {
1254
- "docId": "DOCID123",
1255
- "sheetId": "SHEET456",
1256
- "record_ids": ["re9IqD", "rpS0P9"]
1257
- }
1258
- }
1259
- ```
1260
-
1261
- ### 5.20 查询记录
1262
- ```json
1263
- {
1264
- "name": "wecom_doc",
1265
- "action": "smartsheet_get_records",
1266
- "description": "获取记录列表(支持筛选、排序、分页、按字段过滤)",
1267
- "parameters": {
1268
- "docId": "必填:string,文档的 docid",
1269
- "sheetId": "必填:string,Smartsheet 子表 ID",
1270
- "view_id": "可选:string,视图 ID",
1271
- "record_ids": "可选:string[],指定记录 ID 列表",
1272
- "key_type": "可选:string,返回记录中单元格的 key 类型,CELL_VALUE_KEY_TYPE_FIELD_TITLE(默认)|CELL_VALUE_KEY_TYPE_FIELD_ID",
1273
- "field_titles": "可选:string[],返回指定列(字段标题数组)",
1274
- "field_ids": "可选:string[],返回指定列(字段 ID 数组)",
1275
- "sort": "可选:object[],排序设置,[{field_id: "字段 ID", desc: false}]",
1276
- "offset": "可选:integer,偏移量,初始值为 0",
1277
- "limit": "可选:integer,分页大小,最大 1000",
1278
- "ver": "可选:integer,版本号",
1279
- "filter_spec": "可选:object,过滤设置,{conjunction: "CONJUNCTION_AND", conditions: [...]}"
1280
- },
1281
- "returns": {
1282
- "errcode": "integer,错误码",
1283
- "errmsg": "string,错误码描述",
1284
- "records": "object[],记录数组",
1285
- "records[].record_id": "string,记录 ID",
1286
- "records[].values": "object,记录的具体内容,key 为字段标题或字段 ID,value 为数组(根据字段类型不同而不同)",
1287
- "total": "integer,记录总数",
1288
- "has_more": "boolean,是否还有更多",
1289
- "next": "integer,下次查询的偏移量",
1290
- "ver": "integer,版本号"
1291
- }
1292
- }
1293
- ```
1294
-
1295
- **使用示例** - 查询全部记录:
1296
- ```json
1297
- {
1298
- "name": "wecom_doc",
1299
- "action": "smartsheet_get_records",
1300
- "parameters": {
1301
- "docId": "DOCID123",
1302
- "sheetId": "SHEET456",
1303
- "offset": 0,
1304
- "limit": 100
1305
- }
1306
- }
1307
- ```
1308
-
1309
- **使用示例** - 按字段标题返回:
1310
- ```json
1311
- {
1312
- "name": "wecom_doc",
1313
- "action": "smartsheet_get_records",
1314
- "parameters": {
1315
- "docId": "DOCID123",
1316
- "sheetId": "SHEET456",
1317
- "key_type": "CELL_VALUE_KEY_TYPE_FIELD_TITLE",
1318
- "field_titles": ["姓名", "年龄", "部门"],
1319
- "limit": 50
1320
- }
1321
- }
1322
- ```
1323
-
1324
- **使用示例** - 排序查询:
1325
- ```json
1326
- {
1327
- "name": "wecom_doc",
1328
- "action": "smartsheet_get_records",
1329
- "parameters": {
1330
- "docId": "DOCID123",
1331
- "sheetId": "SHEET456",
1332
- "sort": [
1333
- {"field_id": "f1gHSR", "desc": false}
1334
- ],
1335
- "limit": 100
1336
- }
1337
- }
1338
- ```
1339
-
1340
- **使用示例** - 过滤查询:
1341
- ```json
1342
- {
1343
- "name": "wecom_doc",
1344
- "action": "smartsheet_get_records",
1345
- "parameters": {
1346
- "docId": "DOCID123",
1347
- "sheetId": "SHEET456",
1348
- "filter_spec": {
1349
- "conjunction": "CONJUNCTION_AND",
1350
- "conditions": [
1351
- {
1352
- "field_id": "f1gHSR",
1353
- "field_type": "FIELD_TYPE_TEXT",
1354
- "operator": "OPERATOR_CONTAINS",
1355
- "string_value": {
1356
- "value": ["张三"]
1357
- }
1358
- }
1359
- ]
1360
- }
1361
- }
1362
- }
1363
- ```
1364
-
1365
- **返回示例**:
1366
- ```json
1367
- {
1368
- "errcode": 0,
1369
- "errmsg": "ok",
1370
- "total": 10,
1371
- "has_more": false,
1372
- "next": 10,
1373
- "ver": 5,
1374
- "records": [
1375
- {
1376
- "record_id": "re9IqD",
1377
- "values": {
1378
- "姓名": [{"type": "text", "text": "张三"}],
1379
- "年龄": 25,
1380
- "部门": [{"type": "text", "text": "技术部"}],
1381
- "入职日期": "1704067200000",
1382
- "是否全职": [true]
1383
- }
1384
- },
1385
- {
1386
- "record_id": "rpS0P9",
1387
- "values": {
1388
- "姓名": [{"type": "text", "text": "李四"}],
1389
- "年龄": 28,
1390
- "部门": [{"type": "text", "text": "产品部"}],
1391
- "入职日期": "1704153600000",
1392
- "是否全职": [true]
1393
- }
1394
- }
1395
- ]
1396
- }
1397
- ```
1398
-
1399
- **注意**: 实际 API 返回的数据格式可能因字段类型而异,插件会自动规范化处理。
1400
-
1401
- **⚠️ 重要注意事项**:
1402
- 1. **字段值格式因类型而异** - 数字/日期类型是直接值,文本/成员/选项类型是数组
1403
- 2. **文本类型带 type 字段** - `[{"type": "text", "text": "内容"}]`
1404
- 3. **数字类型直接是数字** - `25`、`15000.50`(不是数组)
1405
- 4. **日期类型是毫秒时间戳字符串** - `"1704067200000"`(不是数组)
1406
- 5. **选项类型需要 id** - `[{"id": "opt1", "text": "选项", "style": 1}]`
1407
- 6. **成员类型需要 user_id** - `[{"user_id": "zhangsan"}]`
1408
-
1409
- **过滤操作符 (Operator)**:
1410
-
1411
- | 操作符 | 说明 |
1412
- |--------|------|
1413
- | OPERATOR_IS | 等于 |
1414
- | OPERATOR_IS_NOT | 不等于 |
1415
- | OPERATOR_CONTAINS | 包含 |
1416
- | OPERATOR_DOES_NOT_CONTAIN | 不包含 |
1417
- | OPERATOR_IS_GREATER | 大于 |
1418
- | OPERATOR_IS_GREATER_OR_EQUAL | 大于或等于 |
1419
- | OPERATOR_IS_LESS | 小于 |
1420
- | OPERATOR_IS_LESS_OR_EQUAL | 小于或等于 |
1421
- | OPERATOR_IS_EMPTY | 为空 |
1422
- | OPERATOR_IS_NOT_EMPTY | 不为空 |
1423
-
1424
- **过滤条件 conjunction**:
1425
- - `CONJUNCTION_AND` - 多个条件之间以 and 连接
1426
- - `CONJUNCTION_OR` - 多个条件之间以 or 连接
1427
-
1428
- ### 5.21 获取子表权限
1429
- ```json
1430
- {
1431
- "name": "wecom_doc",
1432
- "action": "smartsheet_get_sheet_priv",
1433
- "description": "获取智能表格子表权限规则",
1434
- "parameters": {
1435
- "docId": "文档 ID",
1436
- "type": "1(全员权限)|2(额外权限)",
1437
- "rule_id_list": "可选:规则 ID 列表"
1438
- }
1439
- }
1440
- ```
1441
-
1442
- ### 5.22 更新子表权限
1443
- ```json
1444
- {
1445
- "name": "wecom_doc",
1446
- "action": "smartsheet_update_sheet_priv",
1447
- "description": "更新子表权限规则",
1448
- "parameters": {
1449
- "docId": "文档 ID",
1450
- "type": "1(全员权限)|2(额外权限)",
1451
- "rule_id": "可选:规则 ID",
1452
- "name": "可选:规则名称",
1453
- "priv_list": "权限列表"
1454
- }
1455
- }
1456
- ```
1457
-
1458
- ### 5.23 创建权限规则
1459
- ```json
1460
- {
1461
- "name": "wecom_doc",
1462
- "action": "smartsheet_create_rule",
1463
- "description": "创建成员额外权限规则",
1464
- "parameters": {
1465
- "docId": "文档 ID",
1466
- "name": "规则名称"
1467
- },
1468
- "returns": {
1469
- "rule_id": "生成的规则 ID"
1470
- }
1471
- }
1472
- ```
1473
-
1474
- ### 5.24 修改规则成员
1475
- ```json
1476
- {
1477
- "name": "wecom_doc",
1478
- "action": "smartsheet_mod_rule_member",
1479
- "description": "修改权限规则的成员范围",
1480
- "parameters": {
1481
- "docId": "文档 ID",
1482
- "rule_id": "规则 ID",
1483
- "add_member_range": "可选:添加成员范围",
1484
- "del_member_range": "可选:删除成员范围"
1485
- }
1486
- }
1487
- ```
1488
-
1489
- ### 5.25 删除规则
1490
- ```json
1491
- {
1492
- "name": "wecom_doc",
1493
- "action": "smartsheet_delete_rule",
1494
- "description": "删除权限规则",
1495
- "parameters": {
1496
- "docId": "文档 ID",
1497
- "rule_id_list": ["规则 ID 列表"]
1498
- }
1499
- }
1500
- ```
1501
-
1502
- ---
1503
-
1504
- ## 六、收集表操作 (Form/Collect Operations)
1505
-
1506
- ### 6.1 创建收集表
1507
- ```json
1508
- {
1509
- "name": "wecom_doc",
1510
- "action": "create_form",
1511
- "description": "创建收集表(表单)",
1512
- "parameters": {
1513
- "formInfo": {
1514
- "form_title": "收集表标题(必填)",
1515
- "form_desc": "可选:收集表描述",
1516
- "form_header": "可选:背景图链接",
1517
- "form_question": {
1518
- "items": [
1519
- {
1520
- "question_id": 1,
1521
- "title": "问题标题",
1522
- "pos": 1,
1523
- "status": 1,
1524
- "reply_type": 1,
1525
- "must_reply": true,
1526
- "option_item": [{"key": 1, "value": "选项", "status": 1}]
1527
- }
1528
- ]
1529
- },
1530
- "form_setting": {
1531
- "fill_out_auth": 0,
1532
- "allow_multi_fill": false,
1533
- "can_anonymous": false
1534
- }
1535
- },
1536
- "spaceId": "可选:空间 ID",
1537
- "fatherId": "可选:父目录 fileid"
1538
- },
1539
- "returns": {
1540
- "formId": "收集表 ID",
1541
- "title": "收集表标题"
1542
- }
1543
- }
1544
- ```
1545
-
1546
- ### 6.2 编辑收集表
1547
- ```json
1548
- {
1549
- "name": "wecom_doc",
1550
- "action": "modify_form",
1551
- "description": "编辑收集表(全量修改问题或设置)",
1552
- "parameters": {
1553
- "oper": "1(全量修改问题)|2(全量修改设置)",
1554
- "formId": "收集表 ID",
1555
- "formInfo": {
1556
- "form_title": "可选:新标题",
1557
- "form_question": { "items": [...] },
1558
- "form_setting": {...}
1559
- }
1560
- }
1561
- }
1562
- ```
1563
-
1564
- ### 6.3 获取收集表信息
1565
- ```json
1566
- {
1567
- "name": "wecom_doc",
1568
- "action": "get_form_info",
1569
- "description": "获取收集表详细信息",
1570
- "parameters": {
1571
- "formId": "收集表 ID"
1572
- },
1573
- "returns": {
1574
- "form_info": {
1575
- "formid": "收集表 ID",
1576
- "form_title": "标题",
1577
- "form_question": { "items": [...] },
1578
- "form_setting": {...},
1579
- "repeated_id": ["周期 ID 列表"]
1580
- }
1581
- }
1582
- }
1583
- ```
1584
-
1585
- ### 6.4 获取收集表答案
1586
- ```json
1587
- {
1588
- "name": "wecom_doc",
1589
- "action": "get_form_answer",
1590
- "description": "获取收集表提交的答案(最多 100 个)",
1591
- "parameters": {
1592
- "repeatedId": "收集表周期 ID",
1593
- "answerIds": "可选:答案 ID 列表(最多 100 个)"
1594
- },
1595
- "returns": {
1596
- "answer_list": [
1597
- {
1598
- "answer_id": 15,
1599
- "user_name": "张三",
1600
- "reply": {
1601
- "items": [
1602
- { "question_id": 1, "text_reply": "答案" }
1603
- ]
1604
- }
1605
- }
1606
- ]
1607
- }
1608
- }
1609
- ```
1610
-
1611
- ### 6.5 获取收集表统计
1612
- ```json
1613
- {
1614
- "name": "wecom_doc",
1615
- "action": "get_form_statistic",
1616
- "description": "获取收集表统计信息",
1617
- "parameters": {
1618
- "requests": [
1619
- {
1620
- "repeated_id": "周期 ID",
1621
- "req_type": 1,
1622
- "start_time": 1667395287,
1623
- "end_time": 1668418369,
1624
- "limit": 20,
1625
- "cursor": 1
1626
- }
1627
- ]
1628
- },
1629
- "returns": {
1630
- "fill_cnt": 10,
1631
- "fill_user_cnt": 8,
1632
- "unfill_user_cnt": 5,
1633
- "submit_users": [...],
1634
- "unfill_users": [...]
1635
- }
1636
- }
1637
- ```
1638
-
1639
- ---
1640
-
1641
- ## 七、高级账号管理 (Advanced Account Management)
1642
-
1643
- ### 7.1 分配高级功能账号
1644
- ```json
1645
- {
1646
- "name": "wecom_doc",
1647
- "action": "doc_assign_advanced_account",
1648
- "description": "分配文档高级功能账号",
1649
- "parameters": {
1650
- "userid_list": ["成员 ID 列表"]
1651
- },
1652
- "returns": {
1653
- "jobid": "任务 ID"
1654
- }
1655
- }
1656
- ```
1657
-
1658
- ### 7.2 取消高级功能账号
1659
- ```json
1660
- {
1661
- "name": "wecom_doc",
1662
- "action": "doc_cancel_advanced_account",
1663
- "description": "取消文档高级功能账号",
1664
- "parameters": {
1665
- "userid_list": ["成员 ID 列表"]
1666
- },
1667
- "returns": {
1668
- "jobid": "任务 ID"
1669
- }
1670
- }
1671
- ```
1672
-
1673
- ### 7.3 获取高级账号列表
1674
- ```json
1675
- {
1676
- "name": "wecom_doc",
1677
- "action": "doc_get_advanced_account_list",
1678
- "description": "获取高级功能账号列表",
1679
- "parameters": {
1680
- "cursor": "可选:分页游标",
1681
- "limit": "可选:每页数量"
1682
- },
1683
- "returns": {
1684
- "user_list": [...],
1685
- "has_more": "是否还有更多"
1686
- }
1687
- }
1688
- ```
1689
-
1690
- ---
1691
-
1692
- ## 八、字段类型对照表 (Field Type Reference)
1693
-
1694
- ### 智能表格字段类型 (FieldType)
1695
-
1696
- | 类型值 | 说明 | 对应 property |
1697
- |--------|------|--------------|
1698
- | FIELD_TYPE_TEXT | 文本 | - |
1699
- | FIELD_TYPE_NUMBER | 数字 | property_number |
1700
- | FIELD_TYPE_CHECKBOX | 复选框 | property_checkbox |
1701
- | FIELD_TYPE_DATE_TIME | 日期 | property_date_time |
1702
- | FIELD_TYPE_IMAGE | 图片 | - |
1703
- | FIELD_TYPE_ATTACHMENT | 文件 | property_attachment |
1704
- | FIELD_TYPE_USER | 成员 | property_user |
1705
- | FIELD_TYPE_URL | 超链接 | property_url |
1706
- | FIELD_TYPE_SELECT | 多选 | property_select |
1707
- | FIELD_TYPE_SINGLE_SELECT | 单选 | property_single_select |
1708
- | FIELD_TYPE_CREATED_USER | 创建人 | - |
1709
- | FIELD_TYPE_MODIFIED_USER | 最后编辑人 | - |
1710
- | FIELD_TYPE_CREATED_TIME | 创建时间 | property_created_time |
1711
- | FIELD_TYPE_MODIFIED_TIME | 最后编辑时间 | property_modified_time |
1712
- | FIELD_TYPE_PROGRESS | 进度 | property_progress |
1713
- | FIELD_TYPE_PHONE_NUMBER | 电话 | - |
1714
- | FIELD_TYPE_EMAIL | 邮件 | - |
1715
- | FIELD_TYPE_REFERENCE | 关联 | property_reference |
1716
- | FIELD_TYPE_LOCATION | 地理位置 | property_location |
1717
- | FIELD_TYPE_CURRENCY | 货币 | property_currency |
1718
- | FIELD_TYPE_WWGROUP | 群 | property_ww_group |
1719
- | FIELD_TYPE_AUTONUMBER | 自动编号 | property_auto_number |
1720
- | FIELD_TYPE_PERCENTAGE | 百分数 | property_percentage |
1721
- | FIELD_TYPE_BARCODE | 条码 | property_barcode |
1722
-
1723
- ### 收集表问题类型 (reply_type)
1724
-
1725
- | 类型值 | 说明 |
1726
- |--------|------|
1727
- | 1 | 文本 |
1728
- | 2 | 单选 |
1729
- | 3 | 多选 |
1730
- | 5 | 位置 |
1731
- | 9 | 图片 |
1732
- | 10 | 文件 |
1733
- | 11 | 日期 |
1734
- | 14 | 时间 |
1735
- | 15 | 下拉列表 |
1736
- | 16 | 体温 |
1737
- | 17 | 签名 |
1738
- | 18 | 部门 |
1739
- | 19 | 成员 |
1740
- | 22 | 时长 |
1741
-
1742
- ---
1743
-
1744
- ## 九、使用示例 (Usage Examples)
1745
-
1746
- ### 示例 1:创建文档并添加协作者
1747
- ```json
1748
- {
1749
- "name": "wecom_doc",
1750
- "action": "create",
1751
- "parameters": {
1752
- "docName": "项目计划",
1753
- "docType": "doc",
1754
- "collaborators": [{"userid": "zhangsan"}, {"userid": "lisi"}],
1755
- "init_content": [
1756
- {"type": "text", "content": "项目计划文档"},
1757
- {"type": "text", "content": "一、项目目标"},
1758
- {"type": "text", "content": "二、项目进度"}
1759
- ]
1760
- }
1761
- }
1762
- ```
1763
-
1764
- ### 示例 2:批量更新文档内容
1765
- ```json
1766
- {
1767
- "name": "wecom_doc",
1768
- "action": "update_content",
1769
- "parameters": {
1770
- "docId": "DOCID123",
1771
- "requests": [
1772
- {"replace_text": {"text": "新标题", "ranges": [{"start_index": 0, "length": 5}]}},
1773
- {"insert_text": {"text": "新增段落", "location": {"index": 10}}},
1774
- {"insert_image": {"image_id": "https://...", "location": {"index": 20}}}
1775
- ]
1776
- }
1777
- }
1778
- ```
1779
-
1780
- ### 示例 3:智能表格添加记录
1781
- ```json
1782
- {
1783
- "name": "wecom_doc",
1784
- "action": "smartsheet_add_records",
1785
- "parameters": {
1786
- "docId": "DOCID456",
1787
- "sheetId": "SHEET789",
1788
- "records": [
1789
- {
1790
- "values": {
1791
- "姓名": [{"type": "text", "text": "张三"}],
1792
- "年龄": 25,
1793
- "部门": [{"type": "text", "text": "技术部"}]
1794
- }
1795
- }
1796
- ]
1797
- }
1798
- }
1799
- ```
1800
-
1801
- ### 示例 4:创建收集表
1802
- ```json
1803
- {
1804
- "name": "wecom_doc",
1805
- "action": "create_form",
1806
- "parameters": {
1807
- "formInfo": {
1808
- "form_title": "员工满意度调查",
1809
- "form_question": {
1810
- "items": [
1811
- {
1812
- "question_id": 1,
1813
- "title": "您的部门",
1814
- "pos": 1,
1815
- "reply_type": 15,
1816
- "must_reply": true,
1817
- "option_item": [
1818
- {"key": 1, "value": "技术部"},
1819
- {"key": 2, "value": "产品部"},
1820
- {"key": 3, "value": "市场部"}
1821
- ]
1822
- },
1823
- {
1824
- "question_id": 2,
1825
- "title": "满意度评分",
1826
- "pos": 2,
1827
- "reply_type": 2,
1828
- "must_reply": true,
1829
- "option_item": [
1830
- {"key": 1, "value": "非常满意"},
1831
- {"key": 2, "value": "满意"},
1832
- {"key": 3, "value": "一般"},
1833
- {"key": 4, "value": "不满意"}
1834
- ]
1835
- }
1836
- ]
1837
- }
1838
- }
1839
- }
1840
- }
1841
- ```
1842
-
1843
- ---
1844
-
1845
- ## 九、智能表格完整使用流程 (Smart Table Complete Workflow)
1846
-
1847
- ### 步骤 1:创建智能表格
1848
-
1849
- ```json
1850
- {
1851
- "name": "wecom_doc",
1852
- "action": "create",
1853
- "parameters": {
1854
- "docName": "员工信息表",
1855
- "docType": "smart_table"
1856
- }
1857
- }
1858
- ```
1859
-
1860
- **返回**:
1861
- ```json
1862
- {
1863
- "docId": "DOCID123",
1864
- "url": "https://doc.weixin.qq.com/smart_table/DOCID123",
1865
- "title": "员工信息表",
1866
- "resourceType": "10"
1867
- }
1868
- ```
1869
-
1870
- ---
1871
-
1872
- ### 步骤 2:添加自定义字段
1873
-
1874
- ```json
1875
- {
1876
- "name": "wecom_doc",
1877
- "action": "smartsheet_add_fields",
1878
- "parameters": {
1879
- "docId": "DOCID123",
1880
- "sheetId": "SHEET456",
1881
- "fields": [
1882
- {
1883
- "field_title": "姓名",
1884
- "field_type": "FIELD_TYPE_TEXT"
1885
- },
1886
- {
1887
- "field_title": "年龄",
1888
- "field_type": "FIELD_TYPE_NUMBER",
1889
- "property_number": {
1890
- "decimal_places": 0,
1891
- "use_separate": false
1892
- }
1893
- },
1894
- {
1895
- "field_title": "部门",
1896
- "field_type": "FIELD_TYPE_SELECT",
1897
- "property_select": {
1898
- "is_quick_add": true,
1899
- "options": [
1900
- {"text": "技术部", "style": 1},
1901
- {"text": "产品部", "style": 2},
1902
- {"text": "市场部", "style": 3}
1903
- ]
1904
- }
1905
- },
1906
- {
1907
- "field_title": "入职日期",
1908
- "field_type": "FIELD_TYPE_DATE_TIME",
1909
- "property_date_time": {
1910
- "format": "yyyy-mm-dd",
1911
- "auto_fill": false
1912
- }
1913
- },
1914
- {
1915
- "field_title": "工资",
1916
- "field_type": "FIELD_TYPE_NUMBER",
1917
- "property_number": {
1918
- "decimal_places": 2,
1919
- "use_separate": true
1920
- }
1921
- },
1922
- {
1923
- "field_title": "是否全职",
1924
- "field_type": "FIELD_TYPE_CHECKBOX",
1925
- "property_checkbox": {
1926
- "checked": true
1927
- }
1928
- }
1929
- ]
1930
- }
1931
- }
1932
- ```
1933
-
1934
- ---
1935
-
1936
- ### 步骤 3:添加记录
1937
-
1938
- ```json
1939
- {
1940
- "name": "wecom_doc",
1941
- "action": "smartsheet_add_records",
1942
- "parameters": {
1943
- "docId": "DOCID123",
1944
- "sheetId": "SHEET456",
1945
- "key_type": "CELL_VALUE_KEY_TYPE_FIELD_TITLE",
1946
- "records": [
1947
- {
1948
- "values": {
1949
- "姓名": [{"type": "text", "text": "张三"}],
1950
- "年龄": 25,
1951
- "部门": [{"text": "技术部", "style": 1}],
1952
- "入职日期": "1704067200000",
1953
- "工资": 15000.50,
1954
- "是否全职": [true]
1955
- }
1956
- }
1957
- ]
1958
- }
1959
- }
1960
- ```
1961
-
1962
- **⚠️ 关键格式说明**:
1963
- 1. **数字/日期类型直接写值** - `25`、`"1704067200000"`、`15000.50`
1964
- 2. **文本类型必须带 type** - `[{"type": "text", "text": "张三"}]`
1965
- 3. **选项类型(单选/多选)**:
1966
- - 新增选项:`[{"text": "技术部", "style": 1}]`(不需要 id)
1967
- - 使用已有选项:`[{"id": "选项 ID"}]`
1968
- 4. **日期类型是毫秒时间戳字符串** - `"1704067200000"`(不是数组)
1969
- 5. **values 的 key 必须与字段标题完全匹配**(如果 `key_type` 为 `CELL_VALUE_KEY_TYPE_FIELD_TITLE`)
1970
-
1971
- ---
1972
-
1973
- ### 步骤 4:查询记录
1974
-
1975
- ```json
1976
- {
1977
- "name": "wecom_doc",
1978
- "action": "smartsheet_get_records",
1979
- "parameters": {
1980
- "docId": "DOCID123",
1981
- "sheetId": "SHEET456",
1982
- "offset": 0,
1983
- "limit": 100
1984
- }
1985
- }
1986
- ```
1987
-
1988
- **返回**:
1989
- ```json
1990
- {
1991
- "errcode": 0,
1992
- "errmsg": "ok",
1993
- "total": 2,
1994
- "has_more": false,
1995
- "records": [
1996
- {
1997
- "record_id": "re9IqD",
1998
- "values": {
1999
- "姓名": [{"type": "text", "text": "张三"}],
2000
- "年龄": 25,
2001
- "部门": [{"id": "opt1", "text": "技术部", "style": 1}],
2002
- "入职日期": "1704067200000",
2003
- "工资": 15000.50,
2004
- "是否全职": [true]
2005
- }
2006
- },
2007
- {
2008
- "record_id": "rpS0P9",
2009
- "values": {
2010
- "姓名": [{"type": "text", "text": "李四"}],
2011
- "年龄": 28,
2012
- "部门": [{"id": "opt2", "text": "产品部", "style": 2}],
2013
- "入职日期": "1704153600000",
2014
- "工资": 18000.00,
2015
- "是否全职": [true]
2016
- }
2017
- }
2018
- ]
2019
- }
2020
- ```
2021
-
2022
- ---
2023
-
2024
- ### 步骤 5:更新记录
2025
-
2026
- ```json
2027
- {
2028
- "name": "wecom_doc",
2029
- "action": "smartsheet_update_records",
2030
- "parameters": {
2031
- "docId": "DOCID123",
2032
- "sheetId": "SHEET456",
2033
- "records": [
2034
- {
2035
- "record_id": "re9IqD",
2036
- "values": {
2037
- "姓名": [{"type": "text", "text": "张三丰"}],
2038
- "工资": 16000.00
2039
- }
2040
- }
2041
- ]
2042
- }
2043
- }
2044
- ```
2045
-
2046
- ---
2047
-
2048
- ### 步骤 6:删除记录
2049
-
2050
- ```json
2051
- {
2052
- "name": "wecom_doc",
2053
- "action": "smartsheet_del_records",
2054
- "parameters": {
2055
- "docId": "DOCID123",
2056
- "sheetId": "SHEET456",
2057
- "record_ids": ["rpS0P9"]
2058
- }
2059
- }
2060
- ```
2061
-
2062
- ---
2063
-
2064
- ## 十、注意事项 (Important Notes)
2065
-
2066
- ### 1. 批量操作限制
2067
- - **文档批量更新**:最多 30 个操作
2068
- - **表格批量更新**:最多 5 个操作
2069
- - **收集表答案查询**:最多 100 个答案 ID
2070
- - **智能表格字段操作**:单次可添加/更新/删除多个字段
2071
- - **智能表格记录操作**:单次添加/删除建议在 500 行内
2072
-
2073
- ### 2. 版本控制
2074
- - **更新文档内容时**:version 与最新版差值不能超过 100
2075
- - **建议**:每次更新前获取最新文档内容
2076
-
2077
- ### 3. 权限说明
2078
- - **自建应用**:需配置到"可调用应用"列表
2079
- - **第三方应用**:需具有"文档"权限
2080
- - **代开发自建应用**:需具有"文档"权限
2081
- - **只能操作**:该应用创建的文档
2082
-
2083
- ### 4. 智能表格字段类型匹配
2084
- - **添加/更新字段时**:field_type 必须与 property_* 属性匹配
2085
- - **更新字段时**:不能修改字段类型
2086
- - **一种字段类型对应一种字段属性**
2087
-
2088
- ### 5. 智能表格记录格式(⚠️ 重要)
2089
-
2090
- #### 5.1 字段值格式因类型而异
2091
- 不同字段类型的值格式不同:
2092
- - **数字/日期/货币/进度/百分数类型**:直接写值,不需要数组
2093
- - ✅ 正确:`25`、`"1704067200000"`、`15000.50`、`0.75`
2094
- - ❌ 错误:`[25]`、`["1704067200000"]`、`[15000.50]`、`[0.75]`
2095
- - **文本/成员/选项/复选框/电话/邮箱/链接/条码/地理位置类型**:必须用数组
2096
- - ✅ 正确:`[{"type": "text", "text": "内容"}]`、`[{"user_id": "zhangsan"}]`、`[true]`
2097
- - ❌ 错误:`{"type": "text", "text": "内容"}`、`{"user_id": "zhangsan"}`、`true`
2098
-
2099
- #### 5.2 各类型字段值格式详解
2100
-
2101
- | 字段类型 | 值格式 | 示例 |
2102
- |----------|--------|------|
2103
- | 文本 (FIELD_TYPE_TEXT) | object[] | `[{"type": "text", "text": "张三"}]` |
2104
- | 数字 (FIELD_TYPE_NUMBER) | number | `25`、`15000.50` |
2105
- | 日期 (FIELD_TYPE_DATE_TIME) | string | `"1704067200000"`(毫秒时间戳) |
2106
- | 复选框 (FIELD_TYPE_CHECKBOX) | boolean[] | `[true]`、`[false]` |
2107
- | 多选 (FIELD_TYPE_SELECT) | object[] | 新增:`[{"text": "选项", "style": 1}]`,已有:`[{"id": "选项 ID"}]` |
2108
- | 单选 (FIELD_TYPE_SINGLE_SELECT) | object[] | 新增:`[{"text": "选项", "style": 1}]`,已有:`[{"id": "选项 ID"}]` |
2109
- | 成员 (FIELD_TYPE_USER) | object[] | `[{"user_id": "zhangsan"}]` |
2110
- | 进度 (FIELD_TYPE_PROGRESS) | number | `0.75`(0-1 之间) |
2111
- | 电话 (FIELD_TYPE_PHONE_NUMBER) | string[] | `["13800138000"]` |
2112
- | 邮箱 (FIELD_TYPE_EMAIL) | string[] 或 object[] | `["test@example.com"]` 或 `[{"type": "url", "text": "test@example.com", "link": "mailto:test@example.com"}]` |
2113
- | 链接 (FIELD_TYPE_URL) | object[] | `[{"type": "url", "text": "显示文本", "link": "https://..."}]` |
2114
- | 货币 (FIELD_TYPE_CURRENCY) | number | `100.50` |
2115
- | 百分数 (FIELD_TYPE_PERCENTAGE) | number | `0.75`(表示 75%) |
2116
- | 条码 (FIELD_TYPE_BARCODE) | string[] | `["6901234567890"]` |
2117
- | 地理位置 (FIELD_TYPE_LOCATION) | object[] | `[{"id": "地点 ID", "latitude": "23.10647", "longitude": "113.32446", "title": "广州塔", "source_type": 1}]` |
2118
-
2119
- #### 5.3 文本类型值的 type 字段
2120
- - `text` - 普通文本内容
2121
- - `url` - 链接文本(需要同时提供 `link` 字段)
2122
-
2123
- #### 5.4 选项类型(单选/多选)的填写规则
2124
- - **新增选项**:`{"text": "选项内容", "style": 颜色编号 (1-27)}`
2125
- - **使用已有选项**:`{"id": "已有选项 ID"}`
2126
- - **系统会优先匹配已有选项**,如果匹配不到则新增选项
2127
-
2128
- #### 5.5 不能添加/更新的字段类型
2129
- 以下字段类型由系统自动填充,不能通过接口添加或更新:
2130
- - 创建时间 (FIELD_TYPE_CREATED_TIME)
2131
- - 最后编辑时间 (FIELD_TYPE_MODIFIED_TIME)
2132
- - 创建人 (FIELD_TYPE_CREATED_USER)
2133
- - 最后编辑人 (FIELD_TYPE_MODIFIED_USER)
2134
-
2135
- ### 6. 智能表格限制
2136
- - **单表最多 100000 行记录**
2137
- - **单表最多 1500000 个单元格**
2138
- - **单表最多 150 个字段**
2139
- - **单表最多 200 个视图**
2140
- - **单次添加/更新/删除记录建议在 500 行内**
2141
-
2142
- ### 7. key_type 参数
2143
- - **CELL_VALUE_KEY_TYPE_FIELD_TITLE**(默认)- 使用字段标题作为 values 的 key
2144
- - **CELL_VALUE_KEY_TYPE_FIELD_ID** - 使用字段 ID 作为 values 的 key
2145
- - **添加记录和查询记录时都要注意保持一致**
2146
-
2147
- ### 8. 常见错误排查
2148
-
2149
- | 问题 | 原因 | 解决方案 |
2150
- |------|------|----------|
2151
- | 数据都填充到一列 | values 的 key 不是字段标题或字段 ID | 检查 key_type 设置,确保 key 与字段标题或字段 ID 完全匹配(包括空格和大小写) |
2152
- | 多余的行 | records 数组格式错误 | 确保 records 是数组,每个记录是独立对象 `[{values: {...}}, {values: {...}}]` |
2153
- | 无法添加自定义字段 | field_type 或 property 不匹配 | 检查字段类型与属性的对应关系,见字段类型对照表 |
2154
- | 无法修改默认字段 | 尝试修改系统字段 | 创建时间、最后编辑时间、创建人、最后编辑人不能通过接口修改 |
2155
- | 添加记录失败 | 值格式错误 | 数字/日期类型直接写值,文本/成员等类型用数组,插件会自动规范化 |
2156
- | 日期字段错误 | 使用了秒级时间戳或日期字符串 | 使用毫秒级时间戳字符串 `"1704067200000"` 而不是 `1704067200000` 或 `"2024-01-01"` |
2157
- | 选项字段错误 | 格式错误或缺少必要字段 | 新增选项:`[{"text": "选项", "style": 1}]`,使用已有:`[{"id": "选项 ID"}]` |
2158
- | 单选字段添加失败 | 使用了错误的格式 | 单选和多选格式相同,都是 Option 对象数组 |
2159
- | 文本字段添加失败 | 缺少 type 字段 | 文本类型必须是 `[{"type": "text", "text": "内容"}]` 格式 |
2160
- | 链接字段添加失败 | 格式错误 | 链接类型必须是 `[{"type": "url", "text": "文本", "link": "URL"}]` 格式 |
2161
-
2162
- ---
2163
-
2164
- **文档版本**: 2026-03-18 v2
2165
- **适用版本**: OpenClaw WeChat Plugin v2.3.16+
2166
- **官方文档**: 企业微信开放平台 - 文档 API
2167
-
2168
- ---
2169
-
2170
- ## 修正记录 (Revision History)
2171
-
2172
- ### 2026-03-18 v2 - 智能表格记录格式修正
2173
-
2174
- #### 修复的问题:
2175
-
2176
- 1. **选项字段格式错误** ❌ → ✅
2177
- - **问题**:单选/多选字段使用了错误的格式 `[{"id": "opt1", "text": "选项", "style": 1}]`
2178
- - **原因**:混淆了新增选项和使用已有选项的格式
2179
- - **修正**:
2180
- - 新增选项:`[{"text": "选项内容", "style": 颜色编号}]`(不需要 id)
2181
- - 使用已有选项:`[{"id": "已有选项 ID"}]`(只需要 id)
2182
- - **官方文档依据**:doc2.txt 第 1747-1757 行 Option 说明
2183
-
2184
- 2. **日期字段格式说明不清晰** ❌ → ✅
2185
- - **问题**:没有强调必须是毫秒时间戳字符串
2186
- - **修正**:明确指出使用 `"1704067200000"` 格式(字符串),不是数字 `1704067200000`
2187
- - **官方文档依据**:doc2.txt 第 1679 行
2188
-
2189
- 3. **添加完整的值格式对照表** ❌ → ✅
2190
- - **问题**:缺少 15 种字段类型的完整值格式说明
2191
- - **修正**:添加详细的表格,包含每种类型的正确格式和示例
2192
-
2193
- 4. **常见错误排查不完善** ❌ → ✅
2194
- - **问题**:缺少单选字段、文本字段、链接字段等错误排查
2195
- - **修正**:添加 10 种常见错误及解决方案
2196
-
2197
- 5. **使用示例优化** ❌ → ✅
2198
- - **问题**:示例中的选项字段格式不正确
2199
- - **修正**:更新所有示例,使用正确的选项格式
2200
-
2201
- #### 新增内容:
2202
-
2203
- 1. **15 种字段类型的值格式对照表** - 包含所有支持的字段的值格式
2204
- 2. **文本类型 type 字段说明** - text 和 url 的区别
2205
- 3. **选项类型填写规则** - 新增选项 vs 使用已有选项
2206
- 4. **10 种常见错误排查** - 覆盖所有常见问题
2207
- 5. **完整使用流程示例** - 6 步完整示例,格式完全正确
2208
-
2209
- #### 关键修正点:
2210
-
2211
- | 字段类型 | 原格式(错误) | 新格式(正确) |
2212
- |----------|---------------|---------------|
2213
- | 单选/多选(新增) | `[{"id": "opt1", "text": "选项", "style": 1}]` | `[{"text": "选项", "style": 1}]` |
2214
- | 单选/多选(已有) | `[{"text": "选项"}]` | `[{"id": "选项 ID"}]` |
2215
- | 日期 | `[1704067200000]` 或 `["2024-01-01"]` | `"1704067200000"` |
2216
- | 文本 | `{"type": "text", "text": "内容"}` | `[{"type": "text", "text": "内容"}]` |
2217
-
2218
- ---
2219
-
2220
- ### 2026-03-19 v2 - 智能表格记录格式修正
2221
-
2222
- #### 修复的问题:
2223
-
2224
- 1. **数字/日期类型值格式错误** ❌ → ✅
2225
- - **问题**:文档示例中数字和日期类型使用了数组格式
2226
- - **原因**:实际 API 测试表明数字和日期类型应该直接写值
2227
- - **修正**:明确字段值格式因类型而异
2228
- - 数字/货币/进度/百分数:直接写值 `25`、`15000.50`、`0.75`
2229
- - 日期:直接写毫秒时间戳字符串 `"1704067200000"`
2230
- - 文本/成员/选项/复选框等:使用数组 `[{"type": "text", "text": "内容"}]`、`[{"user_id": "xxx"}]`
2231
- - **插件自动规范化**:如果传入格式不正确,插件会自动转换
2232
-
2233
- ---
2234
-
2235
- ### 2026-03-18 v1 - 初始重大修正
2236
-
2237
- #### 修复的问题:
2238
-
2239
- 1. **添加记录数据格式错误** ❌ → ✅
2240
- - **问题**:数据格式不正确,导致所有数据填充到一列
2241
- - **原因**:没有明确说明不同字段类型的值格式差异
2242
- - **修正**:明确字段值格式因类型而异
2243
- - 文本:`[{"type": "text", "text": "内容"}]`
2244
- - 数字:`25`(直接值,不是数组)
2245
- - 日期:`"1704067200000"`(毫秒时间戳字符串,不是数组)
2246
- - 选项:`[{"id": "opt1", "text": "选项", "style": 1}]`
2247
-
2248
- 2. **缺少字段类型与值类型对照表** ❌ → ✅
2249
- - **问题**:没有明确说明每种字段类型对应的值格式
2250
- - **修正**:添加完整的字段类型与值类型对照表
2251
- - **包含**:文本、数字、日期、多选、单选、成员、复选框、进度、电话、邮箱、链接、货币、百分数、条码、地理位置
2252
-
2253
- 3. **添加字段属性不完整** ❌ → ✅
2254
- - **问题**:缺少各种字段类型的属性说明
2255
- - **修正**:添加所有 22 种字段类型的属性说明
2256
- - **包含**:property_number、property_checkbox、property_date_time 等
2257
-
2258
- 4. **更新记录说明不清晰** ❌ → ✅
2259
- - **问题**:没有明确说明不能更新的字段类型
2260
- - **修正**:明确指出创建时间、最后编辑时间、创建人、最后编辑人不能更新
2261
-
2262
- 5. **查询记录返回格式不明确** ❌ → ✅
2263
- - **问题**:没有说明返回的 values 格式
2264
- - **修正**:添加完整的返回示例,展示正确的 values 格式
2265
-
2266
- 6. **缺少完整使用流程** ❌ → ✅
2267
- - **问题**:没有从创建到使用的完整示例
2268
- - **修正**:添加 6 步完整使用流程(创建→添加字段→添加记录→查询→更新→删除)
2269
-
2270
- 7. **常见错误排查缺失** ❌ → ✅
2271
- - **问题**:遇到问题时无法快速定位
2272
- - **修正**:添加常见错误排查表格,包含问题、原因、解决方案
2273
-
2274
- #### 新增内容:
2275
-
2276
- 1. **智能表格完整使用流程** - 6 步完整示例
2277
- 2. **字段类型与值类型对照表** - 15 种字段类型的值格式
2278
- 3. **字段类型与属性对照表** - 22 种字段类型的属性说明
2279
- 4. **过滤操作符对照表** - 10 种操作符说明
2280
- 5. **常见错误排查表** - 7 种常见问题及解决方案
2281
- 6. **key_type 参数说明** - 明确两种 key 类型的区别
2282
-
2283
- #### 优化内容:
2284
-
2285
- 1. **参数说明标准化** - 所有参数都标注了必填/可选、类型、说明
2286
- 2. **使用示例丰富化** - 每个接口都有多个使用示例
2287
- 3. **注意事项分类化** - 按主题分类,便于查找
2288
- 4. **返回值完整化** - 所有接口都有完整的返回值说明