ylib-wecom-openclaw-plugin 2026.4.29

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 (180) hide show
  1. package/README.md +596 -0
  2. package/dist/index.d.ts +10 -0
  3. package/dist/index.js +99 -0
  4. package/dist/src/accounts.d.ts +57 -0
  5. package/dist/src/accounts.js +247 -0
  6. package/dist/src/agent/api-client.d.ts +95 -0
  7. package/dist/src/agent/api-client.js +425 -0
  8. package/dist/src/agent/handler.d.ts +64 -0
  9. package/dist/src/agent/handler.js +731 -0
  10. package/dist/src/agent/index.d.ts +5 -0
  11. package/dist/src/agent/index.js +21 -0
  12. package/dist/src/agent/webhook.d.ts +25 -0
  13. package/dist/src/agent/webhook.js +294 -0
  14. package/dist/src/agent/xml.d.ts +21 -0
  15. package/dist/src/agent/xml.js +43 -0
  16. package/dist/src/channel.d.ts +5 -0
  17. package/dist/src/channel.js +815 -0
  18. package/dist/src/chat-queue.d.ts +31 -0
  19. package/dist/src/chat-queue.js +53 -0
  20. package/dist/src/config-schema.d.ts +587 -0
  21. package/dist/src/config-schema.js +146 -0
  22. package/dist/src/const.d.ts +128 -0
  23. package/dist/src/const.js +168 -0
  24. package/dist/src/dm-policy.d.ts +29 -0
  25. package/dist/src/dm-policy.js +146 -0
  26. package/dist/src/dynamic-agent.d.ts +37 -0
  27. package/dist/src/dynamic-agent.js +67 -0
  28. package/dist/src/dynamic-routing.d.ts +65 -0
  29. package/dist/src/dynamic-routing.js +62 -0
  30. package/dist/src/endpoint-dispatch.d.ts +54 -0
  31. package/dist/src/endpoint-dispatch.js +967 -0
  32. package/dist/src/endpoint-event-adapter.d.ts +15 -0
  33. package/dist/src/endpoint-event-adapter.js +427 -0
  34. package/dist/src/group-policy.d.ts +30 -0
  35. package/dist/src/group-policy.js +126 -0
  36. package/dist/src/http.d.ts +27 -0
  37. package/dist/src/http.js +168 -0
  38. package/dist/src/im-runtime-telemetry.d.ts +25 -0
  39. package/dist/src/im-runtime-telemetry.js +68 -0
  40. package/dist/src/interface.d.ts +192 -0
  41. package/dist/src/interface.js +5 -0
  42. package/dist/src/markdown-chunk.d.ts +1 -0
  43. package/dist/src/markdown-chunk.js +396 -0
  44. package/dist/src/mcp/index.d.ts +6 -0
  45. package/dist/src/mcp/index.js +28 -0
  46. package/dist/src/mcp/interceptors/biz-error.d.ts +11 -0
  47. package/dist/src/mcp/interceptors/biz-error.js +73 -0
  48. package/dist/src/mcp/interceptors/doc-auth-error.d.ts +10 -0
  49. package/dist/src/mcp/interceptors/doc-auth-error.js +235 -0
  50. package/dist/src/mcp/interceptors/index.d.ts +35 -0
  51. package/dist/src/mcp/interceptors/index.js +143 -0
  52. package/dist/src/mcp/interceptors/msg-media.d.ts +11 -0
  53. package/dist/src/mcp/interceptors/msg-media.js +201 -0
  54. package/dist/src/mcp/interceptors/smartpage-create.d.ts +30 -0
  55. package/dist/src/mcp/interceptors/smartpage-create.js +252 -0
  56. package/dist/src/mcp/interceptors/smartpage-export.d.ts +17 -0
  57. package/dist/src/mcp/interceptors/smartpage-export.js +135 -0
  58. package/dist/src/mcp/interceptors/smartsheet-upload.d.ts +22 -0
  59. package/dist/src/mcp/interceptors/smartsheet-upload.js +388 -0
  60. package/dist/src/mcp/interceptors/types.d.ts +64 -0
  61. package/dist/src/mcp/interceptors/types.js +8 -0
  62. package/dist/src/mcp/schema.d.ts +11 -0
  63. package/dist/src/mcp/schema.js +115 -0
  64. package/dist/src/mcp/tool.d.ts +63 -0
  65. package/dist/src/mcp/tool.js +318 -0
  66. package/dist/src/mcp/transport.d.ts +94 -0
  67. package/dist/src/mcp/transport.js +702 -0
  68. package/dist/src/media-handler.d.ts +55 -0
  69. package/dist/src/media-handler.js +306 -0
  70. package/dist/src/media-uploader.d.ts +142 -0
  71. package/dist/src/media-uploader.js +446 -0
  72. package/dist/src/message-parser.d.ts +104 -0
  73. package/dist/src/message-parser.js +232 -0
  74. package/dist/src/message-sender.d.ts +54 -0
  75. package/dist/src/message-sender.js +210 -0
  76. package/dist/src/monitor.d.ts +69 -0
  77. package/dist/src/monitor.js +1846 -0
  78. package/dist/src/onboarding.d.ts +8 -0
  79. package/dist/src/onboarding.js +248 -0
  80. package/dist/src/openclaw-compat.d.ts +148 -0
  81. package/dist/src/openclaw-compat.js +839 -0
  82. package/dist/src/proactive-markdown-send.d.ts +14 -0
  83. package/dist/src/proactive-markdown-send.js +205 -0
  84. package/dist/src/reqid-store.d.ts +23 -0
  85. package/dist/src/reqid-store.js +136 -0
  86. package/dist/src/runtime.d.ts +2 -0
  87. package/dist/src/runtime.js +7 -0
  88. package/dist/src/shared/command-auth.d.ts +23 -0
  89. package/dist/src/shared/command-auth.js +112 -0
  90. package/dist/src/shared/xml-parser.d.ts +46 -0
  91. package/dist/src/shared/xml-parser.js +228 -0
  92. package/dist/src/state-dir-resolve.d.ts +2 -0
  93. package/dist/src/state-dir-resolve.js +33 -0
  94. package/dist/src/state-manager.d.ts +115 -0
  95. package/dist/src/state-manager.js +413 -0
  96. package/dist/src/target.d.ts +35 -0
  97. package/dist/src/target.js +71 -0
  98. package/dist/src/template-card-manager.d.ts +55 -0
  99. package/dist/src/template-card-manager.js +316 -0
  100. package/dist/src/template-card-parser.d.ts +37 -0
  101. package/dist/src/template-card-parser.js +672 -0
  102. package/dist/src/timeout.d.ts +20 -0
  103. package/dist/src/timeout.js +57 -0
  104. package/dist/src/types/account.d.ts +29 -0
  105. package/dist/src/types/account.js +5 -0
  106. package/dist/src/types/config.d.ts +98 -0
  107. package/dist/src/types/config.js +8 -0
  108. package/dist/src/types/constants.d.ts +42 -0
  109. package/dist/src/types/constants.js +45 -0
  110. package/dist/src/types/index.d.ts +7 -0
  111. package/dist/src/types/index.js +17 -0
  112. package/dist/src/types/message.d.ts +238 -0
  113. package/dist/src/types/message.js +6 -0
  114. package/dist/src/utils.d.ts +148 -0
  115. package/dist/src/utils.js +92 -0
  116. package/dist/src/version.d.ts +2 -0
  117. package/dist/src/version.js +28 -0
  118. package/dist/src/webhook/command-auth.d.ts +47 -0
  119. package/dist/src/webhook/command-auth.js +137 -0
  120. package/dist/src/webhook/gateway.d.ts +36 -0
  121. package/dist/src/webhook/gateway.js +297 -0
  122. package/dist/src/webhook/handler.d.ts +19 -0
  123. package/dist/src/webhook/handler.js +481 -0
  124. package/dist/src/webhook/helpers.d.ts +157 -0
  125. package/dist/src/webhook/helpers.js +936 -0
  126. package/dist/src/webhook/http.d.ts +27 -0
  127. package/dist/src/webhook/http.js +168 -0
  128. package/dist/src/webhook/index.d.ts +11 -0
  129. package/dist/src/webhook/index.js +43 -0
  130. package/dist/src/webhook/media.d.ts +30 -0
  131. package/dist/src/webhook/media.js +152 -0
  132. package/dist/src/webhook/monitor.d.ts +59 -0
  133. package/dist/src/webhook/monitor.js +1672 -0
  134. package/dist/src/webhook/state.d.ts +220 -0
  135. package/dist/src/webhook/state.js +568 -0
  136. package/dist/src/webhook/target.d.ts +41 -0
  137. package/dist/src/webhook/target.js +165 -0
  138. package/dist/src/webhook/types.d.ts +348 -0
  139. package/dist/src/webhook/types.js +36 -0
  140. package/dist/src/webhook/video-frame.d.ts +13 -0
  141. package/dist/src/webhook/video-frame.js +108 -0
  142. package/openclaw.plugin.json +19 -0
  143. package/package.json +96 -0
  144. package/schema.json +534 -0
  145. package/scripts/generate-schema.mjs +33 -0
  146. package/skills/wecom-contact/SKILL.md +162 -0
  147. package/skills/wecom-doc/SKILL.md +162 -0
  148. package/skills/wecom-doc/references/create-doc.md +56 -0
  149. package/skills/wecom-doc/references/edit-doc-content.md +68 -0
  150. package/skills/wecom-doc/references/get-doc-content.md +88 -0
  151. package/skills/wecom-doc/references/smartpage-create.md +125 -0
  152. package/skills/wecom-doc/references/smartpage-export.md +160 -0
  153. package/skills/wecom-meeting/SKILL.md +441 -0
  154. package/skills/wecom-meeting/references/example-full.md +30 -0
  155. package/skills/wecom-meeting/references/example-reminder.md +46 -0
  156. package/skills/wecom-meeting/references/example-security.md +22 -0
  157. package/skills/wecom-meeting/references/response-get-meeting-info.md +148 -0
  158. package/skills/wecom-msg/SKILL.md +157 -0
  159. package/skills/wecom-msg/references/api-get-messages.md +93 -0
  160. package/skills/wecom-msg/references/api-get-msg-chat-list.md +58 -0
  161. package/skills/wecom-msg/references/api-get-msg-media.md +44 -0
  162. package/skills/wecom-msg/references/api-send-message.md +39 -0
  163. package/skills/wecom-preflight/SKILL.md +141 -0
  164. package/skills/wecom-schedule/SKILL.md +161 -0
  165. package/skills/wecom-schedule/references/api-check-availability.md +56 -0
  166. package/skills/wecom-schedule/references/api-create-schedule.md +38 -0
  167. package/skills/wecom-schedule/references/api-get-schedule-detail.md +81 -0
  168. package/skills/wecom-schedule/references/api-update-schedule.md +32 -0
  169. package/skills/wecom-schedule/references/ref-reminders.md +24 -0
  170. package/skills/wecom-send-media/SKILL.md +68 -0
  171. package/skills/wecom-send-template-card/SKILL.md +157 -0
  172. package/skills/wecom-send-template-card/references/api-template-card-types.md +358 -0
  173. package/skills/wecom-smartsheet/SKILL.md +164 -0
  174. package/skills/wecom-smartsheet/references/smartsheet-cell-value-formats.md +163 -0
  175. package/skills/wecom-smartsheet/references/smartsheet-field-types.md +44 -0
  176. package/skills/wecom-smartsheet/references/smartsheet-get-records.md +96 -0
  177. package/skills/wecom-smartsheet/references/webhook-examples.md +185 -0
  178. package/skills/wecom-smartsheet/references/webhook-fallback.md +184 -0
  179. package/skills/wecom-todo/SKILL.md +392 -0
  180. package/skills/wecom-todo/examples/workflows.md +163 -0
