@lanmers/wecom-openclaw-plugin 1.0.12
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/README.md +220 -0
- package/dist/index.cjs.js +3591 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.esm.js +3565 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/src/channel.d.ts +3 -0
- package/dist/src/const.d.ts +64 -0
- package/dist/src/dm-policy.d.ts +29 -0
- package/dist/src/group-policy.d.ts +29 -0
- package/dist/src/interface.d.ts +154 -0
- package/dist/src/mcp/index.d.ts +6 -0
- package/dist/src/mcp/schema.d.ts +11 -0
- package/dist/src/mcp/tool.d.ts +55 -0
- package/dist/src/mcp/transport.d.ts +61 -0
- package/dist/src/mcp-config.d.ts +29 -0
- package/dist/src/media-handler.d.ts +36 -0
- package/dist/src/media-uploader.d.ts +131 -0
- package/dist/src/message-parser.d.ts +72 -0
- package/dist/src/message-sender.d.ts +23 -0
- package/dist/src/monitor.d.ts +27 -0
- package/dist/src/onboarding.d.ts +5 -0
- package/dist/src/openclaw-compat.d.ts +48 -0
- package/dist/src/reqid-store.d.ts +31 -0
- package/dist/src/runtime.d.ts +3 -0
- package/dist/src/state-manager.d.ts +76 -0
- package/dist/src/timeout.d.ts +20 -0
- package/dist/src/utils.d.ts +96 -0
- package/dist/src/version.d.ts +2 -0
- package/openclaw.plugin.json +14 -0
- package/package.json +73 -0
- package/skills/wecom-contact-lookup/SKILL.md +162 -0
- package/skills/wecom-doc/SKILL.md +363 -0
- package/skills/wecom-doc/references/doc-api.md +224 -0
- package/skills/wecom-doc-manager/SKILL.md +64 -0
- package/skills/wecom-doc-manager/references/api-create-doc.md +56 -0
- package/skills/wecom-doc-manager/references/api-edit-doc-content.md +68 -0
- package/skills/wecom-doc-manager/references/api-export-document.md +88 -0
- package/skills/wecom-edit-todo/SKILL.md +249 -0
- package/skills/wecom-get-todo-detail/SKILL.md +143 -0
- package/skills/wecom-get-todo-list/SKILL.md +127 -0
- package/skills/wecom-meeting-create/SKILL.md +158 -0
- package/skills/wecom-meeting-create/references/example-full.md +30 -0
- package/skills/wecom-meeting-create/references/example-reminder.md +46 -0
- package/skills/wecom-meeting-create/references/example-security.md +22 -0
- package/skills/wecom-meeting-manage/SKILL.md +136 -0
- package/skills/wecom-meeting-query/SKILL.md +330 -0
- package/skills/wecom-preflight/SKILL.md +141 -0
- package/skills/wecom-schedule/SKILL.md +159 -0
- package/skills/wecom-schedule/references/api-check-availability.md +56 -0
- package/skills/wecom-schedule/references/api-create-schedule.md +38 -0
- package/skills/wecom-schedule/references/api-get-schedule-detail.md +81 -0
- package/skills/wecom-schedule/references/api-update-schedule.md +30 -0
- package/skills/wecom-schedule/references/ref-reminders.md +24 -0
- package/skills/wecom-smartsheet-data/SKILL.md +71 -0
- package/skills/wecom-smartsheet-data/references/api-get-records.md +61 -0
- package/skills/wecom-smartsheet-data/references/cell-value-formats.md +120 -0
- package/skills/wecom-smartsheet-schema/SKILL.md +92 -0
- package/skills/wecom-smartsheet-schema/references/field-types.md +43 -0
|
@@ -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` 逐个获取详情
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wecom-preflight
|
|
3
|
+
description: 企业微信插件前置条件检查。在执行任何 wecom_mcp 操作前,通过 shell 命令检查工具权限配置(profile 和白名单),若缺失则自动修复并提示用户重启 Gateway。所有使用 wecom_mcp 的技能都应在首次调用前执行此检查。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 企业微信前置条件检查
|
|
7
|
+
|
|
8
|
+
> 本技能确保 `wecom_mcp` 工具已正确获得执行权限。**所有使用 wecom_mcp 的技能在首次调用前,必须先执行本检查流程。**
|
|
9
|
+
|
|
10
|
+
## 触发条件
|
|
11
|
+
|
|
12
|
+
当满足以下**任一条件**时,执行前置检查:
|
|
13
|
+
|
|
14
|
+
1. 当前会话中**首次**需要调用 `wecom_mcp` 工具
|
|
15
|
+
2. 调用 `wecom_mcp` 时收到 `tool not allowed`、`not permitted`、`permission denied` 或类似权限错误
|
|
16
|
+
|
|
17
|
+
> 如果当前会话中已成功调用过 `wecom_mcp`(任何操作),则无需重复检查。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 检查流程
|
|
22
|
+
|
|
23
|
+
> **重要**:以下所有步骤均为 **shell 命令**(在终端中执行),**不是** MCP tool 调用。
|
|
24
|
+
> `wecom_mcp` 在未加入白名单前对 AI Agent 不可见,因此不能用 tool 调用来探测。
|
|
25
|
+
|
|
26
|
+
### 步骤 1:检查 tools.profile
|
|
27
|
+
|
|
28
|
+
在终端执行以下命令,读取当前 `tools.profile` 配置:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
openclaw config get tools.profile
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
根据返回结果分流:
|
|
35
|
+
|
|
36
|
+
- **返回 `full`** → ✅ **检查通过**。`full` 模式无任何工具限制,所有工具(包括 `wecom_mcp`)直接可用,无需检查 `alsoAllow`,继续执行用户原始请求
|
|
37
|
+
- **返回其他值**(如 `coding`、`messaging`、`minimal`、`undefined` 或空)→ 进入步骤 1b(检查 alsoAllow)
|
|
38
|
+
- **命令执行失败**(如 `command not found: openclaw`、权限错误等)→ 进入步骤 3(环境异常)
|
|
39
|
+
|
|
40
|
+
### 步骤 1b:检查 tools.alsoAllow
|
|
41
|
+
|
|
42
|
+
在终端执行以下命令,读取当前 `tools.alsoAllow` 配置:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
openclaw config get tools.alsoAllow
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
根据返回结果分流:
|
|
49
|
+
|
|
50
|
+
- **返回内容包含 `wecom_mcp`**(如 `["wecom_mcp"]` 或 `["wecom_mcp", "other_tool"]`)→ ✅ 白名单已配置,检查通过,继续执行用户原始请求
|
|
51
|
+
- **返回内容不包含 `wecom_mcp`**(如空数组 `[]`、`undefined`、或列表中没有 `wecom_mcp`)→ 进入步骤 2(自动修复)
|
|
52
|
+
- **命令执行失败** → 进入步骤 3(环境异常)
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### 步骤 2:自动修复 tools.alsoAllow
|
|
57
|
+
|
|
58
|
+
在终端执行以下命令,将 `wecom_mcp` 加入工具白名单:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
openclaw config set tools.alsoAllow '["wecom_mcp"]'
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> **注意**:如果步骤 1b 返回的列表中已有其他工具(如 `["other_tool"]`),需要合并后再写入,例如:
|
|
65
|
+
> ```bash
|
|
66
|
+
> openclaw config set tools.alsoAllow '["other_tool", "wecom_mcp"]'
|
|
67
|
+
> ```
|
|
68
|
+
|
|
69
|
+
根据执行结果分流:
|
|
70
|
+
|
|
71
|
+
#### 2a. 命令执行成功
|
|
72
|
+
|
|
73
|
+
向用户回复(**不要自动执行重启**):
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
✅ 已自动将 wecom_mcp 加入工具执行权限白名单(tools.alsoAllow)。
|
|
77
|
+
⚠️ 配置变更需要重启 Gateway 后才能生效,请在终端执行以下命令:
|
|
78
|
+
|
|
79
|
+
openclaw gateway restart
|
|
80
|
+
|
|
81
|
+
重启完成后请重新发送您的请求。
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
> **为什么不自动重启**:`openclaw gateway restart` 会中断当前所有活跃连接(包括本会话),
|
|
85
|
+
> 如果由 AI 自动执行,用户可能无法看到完整的提示信息。交由用户手动重启更可控。
|
|
86
|
+
|
|
87
|
+
#### 2b. 命令执行失败
|
|
88
|
+
|
|
89
|
+
向用户回复以下手动修复指引:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
❌ 自动配置失败,请在终端手动执行以下命令:
|
|
93
|
+
|
|
94
|
+
openclaw config set tools.alsoAllow '["wecom_mcp"]'
|
|
95
|
+
openclaw gateway restart
|
|
96
|
+
|
|
97
|
+
完成后请重新发送您的请求。
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### 步骤 3:环境异常处理
|
|
103
|
+
|
|
104
|
+
如果步骤 1 或 1b 的 `openclaw` 命令本身执行失败(如 `command not found`、权限不足等),说明 OpenClaw CLI 未正确安装或不在 PATH 中,直接告知用户:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
⚠️ OpenClaw CLI 不可用:<错误信息>
|
|
108
|
+
|
|
109
|
+
可能原因:
|
|
110
|
+
- OpenClaw 未安装或未加入系统 PATH
|
|
111
|
+
- OpenClaw 版本过低,不支持 config 子命令
|
|
112
|
+
- 当前 shell 环境缺少必要配置
|
|
113
|
+
|
|
114
|
+
请检查 OpenClaw 安装状态后重试。
|
|
115
|
+
参考:https://docs.openclaw.dev/installation
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 注意事项
|
|
121
|
+
|
|
122
|
+
1. **全程使用 shell 命令**:本技能的所有探测和修复操作均通过 `openclaw` CLI 在终端中执行,**不涉及任何 MCP tool 调用**。这样可以避免"tool 未白名单 → tool 不可见 → 无法探测"的死锁问题
|
|
123
|
+
2. **profile 优先判断**:`tools.profile` 为 `full` 时所有工具无限制,无需检查 `alsoAllow`,可快速跳过
|
|
124
|
+
3. **幂等性**:如果 `tools.alsoAllow` 中已包含 `wecom_mcp`,`openclaw config set` 命令不会产生副作用
|
|
125
|
+
4. **保留已有配置**:修改 `tools.alsoAllow` 时,需保留列表中已有的其他工具名,仅追加 `wecom_mcp`
|
|
126
|
+
5. **不自动重启**:自动配置成功后仅提示用户重启并附上命令,由用户手动执行,避免会话中断导致信息丢失
|
|
127
|
+
6. **会话缓存**:在同一个会话中,一旦检查通过(profile 为 full 或 alsoAllow 包含 wecom_mcp),后续调用无需重复检查
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 快速参考
|
|
132
|
+
|
|
133
|
+
| 场景 | 处理方式 |
|
|
134
|
+
|------|---------|
|
|
135
|
+
| 首次调用 wecom_mcp 前 | 执行 `openclaw config get tools.profile` 检查 |
|
|
136
|
+
| `tools.profile` 为 `full` | ✅ 跳过,直接执行原始请求 |
|
|
137
|
+
| profile 非 full + alsoAllow 已包含 wecom_mcp | ✅ 跳过,继续执行 |
|
|
138
|
+
| profile 非 full + alsoAllow 不包含 → 自动写入成功 | 提示已配置 + 附 `openclaw gateway restart` 命令让用户重启 |
|
|
139
|
+
| profile 非 full + alsoAllow 不包含 → 自动写入失败 | 给出手动修复指引 |
|
|
140
|
+
| openclaw CLI 不可用 | 告知用户检查 OpenClaw 安装 |
|
|
141
|
+
| 会话中已成功调用过 wecom_mcp | 跳过检查 |
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wecom-schedule
|
|
3
|
+
description: 企业微信日程管理技能。适用于用户对企业微信日程的各类管理需求。当用户需要:(1) 查询指定时间范围内的日程列表或获取日程详细信息(标题、时间、地点、参与者等),(2) 创建新日程并设置提醒、参与人等,(3) 修改已有日程的标题、时间、地点等信息或取消日程,(4) 添加或移除日程参与人,(5) 查询多个成员的闲忙状态并分析共同空闲时段以安排会议时使用此技能。
|
|
4
|
+
metadata:
|
|
5
|
+
{
|
|
6
|
+
"openclaw": { "emoji": "📅" },
|
|
7
|
+
}
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 企业微信日程管理技能
|
|
11
|
+
|
|
12
|
+
> `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
|
|
13
|
+
|
|
14
|
+
> ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
|
|
15
|
+
|
|
16
|
+
通过 `wecom_mcp call schedule <接口名> '<json入参>'` 与企业微信日程系统交互。
|
|
17
|
+
|
|
18
|
+
## 注意事项
|
|
19
|
+
|
|
20
|
+
- 日程列表查询仅支持**当日前后 30 天**,时间格式 `YYYY-MM-DD` 或 `YYYY-MM-DD HH:MM:SS`
|
|
21
|
+
- 涉及参与者 userid 时,需先使用 **wecom-contact-lookup** 技能获取;存在同名时展示候选让用户选择(禁止暴露 userid)
|
|
22
|
+
- 创建/修改/取消前,先确认目标日程和参与者信息
|
|
23
|
+
- `errcode != 0` 时展示错误信息;返回的 `start_time`/`end_time` 为 Unix 时间戳(秒),需转为可读格式
|
|
24
|
+
- **注意时间格式转换**:接口入参使用字符串格式(如 `YYYY-MM-DD HH:MM:SS`),但返回值多为 Unix 时间戳,使用时需进行格式转换
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 接口列表
|
|
29
|
+
|
|
30
|
+
### get_schedule_list_by_range — 查询日程 ID 列表
|
|
31
|
+
|
|
32
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule get_schedule_list_by_range '{"start_time": "YYYY-MM-DD HH:MM:SS", "end_time": "YYYY-MM-DD HH:MM:SS"}'`
|
|
33
|
+
|
|
34
|
+
返回 `schedule_id_list` 数组。仅支持当日前后 30 天。
|
|
35
|
+
|
|
36
|
+
### get_schedule_detail — 获取日程详情
|
|
37
|
+
|
|
38
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule get_schedule_detail '{"schedule_id_list": ["SCHEDULE_ID_1", "SCHEDULE_ID_2"]}'`
|
|
39
|
+
|
|
40
|
+
支持 1~50 个 ID,返回日程标题、时间、地点、参与者等。参见 [API 详情](references/api-get-schedule-detail.md)。
|
|
41
|
+
|
|
42
|
+
### create_schedule — 创建日程
|
|
43
|
+
|
|
44
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule create_schedule '{"schedule": {"start_time": "YYYY-MM-DD HH:MM:SS", "end_time": "YYYY-MM-DD HH:MM:SS", "summary": "日程标题", "attendees": [{"userid": "USER_ID"}], "reminders": {"is_remind": 1, "remind_before_event_secs": 3600, "timezone": 8}}}'`
|
|
45
|
+
|
|
46
|
+
参见 [API 详情](references/api-create-schedule.md) | [reminders 字段](references/ref-reminders.md)。
|
|
47
|
+
|
|
48
|
+
### update_schedule — 修改日程
|
|
49
|
+
|
|
50
|
+
只需传入需修改的字段,未传字段保持不变。
|
|
51
|
+
|
|
52
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule update_schedule '{"schedule": {"schedule_id": "SCHEDULE_ID", "summary": "更新后的标题"}}'`
|
|
53
|
+
|
|
54
|
+
参见 [API 详情](references/api-update-schedule.md)。
|
|
55
|
+
|
|
56
|
+
### cancel_schedule — 取消日程
|
|
57
|
+
|
|
58
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule cancel_schedule '{"schedule_id": "SCHEDULE_ID"}'`
|
|
59
|
+
|
|
60
|
+
### add_schedule_attendees / del_schedule_attendees — 管理参与人
|
|
61
|
+
|
|
62
|
+
- 添加参与人:使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule add_schedule_attendees '{"schedule_id": "SCHEDULE_ID", "attendees": [{"userid": "USER_ID"}]}'`
|
|
63
|
+
- 移除参与人:使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule del_schedule_attendees '{"schedule_id": "SCHEDULE_ID", "attendees": [{"userid": "USER_ID"}]}'`
|
|
64
|
+
|
|
65
|
+
### check_availablity — 查询闲忙
|
|
66
|
+
|
|
67
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule check_availablity '{"check_user_list": ["USER_ID_1", "USER_ID_2"], "start_time": "YYYY-MM-DD HH:MM:SS", "end_time": "YYYY-MM-DD HH:MM:SS"}'`
|
|
68
|
+
|
|
69
|
+
支持 1~10 个用户,返回各用户的忙碌时段列表。参见 [API 详情](references/api-check-availability.md)。
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 典型工作流
|
|
74
|
+
|
|
75
|
+
### 查询日程
|
|
76
|
+
|
|
77
|
+
**经典 query 示例:**
|
|
78
|
+
- "我今天有哪些日程?"
|
|
79
|
+
- "帮我看看这周三下午有没有会议"
|
|
80
|
+
- "明天的日程安排是什么?"
|
|
81
|
+
- "查一下最近有没有关于项目评审的日程"
|
|
82
|
+
- "我下周一到周五的日程都有哪些?"
|
|
83
|
+
|
|
84
|
+
**流程:**
|
|
85
|
+
1. 根据用户意图计算时间范围(如"今天"→当日 00:00:00 至 23:59:59,"这周"→本周一至周日)
|
|
86
|
+
2. 调用 `get_schedule_list_by_range` 获取日程 ID 列表
|
|
87
|
+
3. 调用 `get_schedule_detail` 批量获取详情,将 Unix 时间戳转为可读时间
|
|
88
|
+
4. 若用户提到关键词(如"项目评审"),在 `summary` 中匹配筛选;未找到则逐步扩大范围至前后 30 天上限
|
|
89
|
+
5. 展示日程列表时包含标题、时间、地点、参与者等关键信息,方便用户快速了解
|
|
90
|
+
|
|
91
|
+
### 创建日程
|
|
92
|
+
|
|
93
|
+
**经典 query 示例:**
|
|
94
|
+
- "帮我创建一个明天下午 2 点到 3 点的会议,标题叫需求评审"
|
|
95
|
+
- "安排一个周五全天的团建活动"
|
|
96
|
+
- "创建日程:后天上午 10 点和张三、李四开产品方案讨论会,地点在 3 楼会议室"
|
|
97
|
+
- "帮我建个日程,下周一 14:00-15:00,提前 15 分钟提醒"
|
|
98
|
+
- "约一个明天上午的日程,邀请王伟参加"
|
|
99
|
+
|
|
100
|
+
**流程:**
|
|
101
|
+
1. 解析用户意图,提取时间、标题、地点、参与人、提醒设置等信息
|
|
102
|
+
2. 若涉及参与人,先通过 **wecom-contact-lookup** 查询 userid;存在同名时展示候选让用户选择
|
|
103
|
+
3. 若用户未指定提醒,默认设置提前 15 分钟提醒(`remind_before_event_secs: 900`)
|
|
104
|
+
4. 若用户说"全天",设置 `is_whole_day: 1`,时间设为当天 00:00:00 至 23:59:59
|
|
105
|
+
5. 向用户确认日程信息(标题、时间、地点、参与人等)后调用 `create_schedule`
|
|
106
|
+
|
|
107
|
+
### 修改日程
|
|
108
|
+
|
|
109
|
+
**经典 query 示例:**
|
|
110
|
+
- "把明天的需求评审改到后天下午 3 点"
|
|
111
|
+
- "帮我修改下今天下午的会议标题,改成技术方案评审"
|
|
112
|
+
- "我今天 14 点的日程地点改成线上腾讯会议"
|
|
113
|
+
- "把周五的团建活动推迟一个小时"
|
|
114
|
+
- "帮我给明天的周会加个描述:讨论 Q2 规划"
|
|
115
|
+
|
|
116
|
+
**流程:**
|
|
117
|
+
1. 先通过查询工作流定位目标日程(根据用户提到的时间、标题等关键词匹配)
|
|
118
|
+
2. 若匹配到多个日程,展示候选列表让用户确认
|
|
119
|
+
3. 向用户确认要修改的字段和目标值
|
|
120
|
+
4. 调用 `update_schedule`,只传入需修改的字段
|
|
121
|
+
|
|
122
|
+
### 取消日程
|
|
123
|
+
|
|
124
|
+
**经典 query 示例:**
|
|
125
|
+
- "取消明天下午的需求评审"
|
|
126
|
+
- "帮我把周五的团建日程删掉"
|
|
127
|
+
- "我不想开今天 15 点的会了,帮我取消"
|
|
128
|
+
|
|
129
|
+
**流程:**
|
|
130
|
+
1. 先通过查询工作流定位目标日程
|
|
131
|
+
2. 向用户确认取消的日程信息(标题、时间等),避免误操作
|
|
132
|
+
3. 确认后调用 `cancel_schedule`
|
|
133
|
+
|
|
134
|
+
### 管理参与人
|
|
135
|
+
|
|
136
|
+
**经典 query 示例:**
|
|
137
|
+
- "把张三加到明天的需求评审会议里"
|
|
138
|
+
- "帮我把李四从周五的日程里移除"
|
|
139
|
+
- "明天下午的会议再邀请一下王伟和赵敏"
|
|
140
|
+
- "把我后天那个技术分享的参与人里去掉刘强"
|
|
141
|
+
|
|
142
|
+
**流程:**
|
|
143
|
+
1. 通过 **wecom-contact-lookup** 获取目标人员 userid;存在同名时展示候选让用户选择
|
|
144
|
+
2. 通过查询工作流定位目标日程
|
|
145
|
+
3. 调用 `add_schedule_attendees` 或 `del_schedule_attendees` 完成添加/移除
|
|
146
|
+
|
|
147
|
+
### 查询闲忙并安排会议
|
|
148
|
+
|
|
149
|
+
**经典 query 示例:**
|
|
150
|
+
- "帮我看看张三和李四明天下午有没有空"
|
|
151
|
+
- "查一下我和王伟这周的空闲时间,想约个会"
|
|
152
|
+
- "我想跟产品组的小明、小红开个会,看看大家什么时候有空"
|
|
153
|
+
- "找一个明天下午大家都有空的时段,安排一个 1 小时的会议"
|
|
154
|
+
|
|
155
|
+
**流程:**
|
|
156
|
+
1. 通过 **wecom-contact-lookup** 获取相关人员 userid
|
|
157
|
+
2. 调用 `check_availablity` 查询指定时间范围内各用户的忙碌时段
|
|
158
|
+
3. 分析所有用户的忙碌时段,计算出共同空闲时段并推荐给用户
|
|
159
|
+
4. 用户确认时段后,调用 `create_schedule` 创建会议并自动添加参与人
|