@amaster.ai/pi-lark 0.1.13 → 0.1.15

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 (74) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/references/lark-apps-local-dev.md +1 -1
  3. package/skills/lark-base/SKILL.md +4 -3
  4. package/skills/lark-base/references/lark-base-app.md +2 -2
  5. package/skills/lark-base/references/lark-base-dashboard-block-config.md +1 -1
  6. package/skills/lark-base/references/lark-base-workflow-schema.md +92 -14
  7. package/skills/lark-base/references/lark-base-workflow.md +99 -3
  8. package/skills/lark-calendar/SKILL.md +55 -22
  9. package/skills/lark-calendar/references/lark-calendar-list-attendees.md +33 -0
  10. package/skills/lark-calendar/references/lark-calendar-meeting-relation.md +99 -0
  11. package/skills/lark-calendar/references/lark-calendar-meeting.md +1 -1
  12. package/skills/lark-calendar/references/lark-calendar-recurring.md +64 -66
  13. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +7 -1
  14. package/skills/lark-doc/SKILL.md +1 -1
  15. package/skills/lark-doc/references/lark-doc-create-workflow.md +8 -10
  16. package/skills/lark-doc/references/lark-doc-script.md +11 -17
  17. package/skills/lark-drive/references/lark-drive-comment-location.md +1 -1
  18. package/skills/lark-drive/references/lark-drive-inspect.md +1 -1
  19. package/skills/lark-drive/references/lark-drive-permission-guide.md +1 -1
  20. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +1 -1
  21. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +1 -1
  22. package/skills/lark-im/SKILL.md +7 -1
  23. package/skills/lark-im/references/lark-im-chat-messages-list.md +6 -1
  24. package/skills/lark-im/references/lark-im-messages-mget.md +19 -2
  25. package/skills/lark-im/references/lark-im-messages-resources-download.md +3 -1
  26. package/skills/lark-im/references/lark-im-messages-search.md +1 -1
  27. package/skills/lark-im/references/lark-im-threads-messages-list.md +5 -1
  28. package/skills/lark-mail/SKILL.md +19 -8
  29. package/skills/lark-mail/references/lark-mail-draft-create.md +1 -1
  30. package/skills/lark-mail/references/lark-mail-draft-edit.md +1 -1
  31. package/skills/lark-mail/references/lark-mail-forward.md +1 -1
  32. package/skills/lark-mail/references/lark-mail-reply-all.md +1 -1
  33. package/skills/lark-mail/references/lark-mail-reply.md +1 -1
  34. package/skills/lark-mail/references/lark-mail-rules.md +87 -4
  35. package/skills/lark-mail/references/lark-mail-send.md +1 -1
  36. package/skills/lark-mail/references/lark-mail-thread-modify.md +73 -0
  37. package/skills/lark-mail/references/lark-mail-thread-trash.md +62 -0
  38. package/skills/lark-mail/references/lark-mail-watch.md +1 -1
  39. package/skills/lark-meeting/SKILL.md +2 -2
  40. package/skills/lark-meeting/references/lark-minutes-search.md +2 -2
  41. package/skills/lark-meeting/references/lark-vc-meeting-events.md +3 -2
  42. package/skills/lark-meeting/references/lark-vc-search.md +10 -7
  43. package/skills/lark-meeting/scenes/create-and-edit-minutes.md +4 -0
  44. package/skills/lark-meeting/scenes/query-meeting-and-artifacts.md +3 -3
  45. package/skills/lark-okr/SKILL.md +38 -29
  46. package/skills/lark-okr/references/lark-okr-comment-create.md +103 -0
  47. package/skills/lark-okr/references/lark-okr-comment-delete.md +59 -0
  48. package/skills/lark-okr/references/lark-okr-comment-detail.md +80 -0
  49. package/skills/lark-okr/references/lark-okr-comment-get.md +66 -0
  50. package/skills/lark-okr/references/lark-okr-comment-list.md +79 -0
  51. package/skills/lark-okr/references/lark-okr-comment-patch.md +73 -0
  52. package/skills/lark-okr/references/lark-okr-comment-solve-reopen.md +83 -0
  53. package/skills/lark-okr/references/lark-okr-entities.md +66 -2
  54. package/skills/lark-shared/references/lark-wiki-token-routing.md +7 -7
  55. package/skills/lark-sheets/SKILL.md +4 -1
  56. package/skills/lark-sheets/references/lark-sheets-batch-update.md +3 -3
  57. package/skills/lark-sheets/references/lark-sheets-chart.md +66 -32
  58. package/skills/lark-sheets/references/lark-sheets-legacy-command-migration.md +152 -0
  59. package/skills/lark-sheets/references/lark-sheets-read-data.md +2 -2
  60. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +6 -3
  61. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -17
  62. package/skills/lark-sheets/scripts/lark_chart_quality_check.py +1524 -0
  63. package/skills/lark-sheets/scripts/lark_chart_size_advisor.py +408 -0
  64. package/skills/lark-sheets/scripts/lark_chart_size_rules.py +292 -0
  65. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +1 -1
  66. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +1 -1
  67. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +1 -1
  68. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +333 -20
  69. package/skills/lark-wiki/SKILL.md +1 -2
  70. package/skills/lark-wiki/references/lark-wiki-move.md +3 -2
  71. package/skills/lark-wiki/references/lark-wiki-node-create.md +3 -2
  72. package/skills/lark-wiki/references/lark-wiki-node-delete.md +8 -4
  73. package/skills/lark-wiki/references/lark-wiki-node-get.md +7 -4
  74. package/skills/lark-sheets/scripts/lark_chart_layout_check.py +0 -472
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/pi-lark",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "Pi extension for Lark/Feishu workspace — calendar, docs, drive, sheets, tasks, mail and more via lark-cli.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -61,7 +61,7 @@
61
61
  "vitest": "^4.0.0"
62
62
  },