@@ -0,0 +1,164 @@
1
+ ---
2
+ name: wecom-smartsheet
3
+ description: 企业微信智能表格管理技能。提供智能表格的结构管理(子表、字段)和数据管理(记录增删改查)。适用场景:(1) 管理智能表格子表和字段/列 (2) 查询、添加、更新、删除智能表格记录。支持通过 docid 或文档 URL 定位文档。
4
+ ---
5
+
6
+ # 企业微信智能表格管理
7
+
8
+ > `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
9
+
10
+ > ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
11
+
12
+ 管理企业微信智能表格的结构(子表、字段/列)和数据(记录)。所有接口支持通过 `docid` 或 `url` 二选一定位文档。
13
+
14
+ ## 调用方式
15
+
16
+ 通过 `wecom_mcp` tool 调用,品类名为 `doc`:
17
+
18
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc <tool_name> '<json_params>'` 调用指定技能
19
+
20
+ ## 返回格式说明
21
+
22
+ 所有接口返回 JSON 对象,包含以下公共字段:
23
+
24
+ | 字段 | 类型 | 说明 |
25
+ |------|------|------|
26
+ | `errcode` | integer | 返回码,`0` 表示成功,非 `0` 表示失败 |
27
+ | `errmsg` | string | 错误信息,成功时为 `"ok"` |
28
+
29
+ 当 `errcode` 不为 `0` 时,说明接口调用失败,可重试 1 次;若仍失败,将 `errcode` 和 `errmsg` 展示给用户。
30
+
31
+ ---
32
+
33
+ ## 一、智能表格结构管理
34
+
35
+ ### smartsheet_get_sheet
36
+
37
+ 查询文档中所有子表信息,返回 sheet_id、title、类型等。
38
+
39
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_sheet '{"docid": "DOCID"}'`
40
+
41
+ ### smartsheet_add_sheet
42
+
43
+ 添加空子表。新子表不含视图、记录和字段,需通过其他接口补充。
44
+
45
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_add_sheet '{"docid": "DOCID", "properties": {"title": "新子表"}}'`
46
+
47
+ **注意**:新建智能表格文档默认已含一个子表,仅需多个子表时调用。
48
+
49
+ ### smartsheet_update_sheet
50
+
51
+ 修改子表标题。需提供 sheet_id 和新 title。
52
+
53
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_update_sheet '{"docid": "DOCID", "properties": {"sheet_id": "SHEET_ID", "title": "新子表"}}'`
54
+
55
+ ### smartsheet_delete_sheet
56
+
57
+ 永久删除子表,**操作不可逆**。
58
+
59
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_delete_sheet '{"docid": "DOCID", "sheet_id": "SHEETID"}'`
60
+
61
+ ### smartsheet_get_fields
62
+
63
+ 查询子表的所有字段信息,返回 field_id、field_title、field_type。
64
+
65
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_fields '{"docid": "DOCID", "sheet_id": "SHEETID"}'`
66
+
67
+ ### smartsheet_add_fields
68
+
69
+ 向子表添加一个或多个字段。单个子表最多 150 个字段。
70
+
71
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_add_fields '{"docid": "DOCID", "sheet_id": "SHEETID", "fields": [{"field_title": "任务名称", "field_type": "FIELD_TYPE_TEXT"}]}'`
72
+
73
+ 在添加字段前,请先参阅所有字段类型和定义 [字段类型参考](references/smartsheet-field-types.md)。
74
+
75
+ ### smartsheet_update_fields
76
+
77
+ 更新字段标题。**只能改名,不能改类型**(field_type 必须传原始类型)。field_title 不能更新为原值。
78
+
79
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_update_fields '{"docid": "DOCID", "sheet_id": "SHEETID", "fields": [{"field_id": "FIELDID", "field_title": "新标题", "field_type": "FIELD_TYPE_TEXT"}]}'`
80
+
81
+ ### smartsheet_delete_fields
82
+
83
+ 删除一列或多列字段,**操作不可逆**。field_id 可通过 `smartsheet_get_fields` 获取。
84
+
85
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_delete_fields '{"docid": "DOCID", "sheet_id": "SHEETID", "field_ids": ["FIELDID"]}'`
86
+
87
+ ---
88
+
89
+ ## 二、智能表格数据管理
90
+
91
+ ### smartsheet_get_records
92
+
93
+ 查询子表全部记录。
94
+
95
+ - 通过 sheetid:使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_records '{"docid": "DOCID", "sheet_id": "SHEETID"}'`
96
+ - 或通过 URL:使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_records '{"url": "https://doc.weixin.qq.com/smartsheet/xxx", "sheet_id": "SHEETID"}'`
97
+
98
+ 参见 [API 详情](references/smartsheet-get-records.md)。
99
+
100
+ ### smartsheet_add_records
101
+
102
+ 添加一行或多行记录,单次建议 500 行内。
103
+
104
+ **调用前**必须先了解目标表的字段类型(通过 `smartsheet_get_fields`),并查看[单元格值格式参考](references/smartsheet-cell-value-formats.md),了解做法后再实施。
105
+
106
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_add_records '{"docid": "DOCID", "sheet_id": "SHEETID", "records": [{"values": {"任务名称": [{"type": "text", "text": "完成需求文档"}], "优先级": [{"text": "高"}]}}]}'`
107
+
108
+ 各字段类型的值格式参见 [单元格值格式参考](references/smartsheet-cell-value-formats.md)。
109
+
110
+ > ⚠️ **图片(IMAGE)/ 文件(ATTACHMENT)字段**:**必须且只能**直接在 cell value 中传入本地路径(`image_path` / `file_path`),格式见下方示例。**严禁**调用 `upload_doc_image`、`upload_doc_file` 或任何上传接口,**严禁**进行 base64 编码——无论文件大小、无论 API 返回何种错误,均不得绕过此规则。若 `image_path` / `file_path` 方式返回错误,应直接将错误码和错误信息告知用户,**不得**尝试其他上传方式。
111
+ >
112
+ > 图片字段示例:`"封面": [{"image_path": "/path/to/img.png", "title": "图片标题"}]`
113
+ > 文件字段示例:`"文件": [{"file_path": "/path/to/file.pdf"}]`
114
+
115
+ > ⚠️ 若返回 `errcode: 851003` 或 `errmsg` 包含 `no authority`(通常是企业可见范围 > 10 人的规模限制),切换到 Webhook 兜底方案,详见 [webhook-fallback.md](references/webhook-fallback.md)。
116
+
117
+ ### smartsheet_update_records
118
+
119
+ **调用前**必须先了解目标表的字段类型(通过 `smartsheet_get_fields`),并查看[单元格值格式参考](references/smartsheet-cell-value-formats.md),了解做法后再实施。
120
+
121
+ 更新一行或多行记录,单次建议在 500 行内。需提供 record_id(通过 `smartsheet_get_records` 获取)。支持通过 `key_type` 指定 values 的 key 使用字段标题或字段 ID:
122
+
123
+ - `CELL_VALUE_KEY_TYPE_FIELD_TITLE`:key 为字段标题
124
+ - `CELL_VALUE_KEY_TYPE_FIELD_ID`:key 为字段 ID
125
+
126
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_update_records '{"docid": "DOCID", "sheet_id": "SHEETID", "key_type": "CELL_VALUE_KEY_TYPE_FIELD_ID", "records": [{"record_id": "RECORDID", "values": {"FIELDID": [{"type": "text", "text": "更新后的内容"}]}}]}'`
127
+
128
+ **注意**:创建时间、最后编辑时间、创建人、最后编辑人字段不可更新。
129
+
130
+ > ⚠️ **图片(IMAGE)/ 文件(ATTACHMENT)字段**:**必须且只能**直接在 cell value 中传入本地路径(`image_path` / `file_path`),格式见下方示例。**严禁**调用 `upload_doc_image`、`upload_doc_file` 或任何上传接口,**严禁**进行 base64 编码——无论文件大小、无论 API 返回何种错误,均不得绕过此规则。若 `image_path` / `file_path` 方式返回错误,应直接将错误码和错误信息告知用户,**不得**尝试其他上传方式。
131
+ >
132
+ > 图片字段示例:`"封面": [{"image_path": "/path/to/img.png", "title": "图片标题"}]`
133
+ > 文件字段示例:`"文件": [{"file_path": "/path/to/file.pdf"}]`
134
+
135
+ > ⚠️ 若返回 `errcode: 851003` 或 `errmsg` 包含 `no authority`(通常是企业可见范围 > 10 人的规模限制),切换到 Webhook 兜底方案,详见 [webhook-fallback.md](references/webhook-fallback.md)。注意 Webhook 只能更新通过 Webhook 写入的记录,人工创建的记录无法更新。
136
+
137
+ ### smartsheet_delete_records
138
+
139
+ 删除一行或多行记录,单次必须在 500 行内。**操作不可逆**。record_id 通过 `smartsheet_get_records` 获取。
140
+
141
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_delete_records '{"docid": "DOCID", "sheet_id": "SHEETID", "record_ids": ["RECORDID1", "RECORDID2"]}'`
142
+
143
+ ---
144
+
145
+ ## 典型工作流
146
+
147
+ ### 智能表格结构操作
148
+
149
+ 1. **了解表结构** →
150
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_sheet` → 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_fields`
151
+ 2. **创建表结构** → `smartsheet_add_sheet` 添加子表 → `smartsheet_add_fields` 定义列
152
+ 3. **修改表结构** → `smartsheet_update_fields` 改列名 / `smartsheet_delete_fields` 删列
153
+
154
+ ### 智能表格数据操作
155
+
156
+ 1. **读取数据** → 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_records '{"docid":"DOCID","sheet_id":"SHEETID"}'`
157
+ 2. **写入数据** → 先 `smartsheet_get_fields` 了解列类型 → 若涉及成员(USER)字段,先通过 `wecom-contact` 的 `get_userlist` 查找人员 userid → `smartsheet_add_records` 写入
158
+ 3. **更新数据** → 先 `smartsheet_get_records` 获取 record_id → 若涉及成员(USER)字段,先通过 `wecom-contact` 的 `get_userlist` 查找人员 userid → `smartsheet_update_records` 更新
159
+ 4. **写入失败 fallback** → 第 2/3 步返回 `errcode: 851003` / `no authority`(通常是企业可见范围 > 10 人的规模限制)时 → 请用户临时提供目标表的 Webhook 地址 + schema 示例 JSON(不保存到本地)→ 按 [webhook-fallback.md](references/webhook-fallback.md) 构造请求体发送
160
+ 5. 若涉及**图片(IMAGE)或文件(ATTACHMENT)**字段,**必须且只能**直接在 cell value 中传入本地路径(`image_path` / `file_path`)。**严禁**调用 `upload_doc_image`、`upload_doc_file` 或任何上传接口,**严禁**进行 base64 编码——无论文件大小、无论 API 返回何种错误,均不得绕过此规则。若返回错误,直接将错误码和错误信息告知用户,不得尝试其他上传方式。传入格式参考 [单元格值格式参考](references/smartsheet-cell-value-formats.md)。
161
+ 6. **删除数据** → 先 `smartsheet_get_records` 确认 record_id → `smartsheet_delete_records` 删除
162
+
163
+ > **注意**:成员(USER)类型字段需要填写 `user_id`,不能直接使用姓名。必须先通过 `wecom-contact-lookup` 技能的 `get_userlist` 接口按姓名查找到对应的 `userid` 后再使用。
164
+ > **注意**:图片(IMAGE)或文件(ATTACHMENT)字段**必须且只能**直接在 cell value 中传入本地路径(`image_path` / `file_path`)。**严禁**调用 `upload_doc_image`、`upload_doc_file` 或任何上传接口,**严禁**进行 base64 编码——无论文件大小、无论 API 返回何种错误,均不得绕过此规则。若返回错误,直接将错误码和错误信息告知用户,不得尝试其他上传方式。格式参考 [单元格值格式参考](references/smartsheet-cell-value-formats.md)。
@@ -0,0 +1,163 @@
1
+ # 单元格值格式参考
2
+
3
+ `smartsheet_add_records` 仅支持**字段标题**作为key。
4
+ `smartsheet_update_records` 支持通过 `key_type` 参数指定使用字段标题(`CELL_VALUE_KEY_TYPE_FIELD_TITLE`)或字段 ID(`CELL_VALUE_KEY_TYPE_FIELD_ID`)。
5
+
6
+ ## 各字段类型的值格式
7
+
8
+ ### 1. 文本 (FIELD_TYPE_TEXT)
9
+
10
+ **必须**使用数组格式,外层方括号不可省略:
11
+
12
+ ```json
13
+ "字段标题": [{"type": "text", "text": "内容"}]
14
+ ```
15
+
16
+ ### 2. 数字 (NUMBER) / 货币 (CURRENCY) / 百分比 (PERCENTAGE) / 进度 (PROGRESS)
17
+
18
+ 直接传数字:
19
+
20
+ ```json
21
+ "金额": 100,
22
+ "完成率": 0.6,
23
+ "进度": 80
24
+ ```
25
+
26
+ ### 3. 复选框 (CHECKBOX)
27
+
28
+ 直接传布尔值:
29
+
30
+ ```json
31
+ "已完成": true
32
+ ```
33
+
34
+ ### 4. 单选 (SINGLE_SELECT) / 多选 (SELECT)
35
+
36
+ **必须**使用数组格式,不能直接传字符串:
37
+
38
+ ```json
39
+ "优先级": [{"text": "高"}],
40
+ "标签": [{"text": "紧急", "style": 17}, {"text": "重要", "style": 12}]
41
+ ```
42
+
43
+ 已存在的选项应通过 `id` 匹配(`id` 可从 `smartsheet_get_fields` 返回中获取),新增选项时不填 `id`。可附带 `style`(颜色 1-27),对照表如下:
44
+
45
+ | style | 颜色 |
46
+ |-------|------|
47
+ | 1 | 浅红1 |
48
+ | 2 | 浅橙1 |
49
+ | 3 | 浅天蓝1 |
50
+ | 4 | 浅绿1 |
51
+ | 5 | 浅紫1 |
52
+ | 6 | 浅粉红1 |
53
+ | 7 | 浅灰1 |
54
+ | 8 | 白 |
55
+ | 9 | 灰 |
56
+ | 10 | 浅蓝1 |
57
+ | 11 | 浅蓝2 |
58
+ | 12 | 蓝 |
59
+ | 13 | 浅天蓝2 |
60
+ | 14 | 天蓝 |
61
+ | 15 | 浅绿2 |
62
+ | 16 | 绿 |
63
+ | 17 | 浅红2 |
64
+ | 18 | 红 |
65
+ | 19 | 浅橙2 |
66
+ | 20 | 橙 |
67
+ | 21 | 浅黄1 |
68
+ | 22 | 浅黄2 |
69
+ | 23 | 黄 |
70
+ | 24 | 浅紫2 |
71
+ | 25 | 紫 |
72
+ | 26 | 浅粉红2 |
73
+ | 27 | 粉红 |
74
+
75
+ ### 5. 日期时间 (DATE_TIME)
76
+
77
+ 传日期时间字符串,系统自动按东八区转换:
78
+
79
+ ```json
80
+ "截止日期": "2026-01-15 14:30:00",
81
+ "创建日期": "2026-01-15"
82
+ ```
83
+
84
+ 支持格式:`YYYY-MM-DD HH:MM:SS`、`YYYY-MM-DD HH:MM`、`YYYY-MM-DD`
85
+
86
+ ### 6. 手机号 (PHONE_NUMBER) / 邮箱 (EMAIL) / 条码 (BARCODE)
87
+
88
+ 直接传字符串:
89
+
90
+ ```json
91
+ "电话": "13800138000",
92
+ "邮箱": "test@example.com"
93
+ ```
94
+
95
+ ### 7. 成员 (USER)
96
+
97
+ 数组格式,需传 user_id。**user_id 不是姓名**,必须先通过 `wecom-contact` 技能查找目标人员的 `userid`,再填入此处。
98
+
99
+ 具体步骤:先使用 `wecom_mcp` tool 调用 `wecom_mcp call contact get_userlist '{}'` 获取通讯录成员列表,在返回结果中按姓名/别名筛选出目标人员,取其 `userid` 值填入。
100
+
101
+ ```json
102
+ "负责人": [{"user_id": "zhangsan"}]
103
+ ```
104
+
105
+ 多个成员:
106
+
107
+ ```json
108
+ "负责人": [{"user_id": "zhangsan"}, {"user_id": "lisi"}]
109
+ ```
110
+
111
+ ### 8. 超链接 (URL)
112
+
113
+ 数组格式,目前仅支持一个链接:
114
+
115
+ ```json
116
+ "参考链接": [{"type": "url", "text": "官网", "link": "https://example.com"}]
117
+ ```
118
+
119
+ ### 9. 图片 (IMAGE)
120
+
121
+ 数组格式,**必须且只能**直接在 cell value 中传入本地路径(`image_path`)。**严禁**调用 `upload_doc_image`、`upload_doc_file` 或任何上传接口,**严禁**进行 base64 编码——无论文件大小、无论 API 返回何种错误,均不得绕过此规则。若 `image_path` 方式返回错误,应直接将错误码和错误信息告知用户,**不得**尝试其他上传方式。
122
+
123
+ #### 9.1. 图片本地路径传入(唯一合法方式)
124
+
125
+ ```json
126
+ "封面": [{"image_path": "/path/to/img.png", "title": "图片标题"}]
127
+ ```
128
+
129
+
130
+ ### 10. 地理位置 (LOCATION)
131
+
132
+ 数组格式:
133
+
134
+ ```json
135
+ "地点": [{"source_type": 1, "id": "地点ID", "latitude": "39.9", "longitude": "116.3", "title": "北京"}]
136
+ ```
137
+
138
+ ### 11. 文件(Attachment)
139
+
140
+ 数组格式,**必须且只能**直接在 cell value 中传入本地路径(`file_path`)。**严禁**调用 `upload_doc_image`、`upload_doc_file` 或任何上传接口,**严禁**进行 base64 编码——无论文件大小、无论 API 返回何种错误,均不得绕过此规则。若 `file_path` 方式返回错误,应直接将错误码和错误信息告知用户,**不得**尝试其他上传方式。
141
+
142
+ ```json
143
+ "文件": [{"file_path": "/path/to/file.pdf"}]
144
+ ```
145
+
146
+ ## 完整添加记录示例
147
+
148
+ ```json
149
+ {
150
+ "docid": "DOCID",
151
+ "sheet_id": "SHEETID",
152
+ "records": [{
153
+ "values": {
154
+ "任务名称": [{"type": "text", "text": "完成需求文档"}],
155
+ "优先级": [{"text": "高"}],
156
+ "截止日期": "2026-03-20",
157
+ "完成进度": 30,
158
+ "已完成": false
159
+ }
160
+ }]
161
+ }
162
+ ```
163
+
@@ -0,0 +1,44 @@
1
+ # 智能表格字段类型参考
2
+
3
+ ## 支持的字段类型
4
+
5
+ | 类型枚举值 | 说明 | 适用场景 |
6
+ |---|---|---|
7
+ | `FIELD_TYPE_TEXT` | 文本 | 名称、标题、描述、负责人姓名等自由文本 |
8
+ | `FIELD_TYPE_NUMBER` | 数字 | 金额、工时、数量等数值 |
9
+ | `FIELD_TYPE_CHECKBOX` | 复选框 | 是否完成等布尔值 |
10
+ | `FIELD_TYPE_DATE_TIME` | 日期时间 | 截止日期、创建时间等 |
11
+ | `FIELD_TYPE_IMAGE` | 图片 | 附件图片 |
12
+ | `FIELD_TYPE_USER` | 用户/成员 | 需传入 user_id;仅在明确知道成员 ID 时使用,若只有姓名应用 TEXT |
13
+ | `FIELD_TYPE_URL` | 链接 | 超链接 |
14
+ | `FIELD_TYPE_SELECT` | 多选 | 标签、分类等可多选的选项 |
15
+ | `FIELD_TYPE_PROGRESS` | 进度 | 完成进度(0-100 整数) |
16
+ | `FIELD_TYPE_PHONE_NUMBER` | 手机号 | 联系电话 |
17
+ | `FIELD_TYPE_EMAIL` | 邮箱 | 电子邮件 |
18
+ | `FIELD_TYPE_SINGLE_SELECT` | 单选 | 状态、优先级、严重程度等有固定选项的字段 |
19
+ | `FIELD_TYPE_LOCATION` | 位置 | 地理位置 |
20
+ | `FIELD_TYPE_CURRENCY` | 货币 | 货币金额 |
21
+ | `FIELD_TYPE_PERCENTAGE` | 百分比 | 比率类数值(完成率、转化率) |
22
+ | `FIELD_TYPE_BARCODE` | 条码 | 条形码/二维码 |
23
+ | `FIELD_TYPE_ATTACHMENT` | 文件 | 文件/附件 |
24
+
25
+ ## 添加字段示例
26
+
27
+ ```json
28
+ {
29
+ "docid": "DOCID",
30
+ "sheet_id": "SHEETID",
31
+ "fields": [
32
+ { "field_title": "任务名称", "field_type": "FIELD_TYPE_TEXT" },
33
+ { "field_title": "优先级", "field_type": "FIELD_TYPE_SINGLE_SELECT" },
34
+ { "field_title": "截止日期", "field_type": "FIELD_TYPE_DATE_TIME" },
35
+ { "field_title": "完成进度", "field_type": "FIELD_TYPE_PROGRESS" }
36
+ ]
37
+ }
38
+ ```
39
+
40
+ ## 更新字段注意事项
41
+
42
+ - `smartsheet_update_fields` **只能更新字段标题**,不能更改字段类型
43
+ - `field_type` 必须传字段当前的原始类型
44
+ - `field_title` 不能更新为原值(即不能传与当前相同的标题)
@@ -0,0 +1,96 @@
1
+ # smartsheet_get_records API
2
+
3
+ 查询智能表格中指定子表的记录信息。只支持获取全部记录。支持通过 docid 或文档 URL 定位文档,二者传入其一即可。
4
+
5
+ ## 技能定义
6
+
7
+ ```json
8
+ {
9
+ "name": "smartsheet_get_records",
10
+ "description": "查询智能表格中指定子表的记录信息。只支持获取全部记录。支持通过 docid 或文档 URL 定位文档,二者传入其一即可。",
11
+ "inputSchema": {
12
+ "properties": {
13
+ "docid": {
14
+ "description": "文档的 docid,与 url 二选一传入",
15
+ "title": "Docid",
16
+ "type": "string"
17
+ },
18
+ "url": {
19
+ "description": "文档的访问链接,与 docid 二选一传入",
20
+ "title": "URL",
21
+ "type": "string"
22
+ },
23
+ "sheet_id": {
24
+ "description": "子表的 sheet_id,用于指定要查询的智能表格中的哪个子表",
25
+ "title": "Sheet Id",
26
+ "type": "string"
27
+ }
28
+ },
29
+ "oneOf": [
30
+ { "required": ["docid", "sheet_id"] },
31
+ { "required": ["url", "sheet_id"] }
32
+ ],
33
+ "title": "smartsheet_get_recordsArguments",
34
+ "type": "object"
35
+ }
36
+ }
37
+ ```
38
+
39
+ ## 参数说明
40
+
41
+ | 参数 | 类型 | 必填 | 说明 |
42
+ |---|---|---|---|
43
+ | docid | string | 与 url 二选一 | 文档的 docid |
44
+ | url | string | 与 docid 二选一 | 文档的访问链接 |
45
+ | sheet_id | string | 是 | 子表的 sheet_id,用于指定要查询的智能表格中的哪个子表 |
46
+
47
+ ## 请求示例
48
+
49
+ ```json
50
+ {
51
+ "docid": "DOCID",
52
+ "sheet_id": "123Abc"
53
+ }
54
+ ```
55
+
56
+ ```json
57
+ {
58
+ "url": "https://doc.weixin.qq.com/smartsheet/xxx",
59
+ "sheet_id": "123Abc"
60
+ }
61
+ ```
62
+
63
+ ## 响应示例
64
+
65
+ ```json
66
+ {
67
+ "errcode": 0,
68
+ "errmsg": "ok",
69
+ "total": -1,
70
+ "has_more": false,
71
+ "next": 0,
72
+ "records": [
73
+ {
74
+ "record_id": "QizwnX",
75
+ "create_time": "1775025981849",
76
+ "update_time": "1775035035706",
77
+ "values": {
78
+ "任务名称": [
79
+ {
80
+ "text": "完成项目需求文档",
81
+ "type": "text"
82
+ }
83
+ ],
84
+ "状态": [
85
+ {
86
+ "id": "oTBIKO",
87
+ "style": 7,
88
+ "text": "待开始"
89
+ }
90
+ ]
91
+ }
92
+ }
93
+ ]
94
+ }
95
+ ```
96
+
@@ -0,0 +1,185 @@
1
+ # 真实场景示例
2
+
3
+ ## 场景 1:记录一个 Bug(文本 + 单选 + 图片)
4
+
5
+ 用户说:“帮我记一下这个 bug,登录页在 Safari 下白屏,模块是前端,严重程度严重。”
6
+
7
+ ```json
8
+ {
9
+ "add_records": [
10
+ {
11
+ "values": {
12
+ "fABCD1": "登录页在 Safari 浏览器下加载后白屏,其他浏览器正常。复现步骤:Safari 14+ 访问 /login → 页面空白,控制台报 CSS 解析错误。",
13
+ "fABCD2": [{"text": "前端"}],
14
+ "fABCD3": [{"text": "严重"}],
15
+ "fABCD4": [{"user_id": "wangwu"}],
16
+ "fABCD5": [{"title": "safari-bug-screenshot.png", "image_base64": "iVBORw0KGgoAAAANSUhEUg...(纯base64)"}]
17
+ }
18
+ }
19
+ ]
20
+ }
21
+ ```
22
+
23
+ ## 场景 2:记录一条任务(文本 + 日期 + 成员 + 单选 + 空图片)
24
+
25
+ 用户说:“加一条任务,完成支付模块单元测试,3月20日前,负责人 lisi,状态未开始,暂无附件。”
26
+
27
+ ```json
28
+ {
29
+ "add_records": [
30
+ {
31
+ "values": {
32
+ "fTITLE": "完成支付模块单元测试,覆盖率达到 80%",
33
+ "fDUEDATE": "1742400000000",
34
+ "fOWNER": [{"user_id": "lisi"}],
35
+ "fSTATUS": [{"text": "未开始"}],
36
+ "fATTACH": []
37
+ }
38
+ }
39
+ ]
40
+ }
41
+ ```
42
+
43
+ > **关于负责人(成员字段)**:
44
+ > - 有 userid 时用 `[{"user_id": "账号名"}]`,userid 通常就是企业微信登录账号
45
+ > - 没有 userid 只知道姓名时用 `["张三"]`,但匹配不上时不会写入
46
+ > - 暂不指定负责人时传 `[]` 空数组
47
+ >
48
+ > **关于图片/附件字段**:
49
+ > - 暂无图片时传 `[]` 空数组即可,不会报错
50
+ > - 有图片时传 `[{"title": "filename.png", "image_base64": "纯base64字符串"}]`,注意不带 `data:image/...;base64,` 前缀
51
+
52
+ ## 场景 3:批量添加多条客户记录
53
+
54
+ 用户说:“帮我把这三条线索录进去:张伟/科技公司/跟进中,陈静/贸易公司/初步接触,刘洋/制造业/已成交。”
55
+
56
+ ```json
57
+ {
58
+ "add_records": [
59
+ {
60
+ "values": {
61
+ "fCUST_NAME": "张伟",
62
+ "fCOMPANY": "北京某科技有限公司",
63
+ "fSTAGE": [{"text": "跟进中"}],
64
+ "fSOURCE": [{"text": "展会"}]
65
+ }
66
+ },
67
+ {
68
+ "values": {
69
+ "fCUST_NAME": "陈静",
70
+ "fCOMPANY": "上海某贸易有限公司",
71
+ "fSTAGE": [{"text": "初步接触"}],
72
+ "fSOURCE": [{"text": "冷呼"}]
73
+ }
74
+ },
75
+ {
76
+ "values": {
77
+ "fCUST_NAME": "刘洋",
78
+ "fCOMPANY": "广州某制造有限公司",
79
+ "fSTAGE": [{"text": "已成交"}],
80
+ "fSOURCE": [{"text": "老客户转介绍"}]
81
+ }
82
+ }
83
+ ]
84
+ }
85
+ ```
86
+
87
+ ## 场景 4:更新一条已有记录
88
+
89
+ 用户说:“把 record_id 是 REC_20250301 的那条任务状态改成已完成,进度 100%。”
90
+
91
+ ```json
92
+ {
93
+ "update_records": [
94
+ {
95
+ "record_id": "REC_20250301",
96
+ "values": {
97
+ "fSTATUS": [{"text": "已完成"}],
98
+ "fPROGRESS": 100
99
+ }
100
+ }
101
+ ]
102
+ }
103
+ ```
104
+
105
+ ## 场景 5:批量更新多条记录
106
+
107
+ 用户说:“把这几条审批记录都标为已通过:REC_001、REC_002、REC_003。”
108
+
109
+ ```json
110
+ {
111
+ "update_records": [
112
+ {"record_id": "REC_001", "values": {"fSTATUS": [{"text": "已通过"}], "fAPPROVER": [{"user_id": "manager_a"}]}},
113
+ {"record_id": "REC_002", "values": {"fSTATUS": [{"text": "已通过"}], "fAPPROVER": [{"user_id": "manager_a"}]}},
114
+ {"record_id": "REC_003", "values": {"fSTATUS": [{"text": "已通过"}], "fAPPROVER": [{"user_id": "manager_a"}]}}
115
+ ]
116
+ }
117
+ ```
118
+
119
+ ## 场景 6:记录一条销售订单(多字段混合类型)
120
+
121
+ 用户说:“新增一条订单,客户是北京某科技,产品是企业版,金额 58000,签约日期今天,负责人赵六,合同链接发给你了。”
122
+
123
+ ```json
124
+ {
125
+ "add_records": [
126
+ {
127
+ "values": {
128
+ "fCUSTOMER": "北京某科技有限公司",
129
+ "fPRODUCT": [{"text": "企业版"}],
130
+ "fAMOUNT": 58000,
131
+ "fSIGN_DATE": "1741622400000",
132
+ "fSALES": [{"user_id": "zhaoliu"}],
133
+ "fCONTRACT": [{"text": "合同文件", "link": "https://doc.example.com/contract/2025-001"}]
134
+ }
135
+ }
136
+ ]
137
+ }
138
+ ```
139
+
140
+ ## 场景 7:记录一次会议纪要
141
+
142
+ 用户说:“帮我记一下今天下午的需求评审会,参会人产品+开发+测试,决议是优先做支付模块。”
143
+
144
+ ```json
145
+ {
146
+ "add_records": [
147
+ {
148
+ "values": {
149
+ "fMEETING_TITLE": "支付模块需求评审会",
150
+ "fDATE": "1741622400000",
151
+ "fPARTICIPANTS": "产品、开发、测试",
152
+ "fSUMMARY": "确定优先开发支付模块,目标 3 月底完成联调,4 月初上线。遗留问题:退款流程待产品补充文档。",
153
+ "fDOC_LINK": [{"text": "评审文档", "link": "https://doc.example.com/meeting/20250310"}]
154
+ }
155
+ }
156
+ ]
157
+ }
158
+ ```
159
+
160
+ ## 场景 8:同一请求中同时添加和更新
161
+
162
+ 用户说:“新增一条‘用户反馈收集’的任务,同时把‘旧官网下线’那条(REC_OLD_001)标为已完成。”
163
+
164
+ ```json
165
+ {
166
+ "add_records": [
167
+ {
168
+ "values": {
169
+ "fTITLE": "用户反馈收集与分析",
170
+ "fSTATUS": [{"text": "未开始"}],
171
+ "fPRIORITY": [{"text": "高"}]
172
+ }
173
+ }
174
+ ],
175
+ "update_records": [
176
+ {
177
+ "record_id": "REC_OLD_001",
178
+ "values": {
179
+ "fSTATUS": [{"text": "已完成"}],
180
+ "fPROGRESS": 100
181
+ }
182
+ }
183
+ ]
184
+ }
185
+ ```