@wecom/wecom-openclaw-plugin 2026.5.7 → 2026.5.14-beta.0

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 (33) hide show
  1. package/openclaw.plugin.json +5 -0
  2. package/package.json +3 -2
  3. package/skills/{wecom-contact-lookup → wecom-contact}/SKILL.md +1 -1
  4. package/skills/{wecom-doc-manager → wecom-doc}/SKILL.md +32 -18
  5. package/skills/{wecom-doc-manager/references/api-smartpage-create.md → wecom-doc/references/smartpage-create.md} +22 -5
  6. package/skills/wecom-doc/references/smartpage-export.md +160 -0
  7. package/skills/wecom-meeting/SKILL.md +441 -0
  8. package/skills/wecom-meeting/references/response-get-meeting-info.md +148 -0
  9. package/skills/wecom-msg/SKILL.md +2 -2
  10. package/skills/wecom-schedule/SKILL.md +4 -4
  11. package/skills/{wecom-smartsheet-data → wecom-smartsheet}/SKILL.md +85 -14
  12. package/skills/{wecom-smartsheet-data/references/cell-value-formats.md → wecom-smartsheet/references/smartsheet-cell-value-formats.md} +1 -1
  13. package/skills/{wecom-smartsheet-data/references/api-get-records.md → wecom-smartsheet/references/smartsheet-get-records.md} +34 -0
  14. package/skills/wecom-todo/SKILL.md +392 -0
  15. package/skills/wecom-todo/examples/workflows.md +163 -0
  16. package/skills/wecom-doc-manager/references/api-smartpage-export-task.md +0 -62
  17. package/skills/wecom-doc-manager/references/api-smartpage-get-export-result.md +0 -74
  18. package/skills/wecom-edit-todo/SKILL.md +0 -249
  19. package/skills/wecom-get-todo-detail/SKILL.md +0 -143
  20. package/skills/wecom-get-todo-list/SKILL.md +0 -127
  21. package/skills/wecom-meeting-create/SKILL.md +0 -158
  22. package/skills/wecom-meeting-manage/SKILL.md +0 -136
  23. package/skills/wecom-meeting-query/SKILL.md +0 -330
  24. package/skills/wecom-smartsheet-schema/SKILL.md +0 -92
  25. /package/skills/{wecom-doc-manager/references/api-create-doc.md → wecom-doc/references/create-doc.md} +0 -0
  26. /package/skills/{wecom-doc-manager/references/api-edit-doc-content.md → wecom-doc/references/edit-doc-content.md} +0 -0
  27. /package/skills/{wecom-doc-manager/references/api-export-document.md → wecom-doc/references/get-doc-content.md} +0 -0
  28. /package/skills/{wecom-meeting-create → wecom-meeting}/references/example-full.md +0 -0
  29. /package/skills/{wecom-meeting-create → wecom-meeting}/references/example-reminder.md +0 -0
  30. /package/skills/{wecom-meeting-create → wecom-meeting}/references/example-security.md +0 -0
  31. /package/skills/{wecom-smartsheet-schema/references/field-types.md → wecom-smartsheet/references/smartsheet-field-types.md} +0 -0
  32. /package/skills/{wecom-smartsheet-data → wecom-smartsheet}/references/webhook-examples.md +0 -0
  33. /package/skills/{wecom-smartsheet-data → wecom-smartsheet}/references/webhook-fallback.md +0 -0