63
63
  "dependencies": {
64
- "@amaster.ai/pi-shared": "0.1.13"
64
+ "@amaster.ai/pi-shared": "0.1.15"
65
65
  },
66
66
  "scripts": {
67
67
  "fetch-skills": "node scripts/fetch-skills.mjs",
@@ -66,7 +66,7 @@ lark-cli apps +release-get --as user --app-id app_xxx --release-id <上一步返
66
66
 
67
67
  #### 首次开发(无 app,无代码)
68
68
 
69
- `+create(html)` → `+init` → 加载 [`creative-design`](../creative-design/SKILL.md) skill 在 repo 根目录产出文件 → `git add .` + `git commit` → `git push origin sprint/default` → `+release-create` → `+release-get`。
69
+ `+create(html)` → `+init` → 加载 [`creative-design`](../creative-design/creative-design.md) skill 在 repo 根目录产出文件 → `git add .` + `git commit` → `git push origin sprint/default` → `+release-create` → `+release-get`。
70
70
 
71
71
  ```bash
72
72
  lark-cli apps +create --name "活动页" --app-type html --as user
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lark-base
3
- version: 1.2.21
3
+ version: 1.2.22
4
4
  description: "飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。"
5
5
  metadata:
6
6
  requires:
@@ -209,8 +209,9 @@ Form 依附于 Table,以 Field 作为题目,每次有效提交会创建一
209
209
 
210
210
  1. **读取 Table 中的表单配置:** 使用 `+form-list` / `+form-get` 读取表单,使用 `+form-questions-list` 读取题目配置;这些命令使用表单所属的 `base_token + table_id`。
211
211
  2. **创建或修改 Table 中的表单配置:** 使用 `+form-create` / `+form-update` / `+form-delete` 管理表单;题目由 Table Field 承载,question ID 对应 `field_id`,创建和更新分别读取 [questions create](references/lark-base-form-questions-create.md) / [questions update](references/lark-base-form-questions-update.md),删除使用 `+form-questions-delete`。
212
- 3. **管理表单分享:** 使用 `+form-share-get` / `+form-share-update` 管理启停、访问范围和匿名/登录要求;更新前先读取现状,每次只修改一个字段,布尔值显式传 `true` 或 `false`。
213
- 4. **填写分享表单并提交:** 对表单分享链接使用 `+url-resolve` 取得 `share_token`,按 [Form detail](references/lark-base-form-detail.md) 执行 `+form-detail` 读取真实题目、必填项和显示条件,再按 [Form submit](references/lark-base-form-submit.md) 构造字段与附件并执行 `+form-submit`。
212
+ 3. **调整表单题目显隐和顺序:** Form 在 `visible_fields` 接口中作为 View,`form_id` 传给 `--view-id`。用 `+view-get-visible-fields` 读取当前可见题目,再用 `+view-set-visible-fields` 提交最终需要展示的完整有序题目 ID 列表;省略当前可见题目会隐藏它,加入已有隐藏 Form 成员会重新展示,空列表会隐藏全部题目。目标只能包含已有 Form 成员;仍显示题目的 `visible_rule` 只能引用位于它之前的可见题目。
213
+ 4. **管理表单分享:** 使用 `+form-share-get` / `+form-share-update` 管理启停、访问范围和匿名/登录要求;更新前先读取现状,每次只修改一个字段,布尔值显式传 `true` 或 `false`。
214
+ 5. **填写分享表单并提交:** 对表单分享链接使用 `+url-resolve` 取得 `share_token`,按 [Form detail](references/lark-base-form-detail.md) 执行 `+form-detail` 读取真实题目、必填项和显示条件,再按 [Form submit](references/lark-base-form-submit.md) 构造字段与附件并执行 `+form-submit`。
214
215
 
215
216
  表单题目和字段的关系:
216
217
 
@@ -23,7 +23,7 @@
23
23
  当前 CLI 只支持用 `+workspace-move-in` 把 Base 或 BaseApp 移入 Workspace,不支持从 Workspace 移出或移除资源,也没有 `workspace move-out` / `workspace remove` 命令。这类请求必须先完成只读定位,再说明限制并停止,顺序不可调换:
24
24
 
25
25
  1. Workspace URL 含 `/base/workspace/<workspace_token>` 时,提取其中的真实 `workspace_token`,不要把完整 URL 当作命令参数。
26
- 2. 在同一轮立即执行 `lark-cli base +workspace-entity-list --workspace-token <workspace_token> --page-size 100 --as user`;若 `has_more=true`,继续分页直到完整。该查询是必要的只读定位步骤,不要把它留成等待用户再次选择的可选项,也不要用 `--help` 代替真实查询。
26
+ 2. 在同一轮立即执行 `lark-cli base +workspace-entity-list --workspace-token <workspace_token> --page-size 30 --as user`;若 `has_more=true`,继续分页直到完整。该查询是必要的只读定位步骤,不要把它留成等待用户再次选择的可选项,也不要用 `--help` 代替真实查询。
27
27
  3. 用服务端返回的 `entities[].name`、`entity_type`、`token` 和 `url` 忠实判断目标。名称完全匹配时报告真实对象;没有完全匹配时明确说明不存在精确同名实体,并原样列出可能相关的候选。不得自动去掉或补齐前后缀,也不得仅凭名称相似就声称已经定位目标。用户直接给出 token 时仍要忠实报告该 token 对应的实际名称。
28
28
  4. 定位结果报告完后,明确说明当前 CLI 无法执行 Workspace 移出/移除,并停止,不要发起任何写请求。用户在任一步骤中取消时立即停止,取消后不再调用工具。
29
29
 
@@ -55,7 +55,7 @@ lark-cli base +app-get --app-token <app_token>
55
55
  lark-cli base +workspace-entity-list \
56
56
  --workspace-token <workspace_token> \
57
57
  --type baseapp \
58
- --page-size 100
58
+ --page-size 30
59
59
  ```
60
60
 
61
61
  - 响应中的 `pages` 是页面摘要。
@@ -224,7 +224,7 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
224
224
  - `group_by[].sort.type` 为 `group` 或 `view` 且缺少 `order` 时,自动补 `order:"asc"`;`value` 排序不会自动补方向
225
225
  - 本地校验(可通过 `--no-validate` 跳过)
226
226
  - `+dashboard-block-create` 默认对 `data_config` 做轻量校验;失败会聚合错误并给出修复建议
227
- - `+dashboard-block-update` 不带 `--type`,所以不做按组件类型的强校验,字段由后端验证;但 `number_format` 子字段与 create 一样本地拦截(见下方 number_format 小节)
227
+ - `+dashboard-block-update` 不带 `--type`,所以不做按组件类型的强校验;但会对可解析的 `filter` 条件做轻量校验,包括 `conjunction`、字段引用、`operator` 和必需的 `value`,并与 create 一样拦截非法 `number_format` 子字段(见下方 number_format 小节)
228
228
  - 仅需传入合法 JSON;CLI 不会擅自改写你的业务含义
229
229
 
230
230
  ## 可复制模板
@@ -108,9 +108,8 @@
108
108
  | 需求描述 | 触发器 |
109
109
  |---------|--------|
110
110
  | 新增记录时 | `AddRecordTrigger` |
111
- | 字段变为特定值时(**仅修改**) | `SetRecordTrigger` |
112
- | **新增或修改**都触发 | `ChangeRecordTrigger` |
113
- | 拿不准用哪个 | `ChangeRecordTrigger` |
111
+ | 指定字段发生修改时(仅修改,可限定修改后的值) | `SetRecordTrigger` |
112
+ | 新增或修改记录,且满足配置的筛选条件时 | `ChangeRecordTrigger` |
114
113
 
115
114
  > ⚠️ `SetRecordTrigger` 仅监听修改,`ChangeRecordTrigger` 同时监听新增 + 修改。
116
115
 
@@ -125,6 +124,7 @@
125
124
  | `Delay` | 延迟 |
126
125
  | `LarkMessageAction` | 发送飞书消息 |
127
126
  | `GenerateAiTextAction` | AI 生成文本 |
127
+ | `AIAnalysisAction` | AI 分析 |
128
128
 
129
129
  > 所有 Action 节点**请勿设置** `children` ,通过 `next` 串联后继。
130
130
 
@@ -134,6 +134,7 @@
134
134
  |------|------|
135
135
  | `IfElseBranch` | 条件分支,`children.links` 含 `if_true` 和 `if_false` |
136
136
  | `SwitchBranch` | 多路分支,`children.links` 含多个 `case` |
137
+ | `AIClassificationBranch` | AI 分类分支,`children.links` 含多个 `case` |
137
138
 
138
139
  ### System 类型
139
140
 
@@ -153,7 +154,7 @@
153
154
  "table_name": "订单表",
154
155
  "watched_field_name": "状态",
155
156
  "trigger_control_list": ["pasteUpdate", "automationBatchUpdate"],
156
- "condition_list": [] /* AndCondition 数组 */
157
+ "condition_list": [] /* AndCondition 数组 */
157
158
  }
