@mocrane/wecom 2026.3.14 → 2026.3.19

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 (41) hide show
  1. package/index.ts +37 -0
  2. package/package.json +4 -3
  3. package/skills/wecom-contact-lookup/SKILL.md +162 -0
  4. package/skills/wecom-doc-manager/SKILL.md +64 -0
  5. package/skills/wecom-doc-manager/references/api-create-doc.md +56 -0
  6. package/skills/wecom-doc-manager/references/api-edit-doc-content.md +68 -0
  7. package/skills/wecom-doc-manager/references/api-export-document.md +88 -0
  8. package/skills/wecom-edit-todo/SKILL.md +249 -0
  9. package/skills/wecom-get-todo-detail/SKILL.md +143 -0
  10. package/skills/wecom-get-todo-list/SKILL.md +127 -0
  11. package/skills/wecom-meeting-create/SKILL.md +158 -0
  12. package/skills/wecom-meeting-create/references/example-full.md +30 -0
  13. package/skills/wecom-meeting-create/references/example-reminder.md +46 -0
  14. package/skills/wecom-meeting-create/references/example-security.md +22 -0
  15. package/skills/wecom-meeting-manage/SKILL.md +136 -0
  16. package/skills/wecom-meeting-query/SKILL.md +330 -0
  17. package/skills/wecom-preflight/SKILL.md +141 -0
  18. package/skills/wecom-schedule/SKILL.md +159 -0
  19. package/skills/wecom-schedule/references/api-check-availability.md +56 -0
  20. package/skills/wecom-schedule/references/api-create-schedule.md +38 -0
  21. package/skills/wecom-schedule/references/api-get-schedule-detail.md +81 -0
  22. package/skills/wecom-schedule/references/api-update-schedule.md +30 -0
  23. package/skills/wecom-schedule/references/ref-reminders.md +24 -0
  24. package/skills/wecom-smartsheet-data/SKILL.md +71 -0
  25. package/skills/wecom-smartsheet-data/references/api-get-records.md +61 -0
  26. package/skills/wecom-smartsheet-data/references/cell-value-formats.md +120 -0
  27. package/skills/wecom-smartsheet-schema/SKILL.md +92 -0
  28. package/skills/wecom-smartsheet-schema/references/field-types.md +43 -0
  29. package/src/agent/handler.ts +105 -14
  30. package/src/mcp/index.ts +7 -0
  31. package/src/mcp/schema.ts +108 -0
  32. package/src/mcp/tool.ts +226 -0
  33. package/src/mcp/transport.ts +561 -0
  34. package/src/media/const.ts +24 -0
  35. package/src/media/index.ts +15 -0
  36. package/src/media/uploader.ts +240 -0
  37. package/src/monitor.ts +293 -12
  38. package/src/outbound.ts +116 -46
  39. package/src/types/index.ts +1 -0
  40. package/src/types/message.ts +10 -1
  41. package/src/ws-adapter.ts +4 -0