@@ -0,0 +1,441 @@
1
+ ---
2
+ name: wecom-meeting
3
+ description: 企业微信会议技能,支持创建预约会议、查询会议列表、获取会议详情、取消会议、更新会议成员。当用户需要"创建会议"、"预约会议"、"约会议"、"安排会议"、"查看会议"、"查询会议列表"、"会议详情"、"什么时候开会"、"有哪些会议"、"查找会议"、"取消会议"、"删除会议"、"修改会议成员"、"添加会议参与人"、"移除会议成员"时触发。
4
+ ---
5
+ # 企业微信会议技能
6
+
7
+ > `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
8
+
9
+ > ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
10
+
11
+ ## 概述
12
+
13
+ wecom-meeting 提供企业微信会议的完整管理能力,包含以下功能:
14
+
15
+ 1. **创建预约会议** - 创建会议,支持设置会议参数,邀请参与人等
16
+ 2. **查询会议列表** - 按用户和时间范围查询会议 ID 列表 (限制: 当日及前后 30 天,上限 100 个)
17
+ 3. **获取会议详情** - 通过会议 ID 查询完整会议信息
18
+ 4. **取消会议** - 取消指定的预约会议
19
+ 5. **更新会议受邀成员** - 修改会议的参与人列表
20
+
21
+ ## 命令调用方式
22
+
23
+ 查看可用命令列表:使用 `wecom_mcp` tool 调用 `wecom_mcp list meeting`
24
+
25
+ 执行指定命令:使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting <tool_name> '<json_params>'`
26
+
27
+ ---
28
+
29
+ ## 命令详细说明
30
+
31
+ ### 1. 创建预约会议 (create_meeting)
32
+
33
+ 创建一个预约会议,支持设置会议参数配置等。
34
+
35
+ #### 执行命令
36
+
37
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting create_meeting '{"title": "<会议标题>", "meeting_start_datetime": "<会议开始时间>", "meeting_duration": <会议持续时长(秒)>}'`
38
+
39
+ #### 入参说明
40
+
41
+ | 参数 | 类型 | 必填 | 说明 |
42
+ | -------------------------- | ------- | ---- | ------------------------------------------------- |
43
+ | `title` | string | 是 | 会议标题 |
44
+ | `meeting_start_datetime` | string | 是 | 会议开始时间,格式:`YYYY-MM-DD HH:mm` |
45
+ | `meeting_duration` | integer | 是 | 会议持续时长 (秒),例如 3600 = 1 小时 |
46
+ | `description` | string | 否 | 会议描述 |
47
+ | `location` | string | 否 | 会议地点 |
48
+ | `invitees` | object | 否 | 被邀请人,格式:`{"userid": ["lisi", "wangwu"]}` |
49
+ | `settings` | object | 否 | 会议设置 (详见下方) |
50
+
51
+ > 被邀请人 userid 通过 `wecom-contact` 技能获取
52
+
53
+ **settings 字段:**
54
+
55
+ | 参数 | 类型 | 说明 |
56
+ | --------------------------- | ------- | --------------------------------------------- |
57
+ | `password` | string | 会议密码 |
58
+ | `enable_waiting_room` | boolean | 是否启用等候室 |
59
+ | `allow_enter_before_host` | boolean | 是否允许成员在主持人进入前加入 |
60
+ | `enable_enter_mute` | integer | 入会时静音设置 (枚举: 0: 关闭,1: 开启) |
61
+ | `allow_external_user` | boolean | 是否允许外部用户入会 |
62
+ | `enable_screen_watermark` | boolean | 是否开启屏幕水印 |
63
+ | `remind_scope` | integer | 提醒范围 (1: 不提醒,2: 仅提醒主持人,3: 提醒所有成员,4: 指定部分人响铃,默认仅提醒主持人) |
64
+ | `ring_users` | object | 响铃用户,格式:`{"userid": ["lisi"]}` |
65
+
66
+ > 响铃用户 userid 通过 `wecom-contact` 技能获取
67
+
68
+ #### 返回参数
69
+
70
+ ```json
71
+ {
72
+ "errcode": 0,
73
+ "errmsg": "ok",
74
+ "meetingid": "会议ID字符串",
75
+ "meeting_code": "会议号码字符串",
76
+ "meeting_link": "会议链接URL",
77
+ "excess_users": ["无效会议账号的userid"]
78
+ }
79
+ ```
80
+
81
+ | 字段 | 类型 | 说明 |
82
+ | ---------------- | ------ | ------------------------------------------------------------------------------------------------------------------ |
83
+ | `meetingid` | string | 会议 ID |
84
+ | `meeting_code` | string | 会议号码,向用户展示时需在回复**开头**单独一行纯文字展示,格式 `#会议号: xxx-xxx-xxx` (每3位用 `-` 分隔) |
85
+ | `meeting_link` | string | 会议链接 |
86
+ | `excess_users` | array | 参会人中包含无效会议账号的 userid,仅在购买会议专业版企业由于部分参会人无有效会议账号时返回 |
87
+
88
+ ---
89
+
90
+ ### 2. 查询会议列表 (list_user_meetings)
91
+
92
+ 查询指定用户在时间范围内的会议 ID 列表。
93
+
94
+ #### 执行命令
95
+
96
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting list_user_meetings '{"begin_datetime": "2026-03-01 00:00", "end_datetime": "2026-03-31 23:59", "limit": 100}'`
97
+
98
+ #### 入参说明
99
+
100
+ | 参数 | 类型 | 必填 | 说明 |
101
+ | ------------------ | ------- | ---- | --------------------------------------- |
102
+ | `begin_datetime` | string | 否 | 查询起始时间,格式:`YYYY-MM-DD HH:mm` |
103
+ | `end_datetime` | string | 否 | 查询结束时间,格式:`YYYY-MM-DD HH:mm` |
104
+ | `cursor` | string | 否 | 分页游标,用于获取下一页数据 |
105
+ | `limit` | integer | 否 | 每页返回条数,最大 100 |
106
+
107
+ > **限制**: 时间范围仅支持当日及前后 30 天。
108
+
109
+ #### 返回参数
110
+
111
+ ```json
112
+ {
113
+ "errcode": 0,
114
+ "errmsg": "ok",
115
+ "next_cursor": "分页游标字符串,为空表示无更多",
116
+ "meetingid_list": ["会议ID_1", "会议ID_2"]
117
+ }
118
+ ```
119
+
120
+ | 字段 | 类型 | 说明 |
121
+ | ------------------ | ------ | ------------------------------ |
122
+ | `meetingid_list` | array | 会议 ID 列表 |
123
+ | `next_cursor` | string | 下一页游标,为空表示无更多数据 |
124
+
125
+ ---
126
+
127
+ ### 3. 获取会议详情 (get_meeting_info)
128
+
129
+ 通过会议 ID 查询会议的完整详情。
130
+
131
+ #### 执行命令
132
+
133
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<会议id>"}'`
134
+
135
+ #### 入参说明
136
+
137
+ | 参数 | 类型 | 必填 | 说明 |
138
+ | ----------------- | ------ | ---- | --------------- |
139
+ | `meetingid` | string | 是 | 会议 ID,通过 `list_user_meetings` 获取 |
140
+ | `meeting_code` | string | 否 | 会议号码 |
141
+ | `sub_meetingid` | string | 否 | 子会议 ID |
142
+
143
+ #### 返回参数
144
+
145
+ > 完整的返回参数结构和字段说明详见 [references/response-get-meeting-info.md](references/response-get-meeting-info.md)
146
+
147
+ **核心字段速览:**
148
+
149
+ | 字段 | 类型 | 说明 |
150
+ | --- | --- | --- |
151
+ | `title` | string | 会议标题 |
152
+ | `meeting_start_datetime` | string | 会议开始时间 |
153
+ | `meeting_duration` | integer | 会议时长 (秒) |
154
+ | `status` | integer | 会议状态 (1: 待开始,2: 会议中,3: 已结束,4: 已取消,5: 已过期) |
155
+ | `meeting_type` | integer | 会议类型 (0: 一次性,1: 周期性,2: 微信专属,3: Rooms 投屏,5: 个人会议号,6: 网络研讨会) |
156
+ | `meeting_code` | string | 会议号码 |
157
+ | `meeting_link` | string | 会议链接 |
158
+ | `description` | string | 会议描述 |
159
+ | `location` | string | 会议地点 |
160
+ | `attendees.member[].status` | integer | 与会状态 (1: 已参与,2: 未参与) |
161
+
162
+ ---
163
+
164
+ ### 4. 取消会议 (cancel_meeting)
165
+
166
+ 取消指定的预约会议。
167
+
168
+ #### 执行命令
169
+
170
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting cancel_meeting '{"meetingid": "<会议id>"}'`
171
+
172
+ #### 入参说明
173
+
174
+ | 参数 | 类型 | 必填 | 说明 |
175
+ | ----------------- | ------ | ---- | ---------------------------------- |
176
+ | `meetingid` | string | 是 | 会议 ID,通过 `list_user_meetings` + `get_meeting_info` 获取 |
177
+
178
+ #### 返回参数
179
+
180
+ ```json
181
+ {
182
+ "errcode": 0,
183
+ "errmsg": "ok"
184
+ }
185
+ ```
186
+
187
+ ---
188
+
189
+ ### 5. 更新会议受邀成员 (set_invite_meeting_members)
190
+
191
+ 更新会议的受邀成员列表(全量覆盖)。
192
+
193
+ #### 执行命令
194
+
195
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting set_invite_meeting_members '{"meetingid": "<会议id>", "invitees": [{"userid": "lisi"}, {"userid": "wangwu"}]}'`
196
+
197
+ #### 入参说明
198
+
199
+ | 参数 | 类型 | 必填 | 说明 |
200
+ | ------------- | ------ | ---- | -------------------------------------- |
201
+ | `meetingid` | string | 是 | 会议 ID,通过 `list_user_meetings` + `get_meeting_info` 获取 |
202
+ | `invitees` | array | 是 | 受邀成员列表,每项包含 `userid` 字段 |
203
+
204
+ > **注意**: invitees 为全量覆盖,传入的列表将替换现有成员列表。
205
+ > invitees 的 userid 通过 `wecom-contact` 技能获取
206
+
207
+ #### 返回参数
208
+
209
+ ```json
210
+ {
211
+ "errcode": 0,
212
+ "errmsg": "ok"
213
+ }
214
+ ```
215
+
216
+ ---
217
+
218
+ ## 典型工作流
219
+
220
+ ### 工作流 1: 最简创建 (无邀请人)
221
+
222
+ **用户意图**: "帮我约一个明天下午3点的会议,主题是周例会,时长1小时"
223
+
224
+ **步骤:**
225
+
226
+ 1. **解析用户意图**: 时间 + 主题已有,邀请人未提及则默认留空,直接创建。
227
+ 2. **调用创建命令**:
228
+
229
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting create_meeting '{"title": "周例会", "meeting_start_datetime": "2026-03-18 15:00", "meeting_duration": 3600}'`
230
+
231
+ 3. **展示结果**:
232
+
233
+ #会议号: <会议号>
234
+
235
+ ```
236
+ ✅ 会议创建成功!
237
+
238
+ 📅 <会议标题>
239
+ 🕐 时间: <开始时间>,时长 <时长>
240
+ 🔗 会议链接: <会议链接>
241
+ ```
242
+
243
+ ### 工作流 2: 带邀请人 + 地点 + 描述创建
244
+
245
+ **用户意图**: "帮我约一个明天下午3点的会议,主题是技术方案评审,邀请张三和李四,地点在3楼会议室,时长1小时"
246
+
247
+ **步骤:**
248
+
249
+ 1. **解析用户意图**: 有邀请人,需先查询通讯录获取 userid。
250
+ 2. **通讯录查询**: 调用 `wecom-contact` 技能获取通讯录成员,按姓名筛选出参与者的 userid。
251
+
252
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call contact get_userlist '{}'`
253
+
254
+ 在返回的 `userlist` 中筛选 `name` 包含 "张三" 和 "李四" 的成员,获取其 `userid`。
255
+
256
+ 3. **信息已充分,直接调用创建命令** (禁止暴露内部 ID):
257
+
258
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting create_meeting '{"title": "技术方案评审", "meeting_start_datetime": "2026-03-18 15:00", "meeting_duration": 3600, "location": "3楼会议室", "invitees": {"userid": ["zhangsan", "lisi"]}}'`
259
+
260
+ 4. **展示结果**:
261
+
262
+ #会议号: <会议号>
263
+
264
+ ```
265
+ ✅ 会议创建成功!
266
+
267
+ 📅 <会议标题>
268
+ 🕐 时间: <开始时间>,时长 <时长>
269
+ 👥 参与人: <参与者姓名列表>
270
+ 🔗 会议链接: <会议链接>
271
+ ```
272
+
273
+ ---
274
+
275
+ ### 工作流 3: 查询会议列表
276
+
277
+ **示例**: 用户说 "帮我查一下本周有哪些会议"
278
+
279
+ **步骤:**
280
+
281
+ 1. **确定时间范围**: 根据当前日期计算本周的起止时间。
282
+ 2. **查询会议 ID 列表**:
283
+
284
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting list_user_meetings '{"begin_datetime": "2026-03-16 00:00", "end_datetime": "2026-03-22 23:59", "limit": 100}'`
285
+
286
+ 3. **逐个查询会议详情** (对返回的每个 meetingid):
287
+
288
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<会议id1>"}'`
289
+
290
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<会议id2>"}'`
291
+
292
+ 4. **汇总展示**:
293
+
294
+ ```
295
+ 📋 本周会议列表 (共 3 场):
296
+
297
+ 1. 📅 技术方案评审
298
+ 🕐 2026-03-17 10:00 - 11:00
299
+ 👥 张三,李四,王五
300
+
301
+ 2. 📅 产品需求沟通
302
+ 🕐 2026-03-18 14:00 - 15:00
303
+ 👥 赵六,钱七
304
+
305
+ 3. 📅 周五周会
306
+ 🕐 2026-03-21 09:00 - 10:00
307
+ 👥 全组成员
308
+ ```
309
+
310
+ > **分页处理**: 如果 `next_cursor` 不为空,使用 `cursor` 参数继续拉取下一页。
311
+
312
+ ---
313
+
314
+ ### 工作流 4: 获取会议详情
315
+
316
+ **示例**: 用户说 "帮我看下技术方案评审会议的详情"
317
+
318
+ **步骤:**
319
+
320
+ 1. **定位会议**: 先通过会议列表查询找到目标会议的 meetingid (按关键词匹配)。
321
+ 2. **查询详情**:
322
+
323
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<target_meetingid>"}'`
324
+
325
+ 3. **展示结果**:
326
+
327
+ #会议号: <会议号>
328
+
329
+ ```
330
+ 📅 <会议标题>
331
+
332
+ 🕐 时间: <开始时间>,时长 <时长>
333
+ 📍 地点: <会议地点>
334
+ 📝 描述: <会议描述>
335
+ 👤 创建者: <创建者姓名>
336
+ 👥 参与者: <参与者姓名列表>
337
+ 🔗 会议链接: <会议链接>
338
+ ```
339
+
340
+ ---
341
+
342
+ ### 工作流 5: 根据关键词查找会议
343
+
344
+ **示例**: 用户说 "技术评审会议是什么时候?"
345
+
346
+ **查询策略:**
347
+
348
+ 1. **确定查询范围**: 默认查当日前后 30 天 (接口限制范围)。
349
+ 2. **拉取会议列表**:
350
+
351
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting list_user_meetings '{"begin_datetime": "2026-02-15 00:00", "end_datetime": "2026-04-16 23:59", "limit": 100}'`
352
+
353
+ 3. **逐个查询详情并匹配标题关键词**。
354
+ 4. **找到匹配后停止查询,展示结果**:
355
+
356
+ #会议号: <会议号>
357
+
358
+ ```
359
+ ✅ 找到会议: "<会议标题>"
360
+
361
+ 📅 时间: <开始时间>,时长 <时长>
362
+ 📍 地点: <会议地点>
363
+ 👥 参与者: <参与者姓名列表>
364
+ 🔗 会议链接: <会议链接>
365
+ ```
366
+
367
+ 5. **未找到处理**: 告知用户在前后 30 天范围内未找到匹配会议,请确认会议名称。
368
+
369
+ ---
370
+
371
+ ### 工作流 6: 取消会议
372
+
373
+ **示例**: 用户说 "帮我取消明天的技术方案评审会议"
374
+
375
+ **步骤:**
376
+
377
+ 1. **定位会议**: 通过 `list_user_meetings` + `get_meeting_info` 查询会议列表 + 关键词匹配找到目标会议。
378
+ 2. **直接执行取消**:
379
+
380
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting cancel_meeting '{"meetingid": "<target_meetingid>"}'`
381
+
382
+ 3. **展示结果**:
383
+
384
+ ```
385
+ ✅ 会议已取消: 技术方案评审
386
+ ```
387
+
388
+ ---
389
+
390
+ ### 工作流 7: 更新会议成员
391
+
392
+ **示例**: 用户说 "把王五加到技术方案评审会议里"
393
+
394
+ **步骤:**
395
+
396
+ 1. **定位会议**: 通过 `list_user_meetings` + `get_meeting_info` 查询会议列表 + 匹配找到目标会议。
397
+ 2. **获取当前受邀成员**: `set_invite_meeting_members` 为全量覆盖,必须先通过 `get_meeting_info` 获取会议详情,获取现有成员后再合并。
398
+ 3. **通讯录查询**: 调用 `wecom-contact` 技能获取通讯录成员,按姓名筛选出王五的 userid。
399
+
400
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call contact get_userlist '{}'`
401
+
402
+ 在返回的 `userlist` 中筛选 `name` 包含 "王五" 的成员,获取其 `userid`。
403
+
404
+ 4. **合并成员列表**: 将现有成员 + 新增成员合并 (全量覆盖)。
405
+ 5. **执行更新**:
406
+
407
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting set_invite_meeting_members '{"meetingid": "<target_meetingid>", "invitees": [{"userid": "zhangsan"}, {"userid": "lisi"}, {"userid": "wangwu"}]}'`
408
+
409
+ 6. **展示结果**:
410
+
411
+ ```
412
+ ✅ 会议成员已更新: 技术方案评审
413
+ 👥 当前成员: 张三,李四,王五
414
+ ```
415
+
416
+ ---
417
+
418
+ ## 复杂场景样例
419
+
420
+ 按场景按需加载,避免一次性引入过多无关示例:
421
+
422
+ | 文件 | 适用场景 |
423
+ | ---- | -------- |
424
+ | [references/response-get-meeting-info.md](references/response-get-meeting-info.md) | 获取会议详情完整返回参数结构和字段说明 |
425
+ | [references/example-security.md](references/example-security.md) | 会议密码,等候室,外部用户限制 |
426
+ | [references/example-reminder.md](references/example-reminder.md) | 响铃提醒,指定部分人响铃 |
427
+ | [references/example-full.md](references/example-full.md) | 全参数综合场景 (含静音,屏幕水印,等候室等设置) |
428
+
429
+ ---
430
+
431
+ ## 注意事项
432
+
433
+ - **信息追问**: 缺少时间或主题时,简洁追问用户;未提及邀请人则默认留空
434
+ - **通讯录查询**: 涉及参与人时,需先通过 `wecom-contact` 技能的 `get_userlist` 接口获取全量通讯录成员,再按姓名/别名本地筛选匹配出对应的 `userid`。该接口无入参,返回当前用户可见范围内的成员列表 (含 `userid`,`name`,`alias`)
435
+ - **直接创建**: 时间 + 主题已知即可直接创建,邀请人有则带上,无则留空;无论信息是一次性提供还是上下文可推断,非必要则均不请求确认,直接创建即可
436
+ - **时间格式**: 统一使用 `YYYY-MM-DD HH:mm` 格式
437
+ - **会议列表时间范围限制**: 仅支持查询当日及前后 30 天内的会议
438
+ - **查询详情需两步**: 先通过 `list_user_meetings` 获取会议 ID 列表,再通过 `get_meeting_info` 逐个获取详情
439
+ - **定位会议**: 取消会议和更新成员等管理操作需先通过查询定位到目标会议的 meetingid
440
+ - **成员更新为全量覆盖**: `set_invite_meeting_members` 传入的列表将替换现有成员列表,需先获取当前成员再合并
441
+ - **参与人仅支持企业内成员**,不支持外部人员
@@ -0,0 +1,148 @@
1
+ # 获取会议详情 (get_meeting_info) - 返回参数
2
+
3
+ ## 返回参数
4
+
5
+ ```json
6
+ {
7
+ "errcode": 0,
8
+ "errmsg": "ok",
9
+ "creator_userid": "创建者userid",
10
+ "admin_userid": "会议管理userid (与 creator_userid 有且仅返回一个)",
11
+ "title": "会议标题",
12
+ "meeting_start_datetime": "YYYY-MM-DD HH:mm",
13
+ "meeting_duration": "会议时长秒数",
14
+ "description": "会议描述文本",
15
+ "location": "会议地点文本",
16
+ "main_department": "创建者主部门ID",
17
+ "status": "会议状态枚举值",
18
+ "meeting_type": "会议类型枚举值",
19
+ "attendees": {
20
+ "member": [
21
+ {
22
+ "userid": "内部成员userid",
23
+ "status": "与会状态枚举值",
24
+ "first_join_datetime": "YYYY-MM-DD HH:mm",
25
+ "last_quit_datetime": "YYYY-MM-DD HH:mm",
26
+ "total_join_count": "加入次数",
27
+ "cumulative_time": "累计在会时长秒数"
28
+ }
29
+ ],
30
+ "tmp_external_user": [
31
+ {
32
+ "tmp_external_userid": "外部临时用户ID",
33
+ "status": "与会状态枚举值",
34
+ "first_join_datetime": "YYYY-MM-DD HH:mm",
35
+ "last_quit_datetime": "YYYY-MM-DD HH:mm",
36
+ "total_join_count": "加入次数",
37
+ "cumulative_time": "累计在会时长秒数"
38
+ }
39
+ ]
40
+ },
41
+ "settings": {
42
+ "remind_scope": "提醒范围枚举值",
43
+ "need_password": "是否需要密码布尔值",
44
+ "password": "会议密码",
45
+ "enable_waiting_room": "是否启用等候室布尔值",
46
+ "allow_enter_before_host": "是否允许提前入会布尔值",
47
+ "enable_enter_mute": "入会静音枚举值",
48
+ "allow_unmute_self": "是否允许自我解除静音布尔值",
49
+ "allow_external_user": "是否允许外部用户布尔值",
50
+ "enable_screen_watermark": "是否开启水印布尔值",
51
+ "watermark_type": "水印类型枚举值",
52
+ "auto_record_type": "录制类型枚举字符串",
53
+ "attendee_join_auto_record": "参会者加入自动录制布尔值",
54
+ "enable_host_pause_auto_record": "主持人可暂停录制布尔值",
55
+ "enable_doc_upload_permission": "允许上传文档布尔值",
56
+ "enable_enroll": "是否开启报名布尔值",
57
+ "enable_host_key": "是否启用主持人密钥布尔值",
58
+ "host_key": "主持人密钥字符串",
59
+ "hosts": {"userid": ["主持人userid列表"]},
60
+ "current_hosts": {"userid": ["当前主持人userid列表"]},
61
+ "co_hosts": {"userid": ["联席主持人userid列表"]},
62
+ "ring_users": {"userid": ["响铃用户userid列表"]}
63
+ },
64
+ "meeting_code": "会议号码字符串",
65
+ "meeting_link": "会议链接URL",
66
+ "has_vote": "是否有投票布尔值",
67
+ "has_more_sub_meeting": "是否还有更多子会议枚举值",
68
+ "remain_sub_meetings": "剩余子会议场数",
69
+ "current_sub_meetingid": "当前子会议ID",
70
+ "guests": [
71
+ {
72
+ "area": "国际区号",
73
+ "phone_number": "手机号字符串",
74
+ "guest_name": "嘉宾姓名"
75
+ }
76
+ ],
77
+ "reminders": {
78
+ "is_repeat": "是否周期性枚举值",
79
+ "repeat_type": "重复类型枚举值",
80
+ "repeat_until_type": "结束类型枚举值",
81
+ "repeat_until_count": "限定次数",
82
+ "repeat_until_datetime": "YYYY-MM-DD HH:mm",
83
+ "repeat_interval": "重复间隔数值",
84
+ "is_custom_repeat": "是否自定义重复枚举值",
85
+ "repeat_day_of_week": ["星期几数组"],
86
+ "repeat_day_of_month": ["日期数组"],
87
+ "remind_before": ["提醒秒数数组"]
88
+ },
89
+ "sub_meetings": [
90
+ {
91
+ "sub_meetingid": "子会议ID",
92
+ "status": "子会议状态枚举值",
93
+ "start_datetime": "YYYY-MM-DD HH:mm",
94
+ "end_datetime": "YYYY-MM-DD HH:mm",
95
+ "title": "子会议标题",
96
+ "repeat_id": "周期性会议分段ID"
97
+ }
98
+ ],
99
+ "sub_repeat_list": [
100
+ {
101
+ "repeat_id": "周期性会议分段ID",
102
+ "repeat_type": "重复类型枚举值",
103
+ "repeat_until_type": "结束类型枚举值",
104
+ "repeat_until_count": "限定次数",
105
+ "repeat_until_datetime": "YYYY-MM-DD HH:mm",
106
+ "repeat_interval": "重复间隔数值",
107
+ "is_custom_repeat": "是否自定义重复枚举值",
108
+ "repeat_day_of_week": ["星期几数组"],
109
+ "repeat_day_of_month": ["日期数组"]
110
+ }
111
+ ]
112
+ }
113
+ ```
114
+
115
+ ## 关键返回字段
116
+
117
+ | 字段 | 类型 | 说明 |
118
+ | --------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------- |
119
+ | `creator_userid` | string | 创建者 userid,与 `admin_userid` 有且仅返回一个 |
120
+ | `admin_userid` | string | 会议管理 userid,与 `creator_userid` 有且仅返回一个 |
121
+ | `title` | string | 会议标题 |
122
+ | `meeting_start_datetime` | string | 会议开始时间 |
123
+ | `meeting_duration` | integer | 会议时长 (秒) |
124
+ | `main_department` | integer | 创建者所属主部门 |
125
+ | `status` | integer | 会议状态 (1: 待开始,2: 会议中,3: 已结束,4: 已取消,5: 已过期) |
126
+ | `meeting_type` | integer | 会议类型 (0: 一次性会议,1: 周期性会议,2: 微信专属会议,3: Rooms 投屏会议,5: 个人会议号会议,6: 网络研讨会) |
127
+ | `meeting_code` | string | 会议号码 |
128
+ | `meeting_link` | string | 会议链接 |
129
+ | `attendees.member` | array | 内部参与者列表 |
130
+ | `attendees.member[].status` | integer | 与会状态 (1: 已参与,2: 未参与) |
131
+ | `attendees.tmp_external_user` | array | 外部参与者 (临时 ID) |
132
+ | `attendees.tmp_external_user[].status` | integer | 与会状态 (1: 已参与,2: 未参与) |
133
+ | `guests` | array | 外部嘉宾列表,每项含 `area`,`phone_number`,`guest_name` |
134
+ | `current_sub_meetingid` | string | 当前子会议 ID |
135
+ | `settings.ring_users` | object | 响铃用户列表 |
136
+ | `settings.need_password` | boolean | 是否需要密码 (只读字段) |
137
+ | `settings.enable_doc_upload_permission` | boolean | 是否允许成员上传文档 |
138
+ | `settings.hosts` | object | 主持人列表 |
139
+ | `settings.current_hosts` | object | 当前主持人列表 |
140
+ | `settings.co_hosts` | object | 联席主持人列表 |
141
+ | `reminders` | object | 周期性配置 |
142
+ | `has_vote` | boolean | 是否有投票 (仅会议创建人和主持人有权限查询) |
143
+ | `has_more_sub_meeting` | integer | 是否还有更多子会议特例 (0: 无更多,1: 有更多) |
144
+ | `remain_sub_meetings` | integer | 剩余子会议场数 |
145
+ | `sub_meetings` | array | 子会议列表 |
146
+ | `sub_meetings[].status` | integer | 子会议状态 (0: 默认/存在,1: 已删除) |
147
+ | `sub_meetings[].repeat_id` | string | 周期性会议分段 ID,用于关联子会议所属分段 |
148
+ | `sub_repeat_list` | array | 周期性会议分段信息,修改周期性会议某一场后可能产生不同分段,各分段有不同重复规则 |
@@ -65,7 +65,7 @@ metadata:
65
65
 