158
159
  ```
159
160
 
@@ -162,7 +163,7 @@
162
163
  | `table_name` | 是 | 监控的数据表名 |
163
164
  | `watched_field_name` | 是 | 监控的字段名 |
164
165
  | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` / `openAPIBatchUpdate` |
165
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
166
+ | `condition_list` | 否 | 数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
166
167
 
167
168
  ### ChangeRecordTrigger
168
169
 
@@ -170,15 +171,26 @@
170
171
  {
171
172
  "table_name": "任务表",
172
173
  "trigger_control_list": [],
173
- "condition": null
174
+ "condition_list": [
175
+ {
176
+ "conjunction": "and",
177
+ "conditions": [
178
+ {
179
+ "field_name": "预计工时",
180
+ "operator": "isGreater",
181
+ "value": [{ "value_type": "number", "value": 0 }]
182
+ }
183
+ ]
184
+ }
185
+ ]
174
186
  }
175
187
  ```
176
188
 
177
- | 字段 | 必填 | 说明 |
178
- |------|------|------|
179
- | `table_name` | 是 | 监控的数据表名 |
189
+ | 字段 | 必填 | 说明 |
190
+ |------|------|---------------------------------------------------------------------------------|
191
+ | `table_name` | 是 | 监控的数据表名 |
180
192
  | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` |
181
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
193
+ | `condition_list` | 是 | 不能为空;数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
182
194
 
183
195
  ### SetRecordTrigger
184
196
 
@@ -202,7 +214,7 @@
202
214
  | `record_watch_info` | 否 | 记录级过滤条件(修改前值匹配),为空则监听全部 |
203
215
  | `field_watch_info` | 是 | 字段级监控条件列表,至少一个 |
