@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,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wecom-get-todo-list
|
|
3
|
+
description: 企业微信待办列表查询技能,支持按创建时间和提醒时间过滤,支持分页。在用户说"看看我的待办列表"、"我有哪些待办"、"这周的待办有哪些"、"最近有什么待办"、"查一下我的待办"、"列出所有待办"等需要浏览待办概览的场景时使用。注意:此技能仅返回待办概要信息(不含内容和分派人),如需完整详情请配合 wecom-get-todo-detail 使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 企业微信待办列表查询技能
|
|
7
|
+
|
|
8
|
+
> `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
|
|
9
|
+
|
|
10
|
+
> ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
|
|
11
|
+
|
|
12
|
+
通过 `wecom_mcp` tool 查询企业微信待办列表,支持按时间过滤和分页。
|
|
13
|
+
|
|
14
|
+
## 行为策略
|
|
15
|
+
|
|
16
|
+
**查完列表必须查详情**: 本接口只返回待办 ID 和状态等概要信息,不包含待办的实际内容和分派人。对用户来说,没有内容的待办列表毫无用处——他们想知道的是"要做什么",而不是一串 ID。因此,每次调用 get_todo_list 拿到结果后,都要紧接着用返回的 todo_id 列表调用 `wecom-get-todo-detail` 获取完整详情(内容、分派人等),然后再向用户展示。这不是可选步骤,而是完成用户请求的必要环节。
|
|
17
|
+
|
|
18
|
+
**分页未拉完时必须提醒用户**: 接口是分页的,不要求一次性拉完所有数据。但如果响应中 `has_more` 为 `true`,说明后面还有待办没有返回——这时你在展示当前结果的同时,必须明确告诉用户"还有更多待办未显示,是否需要继续查看?"。用户可能不知道后面还有数据,如果你不说,他们会以为看到的就是全部,这会导致遗漏重要待办。这是一个容易被忽略但后果严重的点,请务必执行。
|
|
19
|
+
|
|
20
|
+
**重试策略**: 遭遇"返回 HTTP 错误"或"HTTP 请求失败"时,主动重试,最多重试三次。
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 调用方式
|
|
25
|
+
|
|
26
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '<json格式的入参>'`
|
|
27
|
+
|
|
28
|
+
## 参数说明
|
|
29
|
+
|
|
30
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
31
|
+
|------|------|------|------|
|
|
32
|
+
| `create_begin_time` | string | ❌ | 创建开始时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
33
|
+
| `create_end_time` | string | ❌ | 创建结束时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
34
|
+
| `remind_begin_time` | string | ❌ | 提醒开始时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
35
|
+
| `remind_end_time` | string | ❌ | 提醒结束时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
36
|
+
| `limit` | number | ❌ | 最大返回数量,默认 10,最大 20 |
|
|
37
|
+
| `cursor` | string | ❌ | 分页游标,首次请求不传,后续传入上次响应的 `next_cursor` |
|
|
38
|
+
|
|
39
|
+
## 返回格式
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"errcode": 0,
|
|
44
|
+
"errmsg": "ok",
|
|
45
|
+
"index_list": [
|
|
46
|
+
{
|
|
47
|
+
"todo_id": "TODO_ID",
|
|
48
|
+
"todo_status": 1,
|
|
49
|
+
"user_status": 1,
|
|
50
|
+
"creator_id": "CREATOR_ID",
|
|
51
|
+
"remind_time": "2025-06-01 09:00:00",
|
|
52
|
+
"create_time": "2025-01-15 10:30:00",
|
|
53
|
+
"update_time": "2025-01-16 14:20:00"
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"next_cursor": "NEXT_CURSOR",
|
|
57
|
+
"has_more": false
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 返回字段说明
|
|
62
|
+
|
|
63
|
+
| 字段 | 类型 | 说明 |
|
|
64
|
+
|------|------|------|
|
|
65
|
+
| `index_list` | array | 待办列表 |
|
|
66
|
+
| `index_list[].todo_id` | string | 待办唯一 ID |
|
|
67
|
+
| `index_list[].todo_status` | number | 待办状态:`0`-已完成,`1`-进行中,`2`-已删除 |
|
|
68
|
+
| `index_list[].user_status` | number | 用户状态:`0`-拒绝,`1`-接受,`2`-已完成 |
|
|
69
|
+
| `index_list[].creator_id` | string | 创建人 ID |
|
|
70
|
+
| `index_list[].remind_time` | string | 提醒时间 |
|
|
71
|
+
| `index_list[].create_time` | string | 创建时间 |
|
|
72
|
+
| `index_list[].update_time` | string | 更新时间 |
|
|
73
|
+
| `next_cursor` | string | 下一页游标 |
|
|
74
|
+
| `has_more` | boolean | 是否还有更多记录 |
|
|
75
|
+
|
|
76
|
+
> 列表返回的是待办概要信息(不含内容和分派人)。拿到列表后,必须调用 `wecom-get-todo-detail` 获取完整详情再展示给用户。
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 典型工作流
|
|
81
|
+
|
|
82
|
+
### 查看待办列表(标准两步流程)
|
|
83
|
+
|
|
84
|
+
用户问:"看看我最近的待办" / "我有哪些待办事项?" / "我还有多少事要做?"
|
|
85
|
+
|
|
86
|
+
1. 第一步:获取待办列表(只有 ID 和状态,没有内容)。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{}'`
|
|
87
|
+
2. 第二步(禁止跳过!):用返回的 todo_id 列表调用 wecom-get-todo-detail 获取完整详情。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '{"todo_id_list": ["返回的TODO_ID_1", "返回的TODO_ID_2"]}'`
|
|
88
|
+
|
|
89
|
+
两步缺一不可——只有拿到详情后,才能向用户展示有意义的待办内容。
|
|
90
|
+
|
|
91
|
+
3. 第三步(条件执行):检查第一步返回的 `has_more` 字段。如果为 `true`,在展示结果时必须提醒用户:"以上是部分待办,还有更多待办未显示,需要我继续查看吗?"——不提醒的话,用户会以为这就是全部。
|
|
92
|
+
|
|
93
|
+
### 按时间范围查询
|
|
94
|
+
|
|
95
|
+
用户问:"这个月创建的待办有哪些?"
|
|
96
|
+
|
|
97
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{"create_begin_time": "2025-03-01 00:00:00", "create_end_time": "2025-03-31 23:59:59"}'`
|
|
98
|
+
|
|
99
|
+
### 分页获取大量待办
|
|
100
|
+
|
|
101
|
+
当待办数量超过单页上限时,通过 `cursor` 循环分页拉取:
|
|
102
|
+
|
|
103
|
+
- 首次请求(不传 cursor):使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{"limit": 20}'`,如果没有拉取完,还有更多的待办,会返回 has_more=true, next_cursor="CURSOR_1"
|
|
104
|
+
- 第二次请求(传入上次的 next_cursor):使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{"limit": 20, "cursor": "CURSOR_1"}'`,返回 has_more=false,拉取完毕
|
|
105
|
+
|
|
106
|
+
**分页规则:**
|
|
107
|
+
- 首次请求不传 `cursor`
|
|
108
|
+
- `has_more` 为 `true` 时,将 `next_cursor` 作为下次请求的 `cursor` 传入
|
|
109
|
+
- `has_more` 为 `false` 时停止请求
|
|
110
|
+
- 分页过程中时间过滤参数保持不变
|
|
111
|
+
- **如果选择不继续翻页(比如当前页数据已经够用),必须告诉用户还有更多待办未显示,问用户是否需要继续查看**
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 注意事项
|
|
116
|
+
|
|
117
|
+
1. **时间格式**:所有时间参数使用 `YYYY-MM-DD HH:mm:ss` 格式,用户说"明天"、"下周一"等相对时间时,根据当前日期推算具体日期
|
|
118
|
+
|
|
119
|
+
2. **状态值含义**
|
|
120
|
+
- 待办状态(`todo_status`):`0`-已完成,`1`-进行中,`2`-已删除
|
|
121
|
+
- 用户状态(`user_status`):`0`-拒绝,`1`-接受,`2`-已完成
|
|
122
|
+
|
|
123
|
+
3. **错误处理**:若 `errcode` 不为 `0`,告知用户 `errmsg` 中的错误信息
|
|
124
|
+
|
|
125
|
+
4. **必须查详情**:本接口返回的是概要信息(不含内容和分派人),拿到列表后必须紧接着调用 `wecom-get-todo-detail` 获取完整内容再展示给用户,不要只展示列表概要
|
|
126
|
+
|
|
127
|
+
5. **分页未拉完必须提醒**:如果返回的 `has_more` 为 `true`,在向用户展示结果时必须明确说明"还有更多待办未显示"并询问用户是否需要继续查看。用户不知道后面还有数据,不提醒会导致遗漏
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wecom-meeting-create
|
|
3
|
+
description: 企业微信会议创建技能, 支持创建预约会议. 当用户需要"创建会议", "预约会议", "约会议", "安排会议"时触发.
|
|
4
|
+
---
|
|
5
|
+
# 企业微信会议创建技能
|
|
6
|
+
|
|
7
|
+
> `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
|
|
8
|
+
|
|
9
|
+
> ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
|
|
10
|
+
|
|
11
|
+
## 概述
|
|
12
|
+
|
|
13
|
+
wecom-meeting-create 提供企业微信预约会议的创建能力, 支持设置会议参数, 邀请参与人等.
|
|
14
|
+
|
|
15
|
+
## 命令调用方式
|
|
16
|
+
|
|
17
|
+
查看可用命令列表:使用 `wecom_mcp` tool 调用 `wecom_mcp list meeting`
|
|
18
|
+
|
|
19
|
+
执行指定命令:使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting <tool_name> '<json_params>'`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 命令详细说明
|
|
24
|
+
|
|
25
|
+
### 创建预约会议 (create_meeting)
|
|
26
|
+
|
|
27
|
+
创建一个预约会议, 支持设置会议参数配置等.
|
|
28
|
+
|
|
29
|
+
#### 执行命令
|
|
30
|
+
|
|
31
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting create_meeting '{"title": "<会议标题>", "meeting_start_datetime": "<会议开始时间>", "meeting_duration": <会议持续时长(秒)>}'`
|
|
32
|
+
|
|
33
|
+
#### 入参说明
|
|
34
|
+
|
|
35
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
36
|
+
| -------------------------- | ------- | ---- | ------------------------------------------------- |
|
|
37
|
+
| `title` | string | 是 | 会议标题 |
|
|
38
|
+
| `meeting_start_datetime` | string | 是 | 会议开始时间, 格式:`YYYY-MM-DD HH:mm` |
|
|
39
|
+
| `meeting_duration` | integer | 是 | 会议持续时长 (秒), 例如 3600 = 1 小时 |
|
|
40
|
+
| `description` | string | 否 | 会议描述 |
|
|
41
|
+
| `location` | string | 否 | 会议地点 |
|
|
42
|
+
| `invitees` | object | 是 | 被邀请人, 格式:`{"userid": ["lisi", "wangwu"]}` |
|
|
43
|
+
| `settings` | object | 否 | 会议设置 (详见下方) |
|
|
44
|
+
|
|
45
|
+
> 被邀请人 userid 通过 `wecom-contact-lookup` 技能获取
|
|
46
|
+
|
|
47
|
+
**settings 字段:**
|
|
48
|
+
|
|
49
|
+
| 参数 | 类型 | 说明 |
|
|
50
|
+
| --------------------------- | ------- | --------------------------------------------- |
|
|
51
|
+
| `password` | string | 会议密码 |
|
|
52
|
+
| `enable_waiting_room` | boolean | 是否启用等候室 |
|
|
53
|
+
| `allow_enter_before_host` | boolean | 是否允许成员在主持人进入前加入 |
|
|
54
|
+
| `enable_enter_mute` | integer | 入会时静音设置 (枚举: 0: 关闭, 1: 开启) |
|
|
55
|
+
| `allow_external_user` | boolean | 是否允许外部用户入会 |
|
|
56
|
+
| `enable_screen_watermark` | boolean | 是否开启屏幕水印 |
|
|
57
|
+
| `remind_scope` | integer | 提醒范围 (1: 不提醒, 2: 仅提醒主持人, 3: 提醒所有成员, 4: 指定部分人响铃, 默认仅提醒主持人) |
|
|
58
|
+
| `ring_users` | object | 响铃用户, 格式:`{"userid": ["lisi"]}` |
|
|
59
|
+
|
|
60
|
+
> 响铃用户 userid 通过 `wecom-contact-lookup` 技能获取
|
|
61
|
+
|
|
62
|
+
#### 返回参数
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"errcode": 0,
|
|
67
|
+
"errmsg": "ok",
|
|
68
|
+
"meetingid": "会议ID字符串",
|
|
69
|
+
"meeting_code": "会议号码字符串",
|
|
70
|
+
"meeting_link": "会议链接URL",
|
|
71
|
+
"excess_users": ["无效会议账号的userid"]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
| 字段 | 类型 | 说明 |
|
|
76
|
+
| ---------------- | ------ | ------------------------------------------------------------------------------------------------------------------ |
|
|
77
|
+
| `meetingid` | string | 会议 ID |
|
|
78
|
+
| `meeting_code` | string | 会议号码, 向用户展示时需在回复**开头**单独一行纯文字展示, 格式 `#会议号: xxx-xxx-xxx` (每3位用 `-` 分隔) |
|
|
79
|
+
| `meeting_link` | string | 会议链接 |
|
|
80
|
+
| `excess_users` | array | 参会人中包含无效会议账号的 userid, 仅在购买会议专业版企业由于部分参会人无有效会议账号时返回 |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 典型工作流
|
|
85
|
+
|
|
86
|
+
### 工作流 1: 最简创建 (无邀请人)
|
|
87
|
+
|
|
88
|
+
**用户意图**: "帮我约一个明天下午3点的会议, 主题是周例会, 时长1小时"
|
|
89
|
+
|
|
90
|
+
**步骤:**
|
|
91
|
+
|
|
92
|
+
1. **解析用户意图**: 时间 + 主题已有, 邀请人未提及则默认留空, 直接创建.
|
|
93
|
+
2. **调用创建命令**:
|
|
94
|
+
|
|
95
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call meeting create_meeting '{"title": "周例会", "meeting_start_datetime": "2026-03-18 15:00", "meeting_duration": 3600}'`
|
|
96
|
+
|
|
97
|
+
3. **展示结果**:
|
|
98
|
+
|
|
99
|
+
#会议号: <会议号>
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
✅ 会议创建成功!
|
|
103
|
+
|
|
104
|
+
📅 <会议标题>
|
|
105
|
+
🕐 时间: <开始时间>, 时长 <时长>
|
|
106
|
+
🔗 会议链接: <会议链接>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 工作流 2: 带邀请人 + 地点 + 描述
|
|
110
|
+
|
|
111
|
+
**用户意图**: "帮我约一个明天下午3点的会议, 主题是技术方案评审, 邀请张三和李四, 地点在3楼会议室, 时长1小时"
|
|
112
|
+
|
|
113
|
+
**步骤:**
|
|
114
|
+
|
|
115
|
+
1. **解析用户意图**: 有邀请人, 需先查询通讯录获取 userid.
|
|
116
|
+
2. **通讯录查询**: 调用 `wecom-contact-lookup` 技能获取通讯录成员, 按姓名筛选出参与者的 userid.
|
|
117
|
+
|
|
118
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call contact get_userlist '{}'`
|
|
119
|
+
|
|
120
|
+
在返回的 `userlist` 中筛选 `name` 包含 "张三" 和 "李四" 的成员, 获取其 `userid`.
|
|
121
|
+
|
|
122
|
+
3. **信息已充分, 直接调用创建命令** (禁止暴露内部 ID):
|
|
123
|
+
|
|
124
|
+
使用 `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"]}}'`
|
|
125
|
+
|
|
126
|
+
4. **展示结果**:
|
|
127
|
+
|
|
128
|
+
#会议号: <会议号>
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
✅ 会议创建成功!
|
|
132
|
+
|
|
133
|
+
📅 <会议标题>
|
|
134
|
+
🕐 时间: <开始时间>, 时长 <时长>
|
|
135
|
+
👥 参与人: <参与者姓名列表>
|
|
136
|
+
🔗 会议链接: <会议链接>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 复杂场景样例
|
|
142
|
+
|
|
143
|
+
按场景按需加载, 避免一次性引入过多无关示例:
|
|
144
|
+
|
|
145
|
+
| 文件 | 适用场景 |
|
|
146
|
+
| ---- | -------- |
|
|
147
|
+
| [references/example-security.md](references/example-security.md) | 会议密码, 等候室, 外部用户限制 |
|
|
148
|
+
| [references/example-reminder.md](references/example-reminder.md) | 响铃提醒, 指定部分人响铃 |
|
|
149
|
+
| [references/example-full.md](references/example-full.md) | 全参数综合场景 (含静音, 屏幕水印, 等候室等设置) |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 注意事项
|
|
154
|
+
|
|
155
|
+
- **信息追问**: 缺少时间或主题时, 简洁追问用户; 未提及邀请人则默认留空
|
|
156
|
+
- **通讯录查询**: 涉及参与人时, 需先通过 `wecom-contact-lookup` 技能的 `get_userlist` 接口获取全量通讯录成员, 再按姓名/别名本地筛选匹配出对应的 `userid`. 该接口无入参, 返回当前用户可见范围内的成员列表 (含 `userid`, `name`, `alias`)
|
|
157
|
+
- **直接创建**: 时间 + 主题已知即可直接创建, 邀请人有则带上, 无则留空; 无论信息是一次性提供还是上下文可推断, 非必要则均不请求确认, 直接创建即可
|
|
158
|
+
- **时间格式**: 统一使用 `YYYY-MM-DD HH:mm` 格式
|
|
@@ -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` 传入的列表将替换现有成员列表, 需先获取当前成员再合并
|