66
66
  ### userid转username
67
67
  **流程**:
68
- 1. 调用 `wecom-contact-lookup get_userlist` 获取用户列表
68
+ 1. 调用 `wecom-contact get_userlist` 获取用户列表
69
69
  2. 建立userid到username的映射关系
70
70
  3. **展示策略**:
71
71
  - 精确匹配:显示username
@@ -100,7 +100,7 @@ metadata:
100
100
  1. 确定时间范围(用户指定或默认最近7天)
101
101
  2. 通过 **chatid查找规则** 确定目标会话的 `chatid` 和 `chat_type`
102
102
  3. 调用 `get_message` 拉取消息列表
103
- 4. 调用 `wecom-contact-lookup` 的 `get_userlist` 获取通讯录,建立 userid→姓名 映射
103
+ 4. 调用 `wecom-contact` 的 `get_userlist` 获取通讯录,建立 userid→姓名 映射
104
104
  5. **统计非文本消息**:遍历消息列表,统计 `msgtype` 非 `text` 的消息(image/file/voice/video)数量和类型
105
105
  6. 展示消息时将 `userid` 替换为可读姓名,格式:
106
106
  - 文本消息:`姓名 [时间]: 内容`
@@ -18,7 +18,7 @@ metadata:
18
18
  ## 注意事项