204
216
  | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` |
205
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
217
+ | `condition_list` | 否 | 数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
206
218
 
207
219
  `FieldWatchItem`:
208
220
 
@@ -239,7 +251,7 @@
239
251
  {
240
252
  "table_name": "项目表",
241
253
  "field_name": "截止日期",
242
- "offset": 1,
254
+ "offset": -1,
243
255
  "unit": "DAY",
244
256
  "hour": 9,
245
257
  "minute": 0,
@@ -252,10 +264,10 @@
252
264
  | `table_name` | 是 | 数据表名 |
253
265
  | `field_name` | 是 | 日期字段名(必须为 `datetime` / `created_at` / `formula` / `lookup` 类型) |
254
266
  | `unit` | 是 | 偏移单位:`MINUTE` / `HOUR` / `DAY` / `WEEK` / `MONTH` |
255
- | `offset` | 是 | 提前/延后的偏移量(正数=提前,负数=延后;范围由 `unit` 决定):`MINUTE` ∈ {0, 5, 15, 30, -5, -15, -30};`HOUR` ∈ [-6, -1] ∪ [1, 6];`DAY` ∈ [-7, 7];`WEEK` ∈ [-7, -1] ∪ [1, 7];`MONTH` ∈ [-7, -1] ∪ [1, 7] |
267
+ | `offset` | 是 | 提前/延后的偏移量(触发时间 = 日期字段时间 + `offset` × `unit`,因此负数=提前、正数=延后;范围由 `unit` 决定):`MINUTE` ∈ {0, 5, 15, 30, -5, -15, -30};`HOUR` ∈ [-6, -1] ∪ [1, 6];`DAY` ∈ [-7, 7];`WEEK` ∈ [-7, -1] ∪ [1, 7];`MONTH` ∈ [-7, -1] ∪ [1, 7] |
256
268
  | `hour` | 是 | 触发小时 (0-23),默认 9 |
257
269
  | `minute` | 是 | 触发分钟 (0-59),默认 0 |
258
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
270
+ | `condition_list` | 否 | 数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
259
271
 
260
272
 
261
273
  ### ButtonTrigger
@@ -473,6 +485,26 @@
473
485
  |------|------|------|
474
486
  | `prompt` | 是 | TextRefItem[] 提示词,支持 `text` / `ref` |
475
487
 
488
+ ### AIAnalysisAction
489
+
490
+ ```json
491
+ {
492
+ "analysis_task": [
493
+ { "value_type": "text", "value": "分析昨日订单趋势、异常原因,并给出行动建议" }
494
+ ],
495
+ "analysis_table_names": ["订单表", "退款表"],
496
+ "identity_type": "maker",
497
+ "output_instruction": "先给结论,再列证据与行动建议"
498
+ }
499
+ ```
500
+
501
+ | 字段 | 必填 | 说明 |
502
+ |------|------|------|
503
+ | `analysis_task` | 是 | TextRefItem[] 分析任务,支持 `text` / `ref` 混排;至少包含一项有效内容 |
504
+ | `analysis_table_names` | 否 | string[] 分析数据范围;为空数组 `[]` 或省略时表示当前 Base 的全部数据表 |
505
+ | `identity_type` | 是 | 数据访问身份:`maker`(固定流程身份) / `triggerPersonal`(流程触发者) |
506
+ | `output_instruction` | 否 | 仅支持纯文本 |
507
+
476
508
 
477
509
  ## Branch data 详细结构
478
510
 
@@ -552,6 +584,45 @@
552
584
  | `name` | string | 分支名称 |
553
585
  | `condition` | OrGroup | 分支条件 |
554
586
 
587
+ ### AIClassificationBranch
588
+
589
+ `AIClassificationBranch` 用 AI 对 `content` 内容做分类,再通过 `children.links` 中的 `case` 边进入命中的后续步骤。`steps[].data` 使用公开 Agent Data 协议。
590
+
591
+ ```json
592
+ {
593
+ "classes": [
594
+ {
595
+ "name": "Bug",
596
+ "desc": "功能报错、异常、不可用或结果错误"
597
+ },
598
+ {
599
+ "name": "功能建议",
600
+ "desc": "希望新增能力或优化现有功能"
601
+ }
602
+ ],
603
+ "content": [
604
+ { "value_type": "text", "value": "请根据反馈内容判断类型:" },
605
+ { "value_type": "ref", "value": "$.step_trigger.fldFeedback" }
606
+ ],
607
+ "classification_rule": "信息不足时判定为无法匹配。"
608
+ }
609
+ ```
610
+
611
+ | 字段 | 必填 | 说明 |
612
+ |------|------|----------------------------------------------------------------------|
613
+ | `classes` | 是 | 分类列表,至少 2 项。每项包含 `name` 和 `desc` |
614
+ | `classes[].name` | 是 | 分类名称,需与对应普通 `children.links[].desc` 保持一致 |
615
+ | `classes[].desc` | 是 | 分类描述,可为空字符串,但字段必须存在 |
616
+ | `content` | 是 | TextRefItem[],用于分类的内容,支持 `text` / `ref` |
617
+ | `classification_rule` | 否 | 全局分类规则纯文本 |
618
+ | `no_match_action` | 否 | 无匹配策略。`classifyToOther`:进入默认分支;`fail`:当前节点失败。省略时使用 `classifyToOther` |
619
+
620
+ `children.links` 规则:
621
+ - 每个分类命中后要跳到哪个后续步骤,必须写在 children.links 中。
622
+ - 普通分类边使用 `kind: "case"` 和 `label: "branch_1"`、`branch_2` 等稳定标签;`desc` 与 `classes[i].name` 保持一致;`to` 指向该分类的入口 step。
623
+ - `no_match_action: "classifyToOther"` 时必须额外提供一条默认分支边:`{ "kind": "case", "label": "default", "desc": "默认分支", "to": "step_other_action" }`。
624
+ - `no_match_action: "fail"` 时不要提供默认分支边。
625
+
555
626
 
556
627
  ## System data 详细结构
557
628
 
@@ -788,6 +859,12 @@ HTTPClientAction 的输出取决于 `response_type`:
788
859
  |--------|------|----------|
789
860
  | (整体出参) | AI 生成的文本内容(不支持下钻,只能引用 `$.{stepId}`) | `$.{stepId}` |
790
861
 
862
+ ##### AIAnalysisAction(AI 分析)
863
+
864
+ | pathId | 说明 | 引用示例 |
865
+ |--------|------|----------|
866
+ | `analysisResult` | AI 分析结果字符串 | `$.{stepId}.analysisResult` |
867
+
791
868
  ##### 无输出的操作节点
792
869
 
793
870
  以下节点不产生任何可引用的输出数据:
@@ -887,6 +964,7 @@ $.{stepId}.{fieldId}.fileToken → 文件 Token 列表(array<string>,仅
887
964
  | SetRecordAction | 动作 | ✅ | 动态(用户配置的字段) |
888
965
  | HTTPClientAction | 动作 | ✅ | 动态(取决于用户配置的 HTTP 响应输出) |
889
966
  | GenerateAiTextAction | 动作 | ✅ | 静态(单 string) |
967
+ | AIAnalysisAction | 动作 | ✅ | 静态(`analysisResult`) |
890
968
  | Delay | 动作 | ❌ | 无输出 |
891
969
  | LarkMessageAction | 动作 | ❌ | 无输出 |
892
970
  | IfElseBranch | 分支 | ❌ | 无输出 |
@@ -57,9 +57,10 @@
57
57
  | 新增触发+通知 | AddRecordTrigger → LarkMessageAction | [下方](#示例1-新增记录触发--发送消息) |
58
58
  | 按钮点击+调用外部接口+写入日志 | ButtonTrigger → HTTPClientAction → AddRecordAction | [下方](#示例-6-按钮触发--调用外部接口--写入同步日志) |
59
59
  | 定时+循环 | TimerTrigger → FindRecordAction → Loop → LarkMessageAction | [下方](#示例2-定时触发--查找记录--循环遍历--发送消息) |
60
- | 条件判断 | ... → IfElseBranch → 分支处理 | [下方](#示例3-条件分支-ifelsebranch) |
61
- | 多路分类 | ... → SwitchBranch → 多分支处理 | [下方](#示例4-多路分支-switchbranch) |
62
- | 复杂组合 | 定时+查找+循环+分支+消息 | [下方](#示例5-组合场景-定时查找循环分支消息) |
60
+ | 条件判断 | ... → IfElseBranch → 分支处理 | [下方](#示例3-条件分支ifelsebranch) |
61
+ | 多路分类 | ... → SwitchBranch → 多分支处理 | [下方](#示例4-多路分支switchbranch) |
62
+ | 复杂组合 | 定时+查找+循环+分支+消息 | [下方](#示例5-组合场景定时查找循环分支消息) |
63
+ | AI 分类 | ... → AIClassificationBranch → 分类后处理 | [下方](#示例7-ai-分类用户反馈自动分流) |
63
64
 
64
65
  ---
65
66
 
@@ -741,6 +742,101 @@
741
742
 
742
743
  ---
743
744
 
745
+ ### 示例 7: AI 分类(用户反馈自动分流)
746
+
747
+ **场景**: 当用户反馈表新增记录时,AI 根据反馈内容分类为 Bug 或功能建议;无法判断时标记为待人工复核。
748
+
749
+ ```json
750
+ {
751
+ "client_token": "1704067206",
752
+ "title": "用户反馈自动分流",
753
+ "steps": [
754
+ {
755
+ "id": "step_trigger",
756
+ "type": "AddRecordTrigger",
757
+ "title": "新增反馈时触发",
758
+ "next": "step_ai_classify",
759
+ "data": {
760
+ "table_name": "用户反馈表",
761
+ "watched_field_name": "反馈详情"
762
+ }
763
+ },
764
+ {
765
+ "id": "step_ai_classify",
766
+ "type": "AIClassificationBranch",
767
+ "title": "AI 判断反馈类型",
768
+ "children": {
769
+ "links": [
770
+ { "kind": "case", "to": "step_bug_action", "label": "branch_1", "desc": "Bug" },
771
+ { "kind": "case", "to": "step_feature_action", "label": "branch_2", "desc": "功能建议" },
772
+ { "kind": "case", "to": "step_other_action", "label": "default", "desc": "默认分支" }
773
+ ]
774
+ },
775
+ "next": null,
776
+ "data": {
777
+ "classes": [
778
+ {
779
+ "name": "Bug",
780
+ "desc": "功能报错、异常、崩溃、无法使用或结果错误"
781
+ },
782
+ {
783
+ "name": "功能建议",
784
+ "desc": "希望新增能力或改变产品行为"
785
+ }
786
+ ],
787
+ "content": [
788
+ { "value_type": "ref", "value": "$.step_trigger.fldFeedbackDetail" }
789
+ ],
790
+ "classification_rule": "有明确故障现象时优先归入 Bug;同时包含多个诉求时,以最影响用户完成任务的问题为准;信息不足时进入默认分支。"
791
+ }
792
+ },
793
+ {
794
+ "id": "step_bug_action",
795
+ "type": "SetRecordAction",
796
+ "title": "标记为 Bug",
797
+ "next": null,
798
+ "data": {
799
+ "table_name": "用户反馈表",
800
+ "ref_info": { "step_id": "step_trigger" },
801
+ "field_values": [
802
+ { "field_name": "分类", "value": [{ "value_type": "text", "value": "Bug" }] }
803
+ ]
804
+ }
805
+ },
806
+ {
807
+ "id": "step_feature_action",
808
+ "type": "SetRecordAction",
809
+ "title": "标记为功能建议",
810
+ "next": null,
811
+ "data": {
812
+ "table_name": "用户反馈表",
813
+ "ref_info": { "step_id": "step_trigger" },
814
+ "field_values": [
815
+ { "field_name": "分类", "value": [{ "value_type": "text", "value": "功能建议" }] }
816
+ ]
817
+ }
818
+ },
819
+ {
820
+ "id": "step_other_action",
821
+ "type": "SetRecordAction",
822
+ "title": "标记为待人工复核",
823
+ "next": null,
824
+ "data": {
825
+ "table_name": "用户反馈表",
826
+ "ref_info": { "step_id": "step_trigger" },
827
+ "field_values": [
828
+ { "field_name": "分类", "value": [{ "value_type": "text", "value": "待人工复核" }] }
829
+ ]
830
+ }
831
+ }
832
+ ]
833
+ }
834
+ ```
835
+ **关键点**:
836
+ - `classes` 按顺序对应 `branch_1`、`branch_2`;`desc` 与分类名一致,`to` 指向已定义的下游 step;
837
+
838
+ ---
839
+
744
840
  ## 构造技巧
745
841
 
746
842
  ### Loop 构造要点
@@ -19,7 +19,7 @@ metadata:
19
19
  按**日程归属**选身份:
20
20
 
21
21
  - 查看/管理登录用户本人的日程 → `--as user`(默认,绝大多数场景)。
22
- - 查看/管理 bot 自己创建/拥有的日程 → `--as bot`
22
+ - 查看/管理 bot 自己创建/拥有的日程 → `--as bot`
23
23
 
24
24
  **对话人称映射**:「我」= 登录用户,「你」= 应用(bot);作为字段取值的人称(参会人、会议 owner 等)不参与身份判定,如「你创建日程,邀请我、会议 owner 为我」→ `--as bot` 创建,登录用户仅作参会人与会议 owner。
25
25
 
@@ -35,15 +35,17 @@ lark-cli calendar +agenda --as bot
35
35
  | Shortcut | 说明 |
36
36
  |----------|------|
37
37
  | `+agenda` | 查看日程安排(默认今天) |
38
- | [`+meeting`](references/lark-calendar-meeting.md) | 通过日程事件 ID 获取关联的视频会议信息(meeting_id、meeting_note),日程开过视频会议才会有meeting_id |
38
+ | [`+meeting`](references/lark-calendar-meeting.md) | 通过日程事件 ID 获取关联的视频会议信息(meeting_id、meeting_note),日程开过视频会议才会有meeting_id,**注意**: 视频会议链接获取走+get命令 |
39
39
  | [`+create`](references/lark-calendar-create.md) | 创建日程并邀请参会人(ISO 8601 时间) |
40
- | [`+update`](references/lark-calendar-update.md) | 更新既有日程字段,或独立增量添加/移除参会人和会议室 |
41
- | `+freebusy` | 查询用户主日历的忙闲信息和 RSVP 状态(纯查询场景;预约场景走 `+suggestion`) |
40
+ | [`+update`](references/lark-calendar-update.md) | 更新既有日程字段,或独立增量添加/移除参会人和会议室;重复性日程/例外必须传 `--apply-to`(详见 [重复性日程操作规范](references/lark-calendar-recurring.md)) |
41
+ | `+delete` | 删除日程;重复性日程/例外必须传 `--apply-to`(详见 [重复性日程操作规范](references/lark-calendar-recurring.md)) |
42
+ | `+freebusy` | 查询主日历的忙闲/RSVP状态/空闲时间段。(**如需预约/推荐时间段**走 `+suggestion`——它综合工作时间、忙碌区间和休息时间推荐。) |
42
43
  | [`+room-find`](references/lark-calendar-room-find.md) | 针对一个或多个**明确的**时间块查找可用会议室(无明确时间时禁止直接调用,需先走 +suggestion) |
43
44
  | [`+rsvp`](references/lark-calendar-rsvp.md) | 回复日程(接受/拒绝/待定) |
44
45
  | [`+join-event`](references/lark-calendar-join-event.md) | 凭分享 token 加入日程(分享链接/二维码/分享卡片/RSVP 卡片) |
45
46
  | [`+suggestion`](references/lark-calendar-suggestion.md) | 根据非明确时间或一段时间范围,推荐多个可用时间块方案 |
46
47
  | [`+transfer`](references/lark-calendar-transfer.md) | 把日程组织者转让给另一个用户或机器人;不可逆,需 `--yes` |
48
+ | [`+list-attendees`](references/lark-calendar-list-attendees.md) | 列出日程的参与人和会议室(支持按 `--type` 过滤:user / resource / chat / third_party) |
47
49
 
48
50
  ### `+get` — 单日程详情
49
51
 
@@ -56,6 +58,8 @@ lark-cli calendar +get --calendar-id <calendar_id> --event-id <event_id>
56
58
 
57
59
  日程描述统一使用 `description` 一个字段,按 **Markdown** 富文本处理。读取日程时 `description` 返回 Markdown 富文本(仅有纯文本描述时返回该纯文本);创建/更新日程时也通过 `--description` 传入 Markdown。
58
60
 
61
+ > `+get` 返回不含参会人和会议室。需要参与人视角(用户 / 会议室 / 群 / 三方邮箱)请调用 [`+list-attendees`](references/lark-calendar-list-attendees.md)。
62
+
59
63
  ### `+search-event` — 按关键词、时间范围和参会人搜索日程
60
64
 
61
65
  仅返回基础字段(`event_id`/`summary`/`start`/`end` 等),需要详情请走 `+get`。
@@ -69,6 +73,17 @@ lark-cli calendar +get --calendar-id <calendar_id> --event-id <event_id>
69
73
  lark-cli calendar +search-event --query "周会" --start 2026-04-20 --end 2026-04-27 --attendee-ids "ou_user1,oc_chat1,omm_room1" --page-token <page_token> --page-size 30
70
74
  ```