@@ -0,0 +1,30 @@
1
+ # 创建会议 - 全参数综合场景示例
2
+
3
+ ## 场景 1: 高规格会议 (全参数)
4
+
5
+ **用户意图**: "帮我创建一个高规格的季度战略会议: 下周一上午9点, 时长4小时, 邀请全团队, 设置密码, 开启等候室, 开启屏幕水印, 全员静音"
6
+
7
+ ```json
8
+ {
9
+ "title": "Q2季度战略规划会",
10
+ "meeting_start_datetime": "2026-03-23 09:00",
11
+ "meeting_duration": 14400,
12
+ "description": "Q2季度战略规划, 请各部门负责人提前准备汇报材料",
13
+ "location": "总部大会议室",
14
+ "invitees": {
15
+ "userid": ["zhangsan", "lisi", "wangwu", "zhaoliu", "sunqi"]
16
+ },
17
+ "settings": {
18
+ "password": "2026",
19
+ "enable_waiting_room": true,
20
+ "allow_enter_before_host": false,
21
+ "enable_enter_mute": 1,
22
+ "allow_external_user": false,
23
+ "enable_screen_watermark": true,
24
+ "remind_scope": 3,
25
+ "ring_users": {
26
+ "userid": ["zhangsan", "lisi", "wangwu", "zhaoliu", "sunqi"]
27
+ }
28
+ }
29
+ }
30
+ ```
@@ -0,0 +1,46 @@
1
+ # 创建会议 - 响铃提醒场景示例
2
+
3
+ ## 场景 2: 仅提醒主持人 + 提前提醒时间
4
+
5
+ **用户意图**: "帮我创建一个会议, 只提醒主持人, 并在会议开始前15分钟和1小时各提醒一次"
6
+
7
+ ```json
8
+ {
9
+ "title": "项目启动会",
10
+ "meeting_start_datetime": "2026-03-21 10:00",
11
+ "meeting_duration": 3600,
12
+ "invitees": {
13
+ "userid": ["zhangsan", "lisi"]
14
+ },
15
+ "settings": {
16
+ "remind_scope": 2,
17
+ "ring_users": {
18
+ "userid": ["zhangsan"]
19
+ }
20
+ }
21
+ }
22
+ ```
23
+
24
+ ---
25
+
26
+ ## 场景 3: 指定部分人响铃 (remind_scope=4)
27
+
28
+ **用户意图**: "帮我创建一个会议, 只响铃提醒张三和李四, 其他人不提醒"
29
+
30
+ ```json
31
+ {
32
+ "title": "紧急故障复盘",
33
+ "meeting_start_datetime": "2026-03-18 20:00",
34
+ "meeting_duration": 3600,
35
+ "invitees": {
36
+ "userid": ["zhangsan", "lisi", "wangwu", "zhaoliu"]
37
+ },
38
+ "settings": {
39
+ "remind_scope": 4,
40
+ "ring_users": {
41
+ "userid": ["zhangsan", "lisi"]
42
+ },
43
+ "allow_enter_before_host": true
44
+ }
45
+ }
46
+ ```
@@ -0,0 +1,22 @@
1
+ # 创建会议 - 安全设置场景示例
2
+
3
+ ## 场景 4: 会议密码 + 等候室 + 主持人设置
4
+
5
+ **用户意图**: "帮我创建一个重要的客户汇报会议, 需要设置密码1234, 开启等候室, 不允许外部人员入会"
6
+
7
+ ```json
8
+ {
9
+ "title": "客户汇报会议",
10
+ "meeting_start_datetime": "2026-03-19 14:00",
11
+ "meeting_duration": 5400,
12
+ "invitees": {
13
+ "userid": ["zhangsan", "lisi", "wangwu"]
14
+ },
15
+ "settings": {
16
+ "password": "1234",
17
+ "enable_waiting_room": true,
18
+ "allow_enter_before_host": false,
19
+ "allow_external_user": false
20
+ }
21
+ }
22
+ ```
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: wecom-meeting-manage
3
+ description: 企业微信会议管理技能, 支持取消会议和更新会议受邀成员. 当用户需要"取消会议", "删除会议", "修改会议成员", "添加会议参与人", "移除会议成员"时触发.
4
+ ---
5
+ # 企业微信会议管理技能
6
+
7
+ > `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
8
+
9
+ > ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
10
+
11
+ ## 概述
12
+
13
+ wecom-meeting-manage 提供企业微信会议管理能力, 包含以下功能:
14
+
15
+ 1. **取消会议** - 取消指定的预约会议
16
+ 2. **更新会议受邀成员** - 修改会议的参与人列表
17
+
18
+ ## 命令调用方式
19
+
20
+ 查看可用命令列表:使用 `wecom_mcp` tool 调用 `wecom_mcp list meeting`
21
+
22
+ 调用指定命令:使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting <tool_name> '<json_params>'`
23
+
24
+ ---
25
+
26
+ ## 命令详细说明
27
+
28
+ ### 1. 取消会议 (cancel_meeting)
29
+
30
+ 取消指定的预约会议.
31
+
32
+ #### 调用命令
33
+
34
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting cancel_meeting '{"meetingid": "<会议id>"}'`
35
+
36
+ #### 入参说明
37
+
38
+ | 参数 | 类型 | 必填 | 说明 |
39
+ | ----------------- | ------ | ---- | ---------------------------------- |
40
+ | `meetingid` | string | 是 | 会议 ID, 通过 `wecom-meeting-query` 技能获取 |
41
+
42
+ #### 返回参数
43
+
44
+ ```json
45
+ {
46
+ "errcode": 0,
47
+ "errmsg": "ok"
48
+ }
49
+ ```
50
+
51
+ ---
52
+
53
+ ### 2. 更新会议受邀成员 (set_invite_meeting_members)
54
+
55
+ 更新会议的受邀成员列表 (全量覆盖).
56
+
57
+ #### 调用命令
58
+
59
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting set_invite_meeting_members '{"meetingid": "<会议id>", "invitees": [{"userid": "lisi"}, {"userid": "wangwu"}]}'`
60
+
61
+ #### 入参说明
62
+
63
+ | 参数 | 类型 | 必填 | 说明 |
64
+ | ------------- | ------ | ---- | -------------------------------------- |
65
+ | `meetingid` | string | 是 | 会议 ID, 通过 `wecom-meeting-query` 技能获取 |
66
+ | `invitees` | array | 否 | 受邀成员列表, 每项包含 `userid` 字段 |
67
+
68
+ > **注意**: invitees 为全量覆盖, 传入的列表将替换现有成员列表.
69
+ > invitees 的 userid 通过 `wecom-contact-lookup` 技能获取
70
+
71
+ #### 返回参数
72
+
73
+ ```json
74
+ {
75
+ "errcode": 0,
76
+ "errmsg": "ok"
77
+ }
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 典型工作流
83
+
84
+ ### 工作流 1: 取消会议
85
+
86
+ **示例**: 用户说 "帮我取消明天的技术方案评审会议"
87
+
88
+ **步骤:**
89
+
90
+ 1. **定位会议**: 通过 `wecom-meeting-query` 技能查询会议列表 + 关键词匹配找到目标会议.
91
+ 2. **直接执行取消**:
92
+
93
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting cancel_meeting '{"meetingid": "<target_meetingid>"}'`
94
+
95
+ 4. **展示结果**:
96
+
97
+ ```
98
+ ✅ 会议已取消: 技术方案评审
99
+ ```
100
+
101
+ ---
102
+
103
+ ### 工作流 2: 更新会议成员
104
+
105
+ **示例**: 用户说 "把王五加到技术方案评审会议里"
106
+
107
+ **步骤:**
108
+
109
+ 1. **定位会议**: 通过 `wecom-meeting-query` 技能查询会议列表 + 匹配找到目标会议.
110
+ 2. **获取当前受邀成员**: `set_invite_members` 为全量覆盖, 必须先通过 `wecom-meeting-query` 技能的 `get_meeting_info` 获取会议详情, 获取现有成员后再合并.
111
+ 3. **通讯录查询**: 调用 `wecom-contact-lookup` 技能获取通讯录成员, 按姓名筛选出王五的 userid.
112
+
113
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call contact get_userlist '{}'`
114
+
115
+ 在返回的 `userlist` 中筛选 `name` 包含 "王五" 的成员, 获取其 `userid`.
116
+
117
+ 4. **合并成员列表**: 将现有成员 + 新增成员合并 (全量覆盖).
118
+ 5. **执行更新**:
119
+
120
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting set_invite_meeting_members '{"meetingid": "<target_meetingid>", "invitees": [{"userid": "zhangsan"}, {"userid": "lisi"}, {"userid": "wangwu"}]}'`
121
+
122
+ 7. **展示结果**:
123
+
124
+ ```
125
+ ✅ 会议成员已更新: 技术方案评审
126
+ 👥 当前成员: 张三, 李四, 王五
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 注意事项
132
+
133
+ - **参与人仅支持企业内成员**, 不支持外部人员
134
+ - **通讯录查询**: 涉及参与人时, 需先通过 `wecom-contact-lookup` 技能的 `get_userlist` 接口获取全量通讯录成员, 再按姓名/别名本地筛选匹配出对应的 `userid`. 该接口无入参, 返回当前用户可见范围内的成员列表 (含 `userid`, `name`, `alias`)
135
+ - **定位会议**: 管理操作需先通过 `wecom-meeting-query` 技能查询到目标会议的 meetingid
136
+ - **成员更新为全量覆盖**: `set_invite_members` 传入的列表将替换现有成员列表, 需先获取当前成员再合并
@@ -0,0 +1,330 @@
1
+ ---
2
+ name: wecom-meeting-query
3
+ description: 企业微信会议查询技能, 支持查询会议列表, 获取会议详情, 按关键词查找会议. 当用户需要"查看会议", "查询会议列表", "会议详情", "什么时候开会", "有哪些会议", "查找会议"时触发.
4
+ ---
5
+ # 企业微信会议查询技能
6
+
7
+ > `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
8
+
9
+ > ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
10
+
11
+ ## 概述
12
+
13
+ wecom-meeting-query 提供企业微信会议查询能力, 包含以下功能:
14
+
15
+ 1. **查询会议列表** - 按用户和时间范围查询会议 ID 列表 (限制: 当日及前后 30 天, 上限 100 个)
16
+ 2. **获取会议详情** - 通过会议 ID 查询完整会议信息
17
+
18
+ ## 命令调用方式
19
+
20
+ 查看可用命令列表:使用 `wecom_mcp` tool 调用 `wecom_mcp list meeting`
21
+
22
+ 执行指定命令:使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting <tool_name> '<json_params>'`
23
+ ---
24
+
25
+ ## 命令详细说明
26
+
27
+ ### 1. 查询会议列表 (list_user_meetings)
28
+
29
+ 查询指定用户在时间范围内的会议 ID 列表.
30
+
31
+ #### 执行命令
32
+
33
+ 使用 `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}'`
34
+
35
+ #### 入参说明
36
+
37
+ | 参数 | 类型 | 必填 | 说明 |
38
+ | ------------------ | ------- | ---- | --------------------------------------- |
39
+ | `begin_datetime` | string | 否 | 查询起始时间, 格式:`YYYY-MM-DD HH:mm` |
40
+ | `end_datetime` | string | 否 | 查询结束时间, 格式:`YYYY-MM-DD HH:mm` |
41
+ | `cursor` | string | 否 | 分页游标, 用于获取下一页数据 |
42
+ | `limit` | integer | 否 | 每页返回条数, 最大 100 |
43
+
44
+ > **限制**: 时间范围仅支持当日及前后 30 天.
45
+
46
+ #### 返回参数
47
+
48
+ ```json
49
+ {
50
+ "errcode": 0,
51
+ "errmsg": "ok",
52
+ "next_cursor": "分页游标字符串, 为空表示无更多",
53
+ "meetingid_list": ["会议ID_1", "会议ID_2"]
54
+ }
55
+ ```
56
+
57
+ | 字段 | 类型 | 说明 |
58
+ | ------------------ | ------ | ------------------------------ |
59
+ | `meetingid_list` | array | 会议 ID 列表 |
60
+ | `next_cursor` | string | 下一页游标, 为空表示无更多数据 |
61
+
62
+ ---
63
+
64
+ ### 2. 获取会议详情 (get_meeting_info)
65
+
66
+ 通过会议 ID 查询会议的完整详情.
67
+
68
+ #### 执行命令
69
+
70
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<会议id>"}'`
71
+
72
+ #### 入参说明
73
+
74
+ | 参数 | 类型 | 必填 | 说明 |
75
+ | ----------------- | ------ | ---- | --------------- |
76
+ | `meetingid` | string | 是 | 会议 ID, 通过 `list_user_meetings` 获取 |
77
+ | `meeting_code` | string | 否 | 会议号码 |
78
+ | `sub_meetingid` | string | 否 | 子会议 ID |
79
+
80
+ #### 返回参数
81
+
82
+ ```json
83
+ {
84
+ "errcode": 0,
85
+ "errmsg": "ok",
86
+ "creator_userid": "创建者userid",
87
+ "admin_userid": "会议管理userid (与 creator_userid 有且仅返回一个)",
88
+ "title": "会议标题",
89
+ "meeting_start_datetime": "YYYY-MM-DD HH:mm",
90
+ "meeting_duration": 会议时长秒数,
91
+ "description": "会议描述文本",
92
+ "location": "会议地点文本",
93
+ "main_department": 创建者主部门ID,
94
+ "status": 会议状态枚举值,
95
+ "meeting_type": 会议类型枚举值,
96
+ "attendees": {
97
+ "member": [
98
+ {
99
+ "userid": "内部成员userid",
100
+ "status": 与会状态枚举值,
101
+ "first_join_datetime": "YYYY-MM-DD HH:mm",
102
+ "last_quit_datetime": "YYYY-MM-DD HH:mm",
103
+ "total_join_count": 加入次数,
104
+ "cumulative_time": 累计在会时长秒数
105
+ }
106
+ ],
107
+ "tmp_external_user": [
108
+ {
109
+ "tmp_external_userid": "外部临时用户ID",
110
+ "status": 与会状态枚举值,
111
+ "first_join_datetime": "YYYY-MM-DD HH:mm",
112
+ "last_quit_datetime": "YYYY-MM-DD HH:mm",
113
+ "total_join_count": 加入次数,
114
+ "cumulative_time": 累计在会时长秒数
115
+ }
116
+ ]
117
+ },
118
+ "settings": {
119
+ "remind_scope": 提醒范围枚举值,
120
+ "need_password": 是否需要密码布尔值,
121
+ "password": "会议密码",
122
+ "enable_waiting_room": 是否启用等候室布尔值,
123
+ "allow_enter_before_host": 是否允许提前入会布尔值,
124
+ "enable_enter_mute": 入会静音枚举值,
125
+ "allow_unmute_self": 是否允许自我解除静音布尔值,
126
+ "allow_external_user": 是否允许外部用户布尔值,
127
+ "enable_screen_watermark": 是否开启水印布尔值,
128
+ "watermark_type": 水印类型枚举值,
129
+ "auto_record_type": "录制类型枚举字符串",
130
+ "attendee_join_auto_record": 参会者加入自动录制布尔值,
131
+ "enable_host_pause_auto_record": 主持人可暂停录制布尔值,
132
+ "enable_doc_upload_permission": 允许上传文档布尔值,
133
+ "enable_enroll": 是否开启报名布尔值,
134
+ "enable_host_key": 是否启用主持人密钥布尔值,
135
+ "host_key": "主持人密钥字符串",
136
+ "hosts": {"userid": ["主持人userid列表"]},
137
+ "current_hosts": {"userid": ["当前主持人userid列表"]},
138
+ "co_hosts": {"userid": ["联席主持人userid列表"]},
139
+ "ring_users": {"userid": ["响铃用户userid列表"]}
140
+ },
141
+ "meeting_code": "会议号码字符串",
142
+ "meeting_link": "会议链接URL",
143
+ "has_vote": 是否有投票布尔值,
144
+ "has_more_sub_meeting": 是否有更多子会议枚举值,
145
+ "remain_sub_meetings": 剩余子会议场数,
146
+ "current_sub_meetingid": "当前子会议ID",
147
+ "guests": [
148
+ {
149
+ "area": "国际区号",
150
+ "phone_number": "手机号字符串",
151
+ "guest_name": "嘉宾姓名"
152
+ }
153
+ ],
154
+ "reminders": {
155
+ "is_repeat": 是否周期性枚举值,
156
+ "repeat_type": 重复类型枚举值,
157
+ "repeat_until_type": 结束类型枚举值,
158
+ "repeat_until_count": 限定次数,
159
+ "repeat_until_datetime": "YYYY-MM-DD HH:mm",
160
+ "repeat_interval": 重复间隔数值,
161
+ "is_custom_repeat": 是否自定义重复枚举值,
162
+ "repeat_day_of_week": [星期几数组],
163
+ "repeat_day_of_month": [日期数组],
164
+ "remind_before": [提醒秒数数组]
165
+ },
166
+ "sub_meetings": [
167
+ {
168
+ "sub_meetingid": "子会议ID",
169
+ "status": 子会议状态枚举值,
170
+ "start_datetime": "YYYY-MM-DD HH:mm",
171
+ "end_datetime": "YYYY-MM-DD HH:mm",
172
+ "title": "子会议标题",
173
+ "repeat_id": "周期性会议分段ID"
174
+ }
175
+ ],
176
+ "sub_repeat_list": [
177
+ {
178
+ "repeat_id": "周期性会议分段ID",
179
+ "repeat_type": 重复类型枚举值,
180
+ "repeat_until_type": 结束类型枚举值,
181
+ "repeat_until_count": 限定次数,
182
+ "repeat_until_datetime": "YYYY-MM-DD HH:mm",
183
+ "repeat_interval": 重复间隔数值,
184
+ "is_custom_repeat": 是否自定义重复枚举值,
185
+ "repeat_day_of_week": [星期几数组],
186
+ "repeat_day_of_month": [日期数组]
187
+ }
188
+ ]
189
+ }
190
+ ```
191
+
192
+ **关键返回字段:**
193
+
194
+ | 字段 | 类型 | 说明 |
195
+ | ----------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------- |
196
+ | `creator_userid` | string | 创建者 userid, 与 `admin_userid` 有且仅返回一个 |
197
+ | `admin_userid` | string | 会议管理 userid, 与 `creator_userid` 有且仅返回一个 |
198
+ | `title` | string | 会议标题 |
199
+ | `meeting_start_datetime` | string | 会议开始时间 |
200
+ | `meeting_duration` | integer | 会议时长 (秒) |
201
+ | `main_department` | integer | 创建者所属主部门 |
202
+ | `status` | integer | 会议状态 (1: 待开始, 2: 会议中, 3: 已结束, 4: 已取消, 5: 已过期) |
203
+ | `meeting_type` | integer | 会议类型 (0: 一次性会议, 1: 周期性会议, 2: 微信专属会议, 3: Rooms 投屏会议, 5: 个人会议号会议, 6: 网络研讨会) |
204
+ | `meeting_code` | string | 会议号码 |
205
+ | `meeting_link` | string | 会议链接 |
206
+ | `attendees.member` | array | 内部参与者列表 |
207
+ | `attendees.member[].status` | integer | 与会状态 (1: 已参与, 2: 未参与) |
208
+ | `attendees.tmp_external_user` | array | 外部参与者 (临时 ID) |
209
+ | `attendees.tmp_external_user[].status` | integer | 与会状态 (1: 已参与, 2: 未参与) |
210
+ | `guests` | array | 外部嘉宾列表, 每项含 `area`, `phone_number`, `guest_name` |
211
+ | `current_sub_meetingid` | string | 当前子会议 ID |
212
+ | `settings.ring_users` | object | 响铃用户列表 |
213
+ | `settings.need_password` | boolean | 是否需要密码 (只读字段) |
214
+ | `settings.enable_doc_upload_permission` | boolean | 是否允许成员上传文档 |
215
+ | `settings.hosts` | object | 主持人列表 |
216
+ | `settings.current_hosts` | object | 当前主持人列表 |
217
+ | `settings.co_hosts` | object | 联席主持人列表 |
218
+ | `reminders` | object | 周期性配置 |
219
+ | `has_vote` | boolean | 是否有投票 (仅会议创建人和主持人有权限查询) |
220
+ | `has_more_sub_meeting` | integer | 是否还有更多子会议特例 (0: 无更多, 1: 有更多) |
221
+ | `remain_sub_meetings` | integer | 剩余子会议场数 |
222
+ | `sub_meetings` | array | 子会议列表 |
223
+ | `sub_meetings[].status` | integer | 子会议状态 (0: 默认/存在, 1: 已删除) |
224
+ | `sub_meetings[].repeat_id` | string | 周期性会议分段 ID, 用于关联子会议所属分段 |
225
+ | `sub_repeat_list` | array | 周期性会议分段信息, 修改周期性会议某一场后可能产生不同分段, 各分段有不同重复规则 |
226
+
227
+ ---
228
+
229
+ ## 典型工作流
230
+
231
+ ### 工作流 1: 查询会议列表
232
+
233
+ **示例**: 用户说 "帮我查一下本周有哪些会议"
234
+
235
+ **步骤:**
236
+
237
+ 1. **确定时间范围**: 根据当前日期计算本周的起止时间.
238
+ 2. **查询会议 ID 列表**:
239
+
240
+ 使用 `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}'`
241
+
242
+ 3. **逐个查询会议详情** (对返回的每个 meetingid):
243
+
244
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<会议id1>"}'`
245
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<会议id2>"}'`
246
+
247
+ 4. **汇总展示**:
248
+
249
+ ```
250
+ 📋 本周会议列表 (共 3 场):
251
+
252
+ 1. 📅 技术方案评审
253
+ 🕐 2026-03-17 10:00 - 11:00
254
+ 👥 张三, 李四, 王五
255
+
256
+ 2. 📅 产品需求沟通
257
+ 🕐 2026-03-18 14:00 - 15:00
258
+ 👥 赵六, 钱七
259
+
260
+ 3. 📅 周五周会
261
+ 🕐 2026-03-21 09:00 - 10:00
262
+ 👥 全组成员
263
+ ```
264
+
265
+ > **分页处理**: 如果 `next_cursor` 不为空, 使用 `cursor` 参数继续拉取下一页.
266
+
267
+ ---
268
+
269
+ ### 工作流 2: 获取会议详情
270
+
271
+ **示例**: 用户说 "帮我看下技术方案评审会议的详情"
272
+
273
+ **步骤:**
274
+
275
+ 1. **定位会议**: 先通过会议列表查询找到目标会议的 meetingid (按关键词匹配).
276
+ 2. **查询详情**:
277
+
278
+ 使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting get_meeting_info '{"meetingid": "<target_meetingid>"}'`
279
+
280
+ 3. **展示结果**:
281
+
282
+ #会议号: <会议号>
283
+
284
+ ```
285
+ 📅 <会议标题>
286
+
287
+ 🕐 时间: <开始时间>, 时长 <时长>
288
+ 📍 地点: <会议地点>
289
+ 📝 描述: <会议描述>
290
+ 👤 创建者: <创建者姓名>
291
+ 👥 参与者: <参与者姓名列表>
292
+ 🔗 会议链接: <会议链接>
293
+ ```
294
+
295
+ ---
296
+
297
+ ### 工作流 3: 根据关键词查找会议
298
+
299
+ **示例**: 用户说 "技术评审会议是什么时候?"
300
+
301
+ **查询策略:**
302
+
303
+ 1. **确定查询范围**: 默认查当日前后 30 天 (接口限制范围).
304
+ 2. **拉取会议列表**:
305
+
306
+ 使用 `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}'`
307
+
308
+ 3. **逐个查询详情并匹配标题关键词**.
309
+ 4. **找到匹配后停止查询, 展示结果**:
310
+
311
+ #会议号: <会议号>
312
+
313
+ ```
314
+ ✅ 找到会议: "<会议标题>"
315
+
316
+ 📅 时间: <开始时间>, 时长 <时长>
317
+ 📍 地点: <会议地点>
318
+ 👥 参与者: <参与者姓名列表>
319
+ 🔗 会议链接: <会议链接>
320
+ ```
321
+
322
+ 5. **未找到处理**: 告知用户在前后 30 天范围内未找到匹配会议, 请确认会议名称.
323
+
324
+ ---
325
+
326
+ ## 注意事项
327
+
328
+ - **时间格式**: 统一使用 `YYYY-MM-DD HH:mm` 格式
329
+ - **会议列表时间范围限制**: 仅支持查询当日及前后 30 天内的会议
330
+ - **查询详情需两步**: 先通过 `list_user_meetings` 获取会议 ID 列表, 再通过 `get_meeting_info` 逐个获取详情