19
19
 
20
20
  - 日程列表查询仅支持**当日前后 30 天**,时间格式 `YYYY-MM-DD` 或 `YYYY-MM-DD HH:MM:SS`
21
- - 涉及参与者 userid 时,需先使用 **wecom-contact-lookup** 技能获取;存在同名时展示候选让用户选择(禁止暴露 userid)
21
+ - 涉及参与者 userid 时,需先使用 **wecom-contact** 技能获取;存在同名时展示候选让用户选择(禁止暴露 userid)
22
22
  - 创建/修改/取消前,先确认目标日程和参与者信息
23
23
  - `errcode != 0` 时展示错误信息;返回的 `start_time`/`end_time` 为 Unix 时间戳(秒),需转为可读格式
24
24
  - **注意时间格式转换**:接口入参使用字符串格式(如 `YYYY-MM-DD HH:MM:SS`),但返回值多为 Unix 时间戳,使用时需进行格式转换
@@ -101,7 +101,7 @@ metadata:
101
101
 
102
102
  **流程:**
103
103
  1. 解析用户意图,提取时间、标题、地点、参与人、提醒设置等信息
104
- 2. 若涉及参与人,先通过 **wecom-contact-lookup** 查询 userid;存在同名时展示候选让用户选择
104
+ 2. 若涉及参与人,先通过 **wecom-contact** 查询 userid;存在同名时展示候选让用户选择
105
105
  3. 若用户未指定提醒,默认设置提前 15 分钟提醒(`remind_before_event_secs: 900`)