71
75
 
76
+ `--attendee-ids` 的多值语义:**同类型内为 OR(并集)**——只要日程命中列表中的任意一个同类型 ID,就会返回。
77
+
78
+ - `--attendee-ids "ou_A,ou_B"` = A **或** B 参加的日程(**不是** A 和 B 都参加的)。
79
+
80
+ ### `+delete` — 删除日程
81
+
82
+ ```bash
83
+ # calendar_id不传,默认primary
84
+ lark-cli calendar +delete --calendar-id <calendar_id> --event-id <event_id> --notify=true
85
+ ```
86
+
72
87
  ### `+agenda` — 查看近期日程安排
73
88
 
74
89
  默认查询当天。结果应整理为按日期分组、按开始时间升序的易读时间线。
@@ -83,20 +98,36 @@ lark-cli calendar +agenda --start 2026-03-10 --end 2026-03-17 --calendar-id <cal
83
98
  - 已取消的日程自动过滤;无日程时直接告知"日程清空"。
84
99
  - 时间范围超过 40 天会自动拆分查询并合并结果。
85
100
 
86
- ### `+freebusy` — 查询主日历忙闲时段和 RSVP 状态
101
+ ### `+freebusy` — 查询主日历忙闲时段 / 事件 / 公共空闲
87
102
 
