@rezti/dsh-rez-suite 0.1.49 → 0.1.51
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.
- package/CHANGELOG.md +13 -2
- package/README.md +3 -3
- package/README.zh.md +2 -2
- package/cordis.patch.yml +1 -1
- package/lib/client.d.ts +31 -3
- package/lib/client.js +343 -7
- package/lib/index.js +244 -15
- package/lib/style.css +7 -0
- package/package.json +12 -11
- package/src/boss/mount.ts +4 -3
- package/src/boss/register.ts +1 -1
- package/src/boss/seed.ts +34 -0
- package/src/changelog.ts +48 -0
- package/src/channel-board.ts +55 -0
- package/src/client/locales.ts +62 -6
- package/src/client/panel/BoardTab.tsx +136 -0
- package/src/client/panel/ConfigTab.tsx +2 -2
- package/src/client/panel/StatusTab.tsx +31 -0
- package/src/client/panel/panel.module.css +7 -0
- package/src/client/settings-card.tsx +4 -1
- package/src/index.ts +3 -2
- package/src/protocol.ts +14 -0
- package/src/routes.ts +7 -1
- package/src/tools.ts +49 -6
- package/src/wecom-cli.ts +125 -0
- package/templates/boss/ops/AGENTS.md +2 -0
- package/templates/shared/wecom-cli.SOURCE.md +9 -0
- package/templates/shared/wecom-office/SKILL.md +32 -0
- package/templates/shared/wecomcli-calendar/SKILL.md +303 -0
- package/templates/shared/wecomcli-calendar/references/calendar-agenda.md +224 -0
- package/templates/shared/wecomcli-calendar/references/calendar-cancel.md +108 -0
- package/templates/shared/wecomcli-calendar/references/calendar-create.md +238 -0
- package/templates/shared/wecomcli-calendar/references/calendar-freebusy.md +207 -0
- package/templates/shared/wecomcli-calendar/references/calendar-meeting-room.md +170 -0
- package/templates/shared/wecomcli-calendar/references/calendar-search.md +206 -0
- package/templates/shared/wecomcli-calendar/references/calendar-update.md +272 -0
- package/templates/shared/wecomcli-contact/SKILL.md +58 -0
- package/templates/shared/wecomcli-disk/SKILL.md +389 -0
- package/templates/shared/wecomcli-doc/SKILL.md +137 -0
- package/templates/shared/wecomcli-doc/references/doc-contents-append.md +20 -0
- package/templates/shared/wecomcli-doc/references/doc-contents-overwrite.md +27 -0
- package/templates/shared/wecomcli-doc/references/doc-create.md +161 -0
- package/templates/shared/wecomcli-doc/scripts/build_docx.py +1375 -0
- package/templates/shared/wecomcli-doc-manage/SKILL.md +132 -0
- package/templates/shared/wecomcli-doc-manage/references/doc-members-update.md +24 -0
- package/templates/shared/wecomcli-doc-manage/references/doc-names-update.md +20 -0
- package/templates/shared/wecomcli-doc-manage/references/doc-rules-update.md +22 -0
- package/templates/shared/wecomcli-email/SKILL.md +218 -0
- package/templates/shared/wecomcli-email/references/forward-mail.md +131 -0
- package/templates/shared/wecomcli-email/references/get-mail.md +166 -0
- package/templates/shared/wecomcli-email/references/reply-mail.md +138 -0
- package/templates/shared/wecomcli-email/references/search-mail.md +111 -0
- package/templates/shared/wecomcli-email/references/security.md +53 -0
- package/templates/shared/wecomcli-email/references/send-mail.md +186 -0
- package/templates/shared/wecomcli-email/references/send-schedule.md +83 -0
- package/templates/shared/wecomcli-media/SKILL.md +98 -0
- package/templates/shared/wecomcli-meeting/SKILL.md +373 -0
- package/templates/shared/wecomcli-meeting/references/meeting-cancel.md +113 -0
- package/templates/shared/wecomcli-meeting/references/meeting-create.md +167 -0
- package/templates/shared/wecomcli-meeting/references/meeting-list.md +226 -0
- package/templates/shared/wecomcli-meeting/references/meeting-original-get.md +98 -0
- package/templates/shared/wecomcli-meeting/references/meeting-search.md +173 -0
- package/templates/shared/wecomcli-meeting/references/meeting-update.md +217 -0
- package/templates/shared/wecomcli-message/SKILL.md +200 -0
- package/templates/shared/wecomcli-shared/SKILL.md +73 -0
- package/templates/shared/wecomcli-sheet/SKILL.md +172 -0
- package/templates/shared/wecomcli-sheet/references/sheet-contents-update.md +47 -0
- package/templates/shared/wecomcli-sheet/references/sheet-ranges-get.md +45 -0
- package/templates/shared/wecomcli-sheet/references/sheet-rows-append.md +45 -0
- package/templates/shared/wecomcli-sheet/references/sheet-subsheets-add.md +26 -0
- package/templates/shared/wecomcli-sheet/references/sheet-subsheets-delete.md +20 -0
- package/templates/shared/wecomcli-smartpage/SKILL.md +170 -0
- package/templates/shared/wecomcli-smartpage/references/data-driven-pages.md +50 -0
- package/templates/shared/wecomcli-smartpage/references/formula/arraylist.md +369 -0
- package/templates/shared/wecomcli-smartpage/references/formula/datetime.md +283 -0
- package/templates/shared/wecomcli-smartpage/references/formula/logic.md +247 -0
- package/templates/shared/wecomcli-smartpage/references/formula/math.md +362 -0
- package/templates/shared/wecomcli-smartpage/references/formula/operators.md +246 -0
- package/templates/shared/wecomcli-smartpage/references/formula/pageblock.md +76 -0
- package/templates/shared/wecomcli-smartpage/references/formula/templates.md +410 -0
- package/templates/shared/wecomcli-smartpage/references/formula/text.md +377 -0
- package/templates/shared/wecomcli-smartpage/references/formula/user.md +22 -0
- package/templates/shared/wecomcli-smartpage/references/formula-reference.md +192 -0
- package/templates/shared/wecomcli-smartpage/references/mdx-syntax.md +739 -0
- package/templates/shared/wecomcli-smartpage/references/smartpage-edit.md +506 -0
- package/templates/shared/wecomcli-smartsheet/SKILL.md +154 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/README.md +53 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/ai_efficiency.md +709 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/connect_to_app.md +380 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/financial_accounting.md +369 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/hr_and_administration.md +475 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/ledger_records.md +156 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/manufacturing.md +395 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/marketing.md +186 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/office_essentials.md +299 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/personal_efficiency.md +70 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/procurement_logistics.md +325 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/project_management.md +564 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_customer.md +222 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_ops.md +105 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_project.md +109 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_research.md +92 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/sales_and_operations.md +446 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/store_management.md +431 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/team_tasks.md +274 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/wechat_customer.md +384 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/work_report.md +100 -0
- package/templates/shared/wecomcli-smartsheet/references/common.md +143 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-chart-types.md +95 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-edit.md +589 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-field-types.md +438 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-formula.md +845 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-read.md +391 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-record-values.md +201 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-view-types.md +356 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook-examples.md +176 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook.md +169 -0
- package/templates/shared/wecomcli-todo/SKILL.md +76 -0
- package/templates/shared/wecomcli-todo/references/todo-create.md +137 -0
- package/templates/shared/wecomcli-todo/references/todo-delete.md +63 -0
- package/templates/shared/wecomcli-todo/references/todo-finish.md +72 -0
- package/templates/shared/wecomcli-todo/references/todo-get.md +66 -0
- package/templates/shared/wecomcli-todo/references/todo-list.md +133 -0
- package/templates/shared/wecomcli-todo/references/todo-update.md +112 -0
- package/templates/staff/design/AGENTS.md +2 -1
- package/templates/staff/ecommerce/.agents/skills/ops-ecommerce/SKILL.md +6 -0
- package/templates/staff/ecommerce/AGENTS.md +49 -0
- package/templates/staff/ecommerce/BOOTSTRAP.md +23 -0
- package/templates/staff/ecommerce/IDENTITY.md +8 -0
- package/templates/staff/ecommerce/MEMORY.md +9 -0
- package/templates/staff/ecommerce/PRIORITIES.md +3 -0
- package/templates/staff/ecommerce/SOUL.md +5 -0
- package/templates/staff/ecommerce/USER.md +8 -0
- package/templates/staff/hr/.agents/skills/staff-onboard-keys/SKILL.md +3 -3
- package/templates/staff/publish/.agents/skills/ops-publish/SKILL.md +6 -0
- package/templates/staff/publish/AGENTS.md +59 -0
- package/templates/staff/publish/BOOTSTRAP.md +23 -0
- package/templates/staff/publish/IDENTITY.md +8 -0
- package/templates/staff/publish/MEMORY.md +9 -0
- package/templates/staff/publish/PRIORITIES.md +3 -0
- package/templates/staff/publish/SOUL.md +6 -0
- package/templates/staff/publish/USER.md +8 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
# 视图类型(ViewType)完整参考
|
|
2
|
+
|
|
3
|
+
## View(视图结构)
|
|
4
|
+
|
|
5
|
+
| 字段 | 类型 | 说明 |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `view_id` | string | 视图 ID |
|
|
8
|
+
| `view_title` | string | 视图标题 |
|
|
9
|
+
| `view_type` | string (ViewType) | 视图类型,见下方 ViewType 枚举 |
|
|
10
|
+
| `property` | ViewProperty | 视图属性 |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## ViewParam(视图操作参数)
|
|
15
|
+
|
|
16
|
+
统一结构,根据操作指令不同使用不同字段组合:
|
|
17
|
+
|
|
18
|
+
> - `smartsheet views add` 时:传 `view_title` + `view_type`,甘特视图传 `property_gantt`,日历视图传 `property_calendar`
|
|
19
|
+
> - `smartsheet views update` 时:传 `view_id`,可选传 `view_title` 和 `property`。**不支持修改视图类型**,只能修改同一视图下的标题和属性(如筛选、排序、分组等),不能将一种视图类型改为另一种(例如不能把表格视图改为看板视图)。如需更换视图类型,只能先删除旧视图再新增新视图
|
|
20
|
+
> - `smartsheet views delete` 时:只传 `view_id`。若该子表只剩最后一个视图,须遵循 `references/smart-sheet-edit.md` 顶部**删除最后一个子表/字段/视图固定流程**处理
|
|
21
|
+
|
|
22
|
+
| 字段 | 类型 | 必须 | 说明 |
|
|
23
|
+
| --- | --- | --- | --- |
|
|
24
|
+
| `view_id` | string | 条件 | 视图 ID(update、delete 时必传) |
|
|
25
|
+
| `view_title` | string | 条件 | 视图标题(add 时必传,update 时可选) |
|
|
26
|
+
| `view_type` | string (ViewType) | 条件 | 视图类型(add 时必传),见下方 ViewType 枚举 |
|
|
27
|
+
| `property` | ViewProperty | 否 | 视图属性(update 时可选) |
|
|
28
|
+
| `property_gantt` | GanttViewProperty | 否 | 甘特视图属性(add 甘特视图时必填) |
|
|
29
|
+
| `property_calendar` | CalendarViewProperty | 否 | 日历视图属性(add 日历视图时必填) |
|
|
30
|
+
| `col_infos` | ViewColInfos[] | 否 | 列宽设置 |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## ViewType 枚举
|
|
35
|
+
|
|
36
|
+
| 参数值 | 说明 |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `grid` | 表格视图 |
|
|
39
|
+
| `kanban` | 看板视图 |
|
|
40
|
+
| `gallery` | 画册视图 |
|
|
41
|
+
| `gantt` | 甘特视图 |
|
|
42
|
+
| `calendar` | 日历视图 |
|
|
43
|
+
| `form` | 表单视图 |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 特殊视图属性
|
|
48
|
+
|
|
49
|
+
### GanttViewProperty(甘特视图属性)
|
|
50
|
+
|
|
51
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
52
|
+
| --- | --- | --- | --- |
|
|
53
|
+
| `start_date_field_title` | string | 是 | 时间条起点字段名称,只允许日期类型 |
|
|
54
|
+
| `end_date_field_title` | string | 是 | 时间条终点字段名称,只允许日期类型 |
|
|
55
|
+
|
|
56
|
+
### CalendarViewProperty(日历视图属性)
|
|
57
|
+
|
|
58
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
59
|
+
| --- | --- | --- | --- |
|
|
60
|
+
| `start_date_field_title` | string | 是 | 时间条起点字段名称,只允许日期类型 |
|
|
61
|
+
| `end_date_field_title` | string | 是 | 时间条终点字段名称,只允许日期类型 |
|
|
62
|
+
|
|
63
|
+
### ViewColInfos(列宽信息)
|
|
64
|
+
|
|
65
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
66
|
+
| --- | --- | --- | --- |
|
|
67
|
+
| `field_title` | string | 是 | 字段名称 |
|
|
68
|
+
| `width` | int32 | 是 | 列宽,范围 1~1000 |
|
|
69
|
+
|
|
70
|
+
#### 列宽调整接口调用方式
|
|
71
|
+
|
|
72
|
+
通过 `smartsheet views update` 的 `col_infos` 参数设置列宽,调用前须先获取目标视图的 `view_id`:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# 1. 获取视图列表,取第一个视图的 view_id
|
|
76
|
+
wecom-cli smartsheet views list --json '{"docid": "<docid>", "sheet_title": "<子表名称>", "limit": 100}'
|
|
77
|
+
|
|
78
|
+
# 2. 调用 views update 设置列宽(可一次性传入所有字段)
|
|
79
|
+
wecom-cli smartsheet views update --json '{
|
|
80
|
+
"docid": "<docid>",
|
|
81
|
+
"sheet_title": "<子表名称>",
|
|
82
|
+
"type": "update",
|
|
83
|
+
"views": [{
|
|
84
|
+
"view_id": "<view_id>",
|
|
85
|
+
"col_infos": [
|
|
86
|
+
{"field_title": "任务名称", "width": 280},
|
|
87
|
+
{"field_title": "优先级", "width": 160},
|
|
88
|
+
{"field_title": "状态", "width": 120}
|
|
89
|
+
]
|
|
90
|
+
}]
|
|
91
|
+
}'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### 新建字段时的列宽判断规则
|
|
95
|
+
|
|
96
|
+
新建字段(含随子表初始化的字段)后,AI 须为每个字段选择合适的列宽档位,最终写入对应的 px 值。共 4 个档位:
|
|
97
|
+
|
|
98
|
+
| 档位 | 宽度 |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| `compact` | 120px |
|
|
101
|
+
| `default` | 160px |
|
|
102
|
+
| `wide` | 280px |
|
|
103
|
+
| `extra_wide` | 400px |
|
|
104
|
+
|
|
105
|
+
**判断依据:字段类型初始档位 + 字段名语义**
|
|
106
|
+
|
|
107
|
+
**第一步:按字段类型查初始档位**
|
|
108
|
+
|
|
109
|
+
| 字段类型 | 初始档位 | 备注 |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| `checkbox` | `compact` | 固定,跳过第二步 |
|
|
112
|
+
| `number` | `compact` | 固定,跳过第二步 |
|
|
113
|
+
| `autonumber` | `compact` | 固定,跳过第二步 |
|
|
114
|
+
| `currency` | `compact` | 固定,跳过第二步 |
|
|
115
|
+
| `percentage` | `compact` | 固定,跳过第二步 |
|
|
116
|
+
| `progress` | `compact` | 固定,跳过第二步 |
|
|
117
|
+
| `phone_number` | `compact` | 固定,跳过第二步 |
|
|
118
|
+
| `barcode` | `compact` | 固定,跳过第二步 |
|
|
119
|
+
| `date_time`(紧凑格式) | `compact` | 固定,跳过第二步 |
|
|
120
|
+
| `created_time`(紧凑格式) | `compact` | 固定,跳过第二步 |
|
|
121
|
+
| `modified_time`(紧凑格式) | `compact` | 固定,跳过第二步 |
|
|
122
|
+
| `date_time`(宽松格式) | `default` | 固定,跳过第二步 |
|
|
123
|
+
| `created_time`(宽松格式) | `default` | 固定,跳过第二步 |
|
|
124
|
+
| `modified_time`(宽松格式) | `default` | 固定,跳过第二步 |
|
|
125
|
+
| `created_user` | `default` | 固定,跳过第二步 |
|
|
126
|
+
| `modified_user` | `default` | 固定,跳过第二步 |
|
|
127
|
+
| `email` | `default` | 固定,跳过第二步 |
|
|
128
|
+
| `single_select` | `compact` | 可调 |
|
|
129
|
+
| `select` | `default` | 可调 |
|
|
130
|
+
| `user` | `default` | 可调 |
|
|
131
|
+
| `attachment` | `default` | 可调 |
|
|
132
|
+
| `image` | `default` | 可调 |
|
|
133
|
+
| `reference` | `default` | 可调 |
|
|
134
|
+
| `two_way_link_records` | `default` | 可调 |
|
|
135
|
+
| `wwgroup` | `default` | 可调 |
|
|
136
|
+
| `formula` | `default` | 可调 |
|
|
137
|
+
| `lookup` | `default` | 可调 |
|
|
138
|
+
| `url` | `wide` | 可调 |
|
|
139
|
+
| `location` | `wide` | 可调 |
|
|
140
|
+
| `text` | `wide` | 可调 |
|
|
141
|
+
|
|
142
|
+
**第二步:对"可调"类型,按字段名语义决定是否上调**
|
|
143
|
+
|
|
144
|
+
- 字段名含"描述/备注/说明/详情/内容/原因/摘要/简介/评论/补充" → 上调至 `extra_wide`
|
|
145
|
+
- 字段名含"标题/名称/任务/需求/项目" → 取初始档位与 `wide` 中较大的档位
|
|
146
|
+
- 字段名无明显语义指示 → 保持初始档位
|
|
147
|
+
|
|
148
|
+
**第三步:列名宽度兜底检查(所有字段,含固定档位)**
|
|
149
|
+
|
|
150
|
+
估算字段名的渲染宽度:汉字按 24px/字,非汉字按 14px/字符。若估算值超过当前档位宽度,则向上取能容纳的最小档位;最高升至 `extra_wide`(400px)。
|
|
151
|
+
|
|
152
|
+
> **示例**:字段名"创建时间"(4 汉字)→ 4×24 = 96px,`compact`(120px)够用 → 保持。
|
|
153
|
+
> 字段名"是否已完成确认"(8 汉字)→ 8×24 = 192px,`compact` 不够 → 升到 `wide`(280px)。
|
|
154
|
+
> 字段名"status"(6 非汉字)→ 6×14 = 84px,`compact`(120px)够用 → 保持。
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## ViewProperty(视图属性)
|
|
159
|
+
|
|
160
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
161
|
+
| --- | --- | --- | --- |
|
|
162
|
+
| `auto_sort` | bool | 否 | 记录变更后自动重新排序 |
|
|
163
|
+
| `sort_spec` | SortSpec | 否 | 排序设置 |
|
|
164
|
+
| `group_spec` | GroupSpec | 否 | 分组设置 |
|
|
165
|
+
| `filter_spec` | FilterSpec | 否 | 过滤筛选设置,无筛选条件时,必须**完全省略** `filter_spec` 字段;禁止传 `"filter_spec": {}` 或空的 `conditions`。空对象会被后端当作不完整的 FilterSpec 解析,触发“无效的连接符”错误。只有确实需要筛选时,才传完整的 `filter_spec`,且必须包含合法的 `conjunction` 和非空 `conditions`。 |
|
|
166
|
+
| `is_field_stat_enabled` | bool | 否 | 是否使用数据统计 |
|
|
167
|
+
| `field_visibility` | object | 否 | key 为字段名称(`field_title`),value 为布尔值表示是否显示 |
|
|
168
|
+
| `frozen_field_count` | int32 | 否 | 冻结列数量,从首列开始 |
|
|
169
|
+
| `color_config` | ViewColorConfig | 否 | 填色设置 |
|
|
170
|
+
|
|
171
|
+
### SortSpec(排序设置)
|
|
172
|
+
|
|
173
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
174
|
+
| --- | --- | --- | --- |
|
|
175
|
+
| `sort_infos` | SortInfo[] | 否 | 参与排序的字段列表 |
|
|
176
|
+
|
|
177
|
+
### SortInfo
|
|
178
|
+
|
|
179
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
180
|
+
| --- | --- | --- | --- |
|
|
181
|
+
| `field_title` | string | 是 | 字段名称 |
|
|
182
|
+
| `desc` | bool | 否 | 是否降序 |
|
|
183
|
+
|
|
184
|
+
### GroupSpec(分组设置)
|
|
185
|
+
|
|
186
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
187
|
+
| --- | --- | --- | --- |
|
|
188
|
+
| `groups` | GroupInfo[] | 否 | 参与分组的字段列表 |
|
|
189
|
+
|
|
190
|
+
### GroupInfo
|
|
191
|
+
|
|
192
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
193
|
+
| --- | --- | --- | --- |
|
|
194
|
+
| `field_title` | string | 是 | 字段名称 |
|
|
195
|
+
| `desc` | bool | 否 | 是否降序 |
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## FilterSpec(过滤设置)
|
|
200
|
+
|
|
201
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
202
|
+
| --- | --- | --- | --- |
|
|
203
|
+
| `conjunction` | string | 是 | 多个 conditions 之间的组合方式:`and` (条件与) 或 `or` (条件或) |
|
|
204
|
+
| `conditions` | Condition[] | 是 | 判断条件 |
|
|
205
|
+
|
|
206
|
+
### Condition(判断条件)
|
|
207
|
+
|
|
208
|
+
> 不同字段类型支持的筛选不同,需根据字段类型实际支持的筛选条件进行组合。
|
|
209
|
+
|
|
210
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
211
|
+
| --- | --- | --- | --- |
|
|
212
|
+
| `field_title` | string | 是 | 字段名称 |
|
|
213
|
+
| `field_type` | string | 是 | 字段类型 |
|
|
214
|
+
| `operator` | string (Operator) | 是 | 判断类型,见下方 Operator 枚举 |
|
|
215
|
+
| `string_value` | StringValue | 否 | 文本/网址/电话/邮箱/地理位置/单选/多选等列类型使用。单选/多选支持直接传选项文本,后端会自动匹配并存储对应的选项 ID,不要求一定传 `options[].id` |
|
|
216
|
+
| `number_value` | NumberValue | 否 | 数字/进度/货币/百分数等列类型使用 |
|
|
217
|
+
| `bool_value` | BoolValue | 否 | 复选框列类型使用 |
|
|
218
|
+
| `user_value` | UserValue | 否 | 成员/创建人/编辑人列类型使用 |
|
|
219
|
+
| `date_time_value` | FilterDateTimeValue | 否 | 日期/创建时间/编辑时间列类型使用 |
|
|
220
|
+
|
|
221
|
+
### StringValue
|
|
222
|
+
|
|
223
|
+
| 字段 | 类型 | 说明 |
|
|
224
|
+
| --- | --- | --- |
|
|
225
|
+
| `value` | string[] | 字符串值列表 |
|
|
226
|
+
|
|
227
|
+
### NumberValue
|
|
228
|
+
|
|
229
|
+
| 字段 | 类型 | 说明 |
|
|
230
|
+
| --- | --- | --- |
|
|
231
|
+
| `value` | double | 数字值 |
|
|
232
|
+
|
|
233
|
+
### BoolValue
|
|
234
|
+
|
|
235
|
+
| 字段 | 类型 | 说明 |
|
|
236
|
+
| --- | --- | --- |
|
|
237
|
+
| `value` | bool | 布尔值 |
|
|
238
|
+
|
|
239
|
+
### UserValue
|
|
240
|
+
|
|
241
|
+
| 字段 | 类型 | 说明 |
|
|
242
|
+
| --- | --- | --- |
|
|
243
|
+
| `value` | string[] | 成员 userid 列表 |
|
|
244
|
+
|
|
245
|
+
### FilterDateTimeValue
|
|
246
|
+
|
|
247
|
+
| 字段 | 类型 | 必须 | 说明 |
|
|
248
|
+
| --- | --- | --- | --- |
|
|
249
|
+
| `type` | string (DateTimeType) | 是 | 日期类型,见下方 DateTimeType 枚举 |
|
|
250
|
+
| `value` | string[] | 是 | 具体日期值,type 为 `detail_date` 时必填,格式为 `YYYY-MM-DD HH:mm:ss`,例如 `["2026-06-01 00:00:00"]` |
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 通用枚举值
|
|
255
|
+
|
|
256
|
+
### Operator(判断类型)
|
|
257
|
+
|
|
258
|
+
| 参数值 | 说明 |
|
|
259
|
+
| --- | --- |
|
|
260
|
+
| `is` | 等于 |
|
|
261
|
+
| `is_not` | 不等于 |
|
|
262
|
+
| `contains` | 包含 |
|
|
263
|
+
| `does_not_contain` | 不包含 |
|
|
264
|
+
| `is_greater` | 大于/时间晚于 |
|
|
265
|
+
| `is_greater_or_equal` | 大于或等于/时间晚于 |
|
|
266
|
+
| `is_less` | 小于/早于 |
|
|
267
|
+
| `is_less_or_equal` | 小于或等于/时间早于 |
|
|
268
|
+
| `is_empty` | 为空 |
|
|
269
|
+
| `is_not_empty` | 不为空 |
|
|
270
|
+
|
|
271
|
+
### DateTimeType(日期类型)
|
|
272
|
+
|
|
273
|
+
| 参数值 | 说明 |
|
|
274
|
+
| --- | --- |
|
|
275
|
+
| `detail_date` | 具体时间 |
|
|
276
|
+
| `today` | 今天 |
|
|
277
|
+
| `tomorrow` | 明天 |
|
|
278
|
+
| `yesterday` | 昨天 |
|
|
279
|
+
| `current_week` | 本周 |
|
|
280
|
+
| `last_week` | 上周 |
|
|
281
|
+
| `current_month` | 本月 |
|
|
282
|
+
| `the_past_7_days` | 过去 7 天内 |
|
|
283
|
+
| `the_next_7_days` | 接下来 7 天内 |
|
|
284
|
+
| `last_month` | 上月 |
|
|
285
|
+
| `the_past_30_days` | 过去 30 天内 |
|
|
286
|
+
| `the_next_30_days` | 接下来 30 天内 |
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 填色设置
|
|
291
|
+
|
|
292
|
+
### ViewColorConfig
|
|
293
|
+
|
|
294
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
295
|
+
| --- | --- | --- | --- |
|
|
296
|
+
| `conditions` | ViewColorCondition[] | 是 | 填色条件列表 |
|
|
297
|
+
|
|
298
|
+
### ViewColorCondition
|
|
299
|
+
|
|
300
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
301
|
+
| --- | --- | --- | --- |
|
|
302
|
+
| `id` | string | 否 | 填色 ID,新增时不需要传入,更新时传入 |
|
|
303
|
+
| `type` | string (ViewColorConditionType) | 是 | 填色类型,见下方枚举 |
|
|
304
|
+
| `color` | string (ViewColor) | 是 | 颜色,见下方 ViewColor 枚举 |
|
|
305
|
+
| `condition` | Condition | 是 | 判断条件 |
|
|
306
|
+
|
|
307
|
+
### ViewColorConditionType
|
|
308
|
+
|
|
309
|
+
| 参数值 | 说明 |
|
|
310
|
+
| --- | --- |
|
|
311
|
+
| `row` | 行 |
|
|
312
|
+
| `column` | 列 |
|
|
313
|
+
| `cell` | 单元格 |
|
|
314
|
+
|
|
315
|
+
### ViewColor(颜色值)
|
|
316
|
+
|
|
317
|
+
| 颜色值 | 描述 |
|
|
318
|
+
| --- | --- |
|
|
319
|
+
| `fillColorGray_5` | 灰色\_5 |
|
|
320
|
+
| `accentBlueLighten_5` | 蓝色\_5 |
|
|
321
|
+
| `chromeCyanLighten_5` | 青色\_5 |
|
|
322
|
+
| `chromeMintLighten_5` | 薄荷色\_5 |
|
|
323
|
+
| `chromeRedLighten_5` | 红色\_5 |
|
|
324
|
+
| `chromeOrangeLighten_5` | 橙色\_5 |
|
|
325
|
+
| `chromeAmberLighten_5` | 琥珀色\_5 |
|
|
326
|
+
| `chromeVioletLighten_5` | 紫色\_5 |
|
|
327
|
+
| `chromePinkLighten_5` | 粉色\_5 |
|
|
328
|
+
| `fillColorGray_4` | 灰色\_4 |
|
|
329
|
+
| `accentBlueLighten_4` | 蓝色\_4 |
|
|
330
|
+
| `chromeCyanLighten_4` | 青色\_4 |
|
|
331
|
+
| `chromeMintLighten_4` | 薄荷色\_4 |
|
|
332
|
+
| `chromeRedLighten_4` | 红色\_4 |
|
|
333
|
+
| `chromeOrangeLighten_4` | 橙色\_4 |
|
|
334
|
+
| `chromeAmberLighten_4` | 琥珀色\_4 |
|
|
335
|
+
| `chromeVioletLighten_4` | 紫色\_4 |
|
|
336
|
+
| `chromePinkLighten_4` | 粉色\_4 |
|
|
337
|
+
| `fillColorGray_3` | 灰色\_3 |
|
|
338
|
+
| `accentBlueLighten_3` | 蓝色\_3 |
|
|
339
|
+
| `chromeCyanLighten_3` | 青色\_3 |
|
|
340
|
+
| `chromeMintLighten_3` | 薄荷色\_3 |
|
|
341
|
+
| `chromeRedLighten_3` | 红色\_3 |
|
|
342
|
+
| `chromeOrangeLighten_3` | 橙色\_3 |
|
|
343
|
+
| `chromeAmberLighten_3` | 琥珀色\_3 |
|
|
344
|
+
| `chromeVioletLighten_3` | 紫色\_3 |
|
|
345
|
+
| `chromePinkLighten_3` | 粉色\_3 |
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## 其他通用结构
|
|
350
|
+
|
|
351
|
+
### Sort(排序参数)
|
|
352
|
+
|
|
353
|
+
| 参数 | 类型 | 必须 | 说明 |
|
|
354
|
+
| --- | --- | --- | --- |
|
|
355
|
+
| `field_title` | string | 是 | 需要排序的字段名称 |
|
|
356
|
+
| `desc` | bool | 否 | 是否降序排序,默认 false |
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# 智能表格 Webhook 真实场景示例
|
|
2
|
+
|
|
3
|
+
仅在需要构造 Webhook payload 时按需阅读。示例中的字段 ID 都是占位符,实际请求必须使用用户提供的 schema 中的字段 ID。
|
|
4
|
+
|
|
5
|
+
## 场景一:记录 Bug(文本、单选、成员、图片)
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"add_records": [
|
|
10
|
+
{
|
|
11
|
+
"values": {
|
|
12
|
+
"fABCD1": "登录页在 Safari 浏览器下加载后白屏,其他浏览器正常。",
|
|
13
|
+
"fABCD2": [{"text": "前端"}],
|
|
14
|
+
"fABCD3": [{"text": "严重"}],
|
|
15
|
+
"fABCD4": [{"user_id": "wangwu"}],
|
|
16
|
+
"fABCD5": [{"title": "safari-bug-screenshot.png", "image_base64": "iVBORw0KGgo..."}]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
图片只传纯 base64,不带 `data:image/...;base64,` 前缀。
|
|
24
|
+
|
|
25
|
+
## 场景二:记录任务(文本、日期、成员、单选、空图片)
|
|
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
|
+
"fIMAGE": []
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
成员字段:
|
|
44
|
+
|
|
45
|
+
- 有 userid 时使用 `[{"user_id":"账号名"}]`。
|
|
46
|
+
- 只有姓名时可使用 `["张三"]`,但无法匹配时不会写入;可先通过 `wecomcli-contact` 查询 userid。
|
|
47
|
+
- 暂不指定时使用 `[]`。
|
|
48
|
+
|
|
49
|
+
图片字段暂无图片时使用 `[]`。文件附件字段不受 Webhook 支持,应跳过而不是用空数组尝试写入。
|
|
50
|
+
|
|
51
|
+
## 场景三:批量新增多条记录
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"add_records": [
|
|
56
|
+
{
|
|
57
|
+
"values": {
|
|
58
|
+
"fCUST_NAME": "张伟",
|
|
59
|
+
"fCOMPANY": "北京某科技有限公司",
|
|
60
|
+
"fSTAGE": [{"text": "跟进中"}],
|
|
61
|
+
"fSOURCE": [{"text": "展会"}]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"values": {
|
|
66
|
+
"fCUST_NAME": "陈静",
|
|
67
|
+
"fCOMPANY": "上海某贸易有限公司",
|
|
68
|
+
"fSTAGE": [{"text": "初步接触"}],
|
|
69
|
+
"fSOURCE": [{"text": "冷呼"}]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"values": {
|
|
74
|
+
"fCUST_NAME": "刘洋",
|
|
75
|
+
"fCOMPANY": "广州某制造有限公司",
|
|
76
|
+
"fSTAGE": [{"text": "已成交"}],
|
|
77
|
+
"fSOURCE": [{"text": "老客户转介绍"}]
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
超过 100 条时先按 `SKILL.md` 取得用户确认;每批不超过 500 条,并遵守频率限制。
|
|
85
|
+
|
|
86
|
+
## 场景四:更新一条 Webhook 记录
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"update_records": [
|
|
91
|
+
{
|
|
92
|
+
"record_id": "REC_20250301",
|
|
93
|
+
"values": {
|
|
94
|
+
"fSTATUS": [{"text": "已完成"}],
|
|
95
|
+
"fPROGRESS": 100
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
只能更新此前通过 Webhook 写入的记录。人工创建或通过普通接口创建的记录无法使用此方式更新。
|
|
103
|
+
|
|
104
|
+
## 场景五:批量更新 Webhook 记录
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"update_records": [
|
|
109
|
+
{"record_id": "REC_001", "values": {"fSTATUS": [{"text": "已通过"}], "fAPPROVER": [{"user_id": "manager_a"}]}},
|
|
110
|
+
{"record_id": "REC_002", "values": {"fSTATUS": [{"text": "已通过"}], "fAPPROVER": [{"user_id": "manager_a"}]}},
|
|
111
|
+
{"record_id": "REC_003", "values": {"fSTATUS": [{"text": "已通过"}], "fAPPROVER": [{"user_id": "manager_a"}]}}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 场景六:销售订单(多种字段类型)
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"add_records": [
|
|
121
|
+
{
|
|
122
|
+
"values": {
|
|
123
|
+
"fCUSTOMER": "北京某科技有限公司",
|
|
124
|
+
"fPRODUCT": [{"text": "企业版"}],
|
|
125
|
+
"fAMOUNT": 58000,
|
|
126
|
+
"fSIGN_DATE": "1741622400000",
|
|
127
|
+
"fSALES": [{"user_id": "zhaoliu"}],
|
|
128
|
+
"fCONTRACT": [{"text": "合同文件", "link": "https://doc.example.com/contract/2025-001"}]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 场景七:会议纪要(文本、日期、链接)
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"add_records": [
|
|
140
|
+
{
|
|
141
|
+
"values": {
|
|
142
|
+
"fMEETING_TITLE": "支付模块需求评审会",
|
|
143
|
+
"fDATE": "1741622400000",
|
|
144
|
+
"fPARTICIPANTS": "产品、开发、测试",
|
|
145
|
+
"fSUMMARY": "确定优先开发支付模块,目标 3 月底完成联调,4 月初上线。",
|
|
146
|
+
"fDOC_LINK": [{"text": "评审文档", "link": "https://doc.example.com/meeting/20250310"}]
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 场景八:同一请求新增并更新
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"add_records": [
|
|
158
|
+
{
|
|
159
|
+
"values": {
|
|
160
|
+
"fTITLE": "用户反馈收集与分析",
|
|
161
|
+
"fSTATUS": [{"text": "未开始"}],
|
|
162
|
+
"fPRIORITY": [{"text": "高"}]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
"update_records": [
|
|
167
|
+
{
|
|
168
|
+
"record_id": "REC_OLD_001",
|
|
169
|
+
"values": {
|
|
170
|
+
"fSTATUS": [{"text": "已完成"}],
|
|
171
|
+
"fPROGRESS": 100
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
```
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# 智能表格 Webhook 兜底写入
|
|
2
|
+
|
|
3
|
+
本文档是 `wecom-cli smartsheet records add` / `wecom-cli smartsheet records update` 的 fallback 参考。当 CLI 因企业规模限制无法写入智能表格时,通过企业微信智能表格 Webhook 直接写入数据。
|
|
4
|
+
|
|
5
|
+
> **格式隔离**:本文的字段值格式只适用于 Webhook,与 CLI `records add` / `records update` 使用的 `references/smart-sheet-record-values.md` 格式不同。文本、链接、图片、日期等写法均可能不同,禁止混用。
|
|
6
|
+
|
|
7
|
+
## 一、Fallback 触发流程
|
|
8
|
+
|
|
9
|
+
### 何时切换到 Webhook
|
|
10
|
+
|
|
11
|
+
先走 CLI 正常链路。仅在以下情况切换:
|
|
12
|
+
|
|
13
|
+
- 优先判据:CLI 返回 `errcode: 851003`,或 `errmsg` 包含 `no authority`。这通常意味着企业可见范围超过 10 人,CLI 写入接口被限制。
|
|
14
|
+
- 或错误信息明确指向企业规模、可见范围或成员数超限。
|
|
15
|
+
- 参数错误、字段错误、文档不存在等其他错误不切换 Webhook,应按原错误排查。
|
|
16
|
+
- 仅 `records add` 与 `records update` 支持此兜底;删除记录或修改表结构不走 Webhook。
|
|
17
|
+
|
|
18
|
+
### 向用户临时索取两项信息
|
|
19
|
+
|
|
20
|
+
触发切换后,每次对话内临时获取,用完即弃,不写入文件、配置、日志说明或其他持久化位置:
|
|
21
|
+
|
|
22
|
+
1. **Webhook 完整 URL**
|
|
23
|
+
- 在智能表格右上角菜单选择「接收外部数据」→ 选择目标工作表 → 开启 → 复制。
|
|
24
|
+
- 格式形如 `https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key=XXXXXX`。
|
|
25
|
+
- URL 相当于目标表的写入密钥;用户可关闭「接收外部数据」使其失效,不得在回复中回显完整 URL 或 key。
|
|
26
|
+
2. **schema 示例 JSON**
|
|
27
|
+
- 从同一「接收外部数据」页面复制。
|
|
28
|
+
- 内容包含字段 ID 到字段名的映射(`schema`),以及各字段的 Webhook 写入格式示例(`add_records`)。
|
|
29
|
+
|
|
30
|
+
示例:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"schema": {
|
|
35
|
+
"fABCD1": "任务名称",
|
|
36
|
+
"fABCD2": "状态",
|
|
37
|
+
"fABCD3": "负责人",
|
|
38
|
+
"fABCD4": "截止日期"
|
|
39
|
+
},
|
|
40
|
+
"add_records": [
|
|
41
|
+
{
|
|
42
|
+
"values": {
|
|
43
|
+
"fABCD1": "示例任务",
|
|
44
|
+
"fABCD2": [{"text": "未开始"}],
|
|
45
|
+
"fABCD3": [{"user_id": ""}],
|
|
46
|
+
"fABCD4": "1742400000000"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
可使用以下话术:
|
|
54
|
+
|
|
55
|
+
> CLI 写入接口返回了 `851003 no authority`,通常是企业可见范围超过 10 人导致的限制。请把目标表的 Webhook 地址和「接收外部数据」页面的示例 JSON 发我,我会通过 Webhook 写入;这些信息仅在本轮使用,不会保存到本地。
|
|
56
|
+
|
|
57
|
+
## 二、构建并发送请求
|
|
58
|
+
|
|
59
|
+
### 字段匹配
|
|
60
|
+
|
|
61
|
+
从用户提供的 `schema` 将自然语言字段名映射到字段 ID:
|
|
62
|
+
|
|
63
|
+
- 可基于近义词匹配,例如「标题」对应标题、名称或主题,「状态」对应状态或阶段,「处理人」对应负责人或责任人。
|
|
64
|
+
- 匹配不唯一时先向用户确认,禁止猜测字段。
|
|
65
|
+
- `values` 的 key 必须使用 schema 中真实存在的字段 ID。
|
|
66
|
+
|
|
67
|
+
需要更多 payload 示例时,按需阅读 `smart-sheet-webhook-examples.md`。
|
|
68
|
+
|
|
69
|
+
### 日期处理
|
|
70
|
+
|
|
71
|
+
用户输入「今天」「明天」「3 月 15 日」或 `2025-03-01 09:00` 等自然语言日期时,根据当前日期及时区换算为毫秒时间戳字符串,例如 `"1742400000000"`。Webhook 不接受 CLI 使用的可读日期字符串。
|
|
72
|
+
|
|
73
|
+
### 请求结构
|
|
74
|
+
|
|
75
|
+
Webhook 是标准 HTTP 接口,不经过 `wecom-cli`。使用当前环境可用的 HTTP 客户端发送请求:
|
|
76
|
+
|
|
77
|
+
| 项 | 值 |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| Method | `POST` |
|
|
80
|
+
| URL | 用户提供的 Webhook 完整 URL(含 `?key=XXX`) |
|
|
81
|
+
| Header | `Content-Type: application/json` |
|
|
82
|
+
| Body | 包含 `add_records` 和/或 `update_records` 的 JSON 对象 |
|
|
83
|
+
|
|
84
|
+
不要把包含 Webhook URL 的命令写入脚本或仓库文件,也不要把完整 URL 输出给用户。
|
|
85
|
+
|
|
86
|
+
仅新增:
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"add_records": [
|
|
91
|
+
{"values": {"fABCD1": "...", "fABCD2": [{"text": "..."}]}}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
仅更新:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"update_records": [
|
|
101
|
+
{"record_id": "REC_xxx", "values": {"fABCD2": [{"text": "已完成"}]}}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Webhook 只能更新此前通过 Webhook 写入的记录,人工创建或通过普通接口创建的记录无法更新。
|
|
107
|
+
|
|
108
|
+
同一请求同时新增和更新:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"add_records": [{"values": {"fABCD1": "..."}}],
|
|
113
|
+
"update_records": [{"record_id": "REC_xxx", "values": {"fABCD2": [{"text": "已完成"}]}}]
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 结果处理
|
|
118
|
+
|
|
119
|
+
- Webhook 返回成功后,按 `references/smart-sheet-read.md` 读取目标数据,确认真实状态与预期一致。
|
|
120
|
+
- 向用户简洁说明已通过 Webhook 写入;遵守 `SKILL.md` 的交互规范,不在回复中暴露内部 ID。
|
|
121
|
+
- 返回非 0 `errcode` 时按下方错误码处理,不盲目重试。
|
|
122
|
+
|
|
123
|
+
## 三、Webhook 字段值格式
|
|
124
|
+
|
|
125
|
+
| 字段类型 | value 示例 | 说明 |
|
|
126
|
+
| --- | --- | --- |
|
|
127
|
+
| 文本 | `"产品登录页白屏"` 或 `[{"type":"text","text":"产品登录页白屏"}]` | 简单字符串更简洁 |
|
|
128
|
+
| 数字 / 货币 | `58000` | 使用数字,不加引号 |
|
|
129
|
+
| 进度 / 百分数 | `30` | `30` 表示 30%;不要传 `0.3` |
|
|
130
|
+
| 复选框 | `true` / `false` | JSON 布尔值 |
|
|
131
|
+
| 日期 | `"1740806400000"` | 毫秒时间戳字符串 |
|
|
132
|
+
| 成员 | `[{"user_id":"lisi"}]`、`["张三"]` 或 `[]` | 优先使用 userid;不指定时传空数组 |
|
|
133
|
+
| 单选 | `[{"text":"已完成"}]` | 选项文本必须与表格预设完全一致 |
|
|
134
|
+
| 多选 | `[{"text":"前端"},{"text":"后端"}]` | 每个选项一个对象 |
|
|
135
|
+
| 链接 | `[{"text":"需求文档","link":"https://doc.example.com"}]` | 数组格式 |
|
|
136
|
+
| 地理位置 | `[{"latitude":"31.23040","longitude":"121.47370","source_type":1,"title":"上海市徐汇区"}]` | 最多一条 |
|
|
137
|
+
| 图片 | `[{"title":"screenshot.png","image_base64":"iVBORw0KGgo..."}]` | 只传纯 base64,不带 `data:image/...;base64,` 前缀 |
|
|
138
|
+
| 电话 / 邮箱 / 条码 | `"13800138000"` | 字符串 |
|
|
139
|
+
|
|
140
|
+
## 四、不支持的字段
|
|
141
|
+
|
|
142
|
+
以下字段由系统维护或结构特殊,Webhook 写入时跳过,不要因为这些字段中止整次写入:
|
|
143
|
+
|
|
144
|
+
公式、自动编号、查找引用、关联字段、创建人、最后编辑人、创建时间、最后编辑时间、群聊、文件附件。
|
|
145
|
+
|
|
146
|
+
## 五、频率与批量限制
|
|
147
|
+
|
|
148
|
+
- 单工作表不超过 3000 条/分钟。
|
|
149
|
+
- 单文档不超过 10000 条/分钟。
|
|
150
|
+
- 数据量大时分批发送,每批不超过 500 条。
|
|
151
|
+
- 同时遵守 `SKILL.md` 中超过 100 条写入前必须获得用户确认的规则。
|
|
152
|
+
|
|
153
|
+
## 六、常见错误码
|
|
154
|
+
|
|
155
|
+
| errcode | 原因 | 处理方式 |
|
|
156
|
+
| --- | --- | --- |
|
|
157
|
+
| `2023033` | 图片 base64 带有 `data:image/...;base64,` 前缀 | 去掉前缀,只传纯 base64 |
|
|
158
|
+
| `40014` | Webhook key 无效或已过期 | 请用户重新从「接收外部数据」获取 Webhook 地址 |
|
|
159
|
+
| `45033` | 超出频率限制 | 降低速率或缩小批次 |
|
|
160
|
+
| `-100035` | testapi 域名不稳定或超时 | 改用正式域名 `qyapi.weixin.qq.com` |
|
|
161
|
+
| `2023001` | 字段 ID 不存在 | 对照用户提供的 schema 检查字段 ID |
|
|
162
|
+
| `2023010` | 单选或多选的值不在预设列表 | 确认选项文本完全一致,包括大小写 |
|
|
163
|
+
| `2023012` | 更新时 record_id 不存在或不可更新 | 只更新此前通过 Webhook 写入的记录 |
|
|
164
|
+
|
|
165
|
+
## 七、参考文件
|
|
166
|
+
|
|
167
|
+
- 真实场景示例:`smart-sheet-webhook-examples.md`
|
|
168
|
+
|
|
169
|
+
仅在需要示例时阅读,避免每次加载无关内容。
|