106
106
  4. 若用户说"全天",设置 `is_whole_day: 1`,时间设为当天 00:00:00 至 23:59:59
107
107
  5. 向用户确认日程信息(标题、时间、地点、参与人等)后调用 `create_schedule`
@@ -142,7 +142,7 @@ metadata:
142
142
  - "把我后天那个技术分享的参与人里去掉刘强"
143
143
 
144
144
  **流程:**
145
- 1. 通过 **wecom-contact-lookup** 获取目标人员 userid;存在同名时展示候选让用户选择
145
+ 1. 通过 **wecom-contact** 获取目标人员 userid;存在同名时展示候选让用户选择
146
146
  2. 通过查询工作流定位目标日程
147
147
  3. 调用 `add_schedule_attendees` 或 `del_schedule_attendees` 完成添加/移除
148
148
 
@@ -155,7 +155,7 @@ metadata:
155
155
  - "找一个明天下午大家都有空的时段,安排一个 1 小时的会议"
156
156
 
157
157
  **流程:**
158
- 1. 通过 **wecom-contact-lookup** 获取相关人员 userid
158
+ 1. 通过 **wecom-contact** 获取相关人员 userid
159
159
  2. 调用 `check_availability` 查询指定时间范围内各用户的忙碌时段
160
160
  3. 分析所有用户的忙碌时段,计算出共同空闲时段并推荐给用户
161
161
  4. 用户确认时段后,调用 `create_schedule` 创建会议并自动添加参与人