88
- 仅返回忙碌时段起止时间,不含日程标题等隐私信息;其他订阅日历不在范围内。
103
+ `+freebusy` 一个入口承担四种视角:几何计算类(`busy` / `free` / `common_free`)走自动合并;事件维度类(`raw_busy`)保留每条上游日程 + `rsvp_status`。
89
104
 
90
105
  ```bash
91
106
  # start/end 时间范围(ISO 8601 / YYYY-MM-DD / Unix 秒),均可选;默认当天
92
- # user-id 目标用户 open_id(ou_ 前缀)可选;默认当前登录用户,bot 身份必须显式指定
93
- lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx
107
+ # user-id 目标用户 open_id,可重复或用逗号分隔;默认当前登录用户,bot 身份必须显式传至少一个
108
+ # type 视角四选一(默认 busy):
109
+ # busy 每个 user 合并后的忙碌区间(找空档、看忙碌时段)
110
+ # raw_busy 每个 user 的原始日程块 + rsvp_status(数会议、看每个会的 rsvp)
111
+ # free 每个 user 在时间窗内的空闲区间(可带 --min-duration 过滤)
112
+ # common_free 所有 user 的共同空闲区间(可带 --min-duration 过滤)
113
+ # min-duration 仅对 free / common_free 生效;Go duration 格式,例如 30m、1h、90m
114
+
115
+ # 查询忙碌时间段(去重并合并相邻/重叠段)
116
+ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-11 --user-id ou_a,ou_b --type busy
117
+
118
+ # 看别人有几个会、每个会的起止 + rsvp(不合并相邻/重叠段,带rsvp状态)
119
+ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-11 --user-id ou_a,ou_b --type raw_busy
120
+
121
+ # 查询用户空闲时间段
122
+ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-11 --user-id ou_a,ou_b --type free
123
+
124
+ # 多人公共空闲时间段(推荐替代手工合并)
125
+ lark-cli calendar +freebusy --start 2026-03-11T09:00:00+08:00 --end 2026-03-11T18:00:00+08:00 --user-id ou_a,ou_b --type common_free --min-duration 30m
94
126
  ```
95
127
 
96
128
  用法提示:
97
- - **仅判断是否有空** → `+freebusy`;**需要日程详情** → `+agenda`。
98
- - 检查多人可用性:分别调用并对比,找共同空闲。
99
- - 预约/改约场景下,调用规则(参与人过多、含群组、来自 `+suggestion` 等)详见 [schedule-clear-time.md § 查询忙闲](references/lark-calendar-schedule-clear-time.md#2-查询忙闲)。
129
+ - **`+freebusy` 只适用于查询忙碌/空闲时间段这一事实**。如果目标是"给会议**推荐**一个合适的时间段"(单人或多人),必须优先使用 [`+suggestion`](references/lark-calendar-suggestion.md)——它会综合**工作时间段、忙碌时间段、休息时间段**来推荐,`+freebusy` 只回答"哪些区间空着",不判断该区间是否适合排会。
130
+ - **多人公共空闲**:只想拿"哪些区间共同没被占"→ `--type common_free [--min-duration <dur>]`;想拿"推荐的会议时间段"→ 走 `+suggestion`。
100
131
 
101
132
  ## 前置条件路由
102
133
 
@@ -120,6 +151,9 @@ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx
120
151
  - **时间块 vs 时间范围**:时间块是具体确定的连续时间段(如 `14:00~15:00`),时间范围是泛指(如"今天下午")。`+room-find` 必须基于确定时间块,不能基于模糊范围。
121
152
  - **会议室(Room)**:"room"不是"房间",是"会议室"。会议室是日程的一种参与人(resource attendee),不能脱离日程单独预定。
122
153
  - **日程会议 ID(Meeting ID)**:日程的历史视频会议 ID,在日程上开过视频会议才会有。
154
+ - **日程分享链接 vs 会议链接**:两者是不同事物,不可混用。
155
+ - 日程分享链接:`https://<domain>/calendar/share?token=<token>`,指向日程本身,用于分享日程详情。**分享日程给某个人、某个群或粘贴到文档中,需要的都是这个日程分享链接(通过 `calendar events share_info` 获取),不是 applink**;禁止自己拼接 applink 或用 applink 代替。
156
+ - 会议链接:`https://<domain>/j/<number>`,指向视频会议入口;同一重复性日程序列的所有实例共用同一个会议链接。
123
157
 
124
158
  ## 术语映射
125
159
 
@@ -127,18 +161,20 @@ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx
127
161
 
128
162
  ## 意图路由
129
163
 
164
+ **日程与会议的关系**:用户口中的「会议」通常不区分日程和视频会议。定义、三种查询意图(当前/未来/过去)的分流规则见 [日程与视频会议的关系](references/lark-calendar-meeting-relation.md)。
165
+
130
166
  | 用户意图 | 路由到 |
131
167
  |----------|--------|
132
- | 查询过去的会议("昨天的会议""上周的会") | [`../lark-meeting/SKILL.md`](../lark-meeting/SKILL.md)(会议数据含即时会议,仅查日程会遗漏) |
133
- | 今天有哪些会议| 需要合并两部分内容:[`../lark-meeting/SKILL.md`](../lark-meeting/SKILL.md) 中的 `vc +search` 查询今天已结束的会议, `calendar +agenda` 查询进行中或未开始的日程。|
134
- | 查询日历/日程或未来时间的会议 | 本 skill |
168
+ | 查询过去的会议("昨天的会议""上周的会")/今天有哪些会议 / 当前正在开的会议 | 先读 [日程与视频会议的关系](references/lark-calendar-meeting-relation.md) |
169
+ | 未来的会议 / 明天/下周的会议 | 本 skill:视频会议不存在于未来,等价于查日程 |
135
170
  | 按关键词搜索日程 | 本 skill(`+search-event`) |
136
- | 从日程获取关联的视频会议 ID 或用户绑定的会议纪要文档 | 本 skill(`+meeting`) |
137
- | 把日程分享给某人 / 群 | 本 skill:先 `calendar events share_info` 取**日程分享链接**,再走 [lark-im](../lark-im/SKILL.md) 发送该链接;分享链接不是 applink,不要自己拼接或用 applink 代替 |
171
+ | 从日程获取关联的视频会议 ID 或用户绑定的会议纪要文档 | 本 skill([`+meeting`](references/lark-calendar-meeting.md)) |
172
+ | 查看日程的参会人 / 会议室(含 `--type resource` 只看会议室) | 本 skill([`+list-attendees`](references/lark-calendar-list-attendees.md)) |
173
+ | 把日程分享给某人 / 群 / 粘贴到文档 | 本 skill:先 `calendar events share_info` 取**日程分享链接**,再走 [lark-im](../lark-im/SKILL.md) 发送或粘贴该链接;**分享日程给某个人、某个群或粘贴到文档中,需要的都是日程分享链接,不是 applink**,不要自己拼接或用 applink 代替 |
138
174
  | 从日程进一步拿 AI 智能纪要 / 逐字稿 / 妙记产物 | 先 `+meeting` 取 `meeting_id`,再进入 [`lark-meeting`](../lark-meeting/SKILL.md):[`vc +detail`](../lark-meeting/references/lark-vc-detail.md) → [`note +detail`](../lark-meeting/references/lark-note-detail.md) / [`minutes +detail`](../lark-meeting/references/lark-minutes-detail.md) |
139
175
  | 预约/改约日程、调整时间、添加/更换会议室、查会议室 | 先判断新建 vs 编辑,再进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md) |
140
176
  | 仅编辑日程字段(标题/描述)或增删参会人(不涉及时间和会议室) | 先定位 `event_id`,再读 [+update](references/lark-calendar-update.md) 执行变更 |
141
- | 编辑/删除重复性日程(「改这个重复日程」「删掉后面的」「全部取消」等) | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md),确认操作范围后执行 |
177
+ | 编辑/删除重复性日程(「改这个重复日程」「删掉后面的」「全部取消」等) | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md);`+update` / `+delete` 均通过 `--apply-to=single|all|this-and-following` 指定范围 |
142
178
  | 转让日程组织者(「把这个日程交给 XX」「组织者改成 XX」「这个会转给我」「bot 建完还给我」) | 读 [+transfer](references/lark-calendar-transfer.md);`--as` 用**当前组织者**身份,`--to-user-id` 传接收人,用户和机器人任意互转 |
143
179
 
144
180
  ## 任务类型分流
@@ -170,9 +206,6 @@ lark-cli calendar <resource> <method> [flags]
170
206
  # 查询用户主日历
171
207
  lark-cli calendar calendars primary
172
208
 
173
- # 获取日程详情及 app_link
174
- lark-cli calendar events get --calendar-id <calendar_id> --event-id <event_id>
175
-
176
209
  # 获取日程分享链接(分享给他人/群前必须先拿到)
177
210
  # 返回形如 {{domain}}/calendar/share?token=<token> 的分享链接,不是 applink;直接把该链接发给对方(对方可凭链接中的 token 走 +join-event 加入)
178
211
  lark-cli calendar events share_info --calendar-id <calendar_id> --event-id <event_id>
@@ -194,8 +227,8 @@ lark-cli calendar events delete --calendar-id <calendar_id> --event-id <event_id
194
227
  ## 常用其他域命令
195
228
 
196
229
  ```bash
197
- # 搜索用户,更多参数详见 lark-contact
198
- lark-cli contact +search-user --query <query> --as user
230
+ # 批量搜索多个用户,更多参数详见 lark-contact
231
+ lark-cli contact +search-user --queries "<q1>,<q2>" --as user
199
232
 
200
233
  # 搜索群聊,更多参数详见 lark-im
201
234
  lark-cli im +chat-search --query <query> --as user
@@ -0,0 +1,33 @@
1
+ # calendar +list-attendees
2
+
3
+ 列出单个日程的参与人(用户 / 会议室 / 群 / 三方邮箱)。只读。
4
+
5
+ ## 命令
6
+
7
+ ```bash
8
+ # 查看指定日历(默认primary)下某日程的全部类型参与人和会议室
9
+ lark-cli calendar +list-attendees --calendar-id <calendar_id> --event-id <event_id>
10
+
11
+ # 只看会议室
12
+ lark-cli calendar +list-attendees --event-id <event_id> --type resource
13
+
14
+ # 同时看用户与会议室
15
+ lark-cli calendar +list-attendees --event-id <event_id> --type user --type resource
16
+
17
+ # 分页续拉(由调用方基于 has_more / page_token 决定是否再调一次)
18
+ lark-cli calendar +list-attendees --event-id <event_id> --page-size 100 --page-token <page_token>
19
+ ```
20
+
21
+ ## 参数
22
+
23
+ | 参数 | 必填 | 说明 |
24
+ |------|------|------|
25
+ | `--event-id <id>` | **是** | 目标日程 ID |
26
+ | `--calendar-id <id>` | 否 | 日历 ID,省略则使用主日历(`primary`) |
27
+ | `--type <type>` | 否 | 按 attendee 类型过滤;可重复或逗号分隔。枚举:`user` / `resource` / `chat` / `third_party`。留空返回全部类型|
28
+ | `--page-size <n>` | 否 | 上游分页大小;默认 `20`|
29
+ | `--page-token <token>` | 否 | 上游分页游标,来自上一次返回的 `page_token` |
30
+
31
+ ## 提示
32
+
33
+ - `type=chat` 的群参与人**不返回 `rsvp_status`**(群本身没有群级 RSVP 状态)。需要群成员的 RSVP 请走原生 OpenAPI。