@sunnoy/wecom 2.1.0 → 2.2.1
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 +6 -2
- package/index.js +2 -0
- package/openclaw.plugin.json +3 -0
- package/package.json +5 -3
- package/skills/wecom-contact-lookup/SKILL.md +167 -0
- package/skills/wecom-doc-manager/SKILL.md +106 -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 +254 -0
- package/skills/wecom-get-todo-detail/SKILL.md +148 -0
- package/skills/wecom-get-todo-list/SKILL.md +132 -0
- package/skills/wecom-meeting-create/SKILL.md +163 -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 +141 -0
- package/skills/wecom-meeting-query/SKILL.md +335 -0
- package/skills/wecom-preflight/SKILL.md +103 -0
- package/skills/wecom-schedule/SKILL.md +164 -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 +76 -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 +96 -0
- package/skills/wecom-smartsheet-schema/references/field-types.md +43 -0
- package/wecom/accounts.js +1 -0
- package/wecom/callback-inbound.js +133 -33
- package/wecom/channel-plugin.js +107 -125
- package/wecom/constants.js +83 -3
- package/wecom/mcp-config.js +146 -0
- package/wecom/mcp-tool.js +660 -0
- package/wecom/media-uploader.js +208 -0
- package/wecom/openclaw-compat.js +302 -0
- package/wecom/reqid-store.js +146 -0
- package/wecom/target.js +3 -2
- package/wecom/workspace-template.js +107 -21
- package/wecom/ws-monitor.js +778 -328
- package/image-processor.js +0 -175
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wecom-edit-todo
|
|
3
|
+
description: 企业微信待办事项编辑技能,支持创建、更新、删除待办及变更用户处理进度状态。在用户说"帮我创建一个待办"、"把这个任务分派给张三"、"标记待办完成"、"删掉那个待办"、"帮我建个提醒"、"更新一下待办内容"、"把提醒时间改到下周"、"接受这个待办"、"拒绝这个待办"等需要对待办进行写操作的场景时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 企业微信待办事项编辑技能
|
|
7
|
+
|
|
8
|
+
> `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
|
|
9
|
+
|
|
10
|
+
> ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
|
|
11
|
+
|
|
12
|
+
> ⚠️ **路径与停止规则**:
|
|
13
|
+
> - 如果要读取本 skill,必须直接使用 `<available_skills>` 或 `skillsSnapshot` 中给出的精确绝对路径。
|
|
14
|
+
> - 不要猜测或改写为 `/data/openclaw/skills/wecom-*`、`/workspace/.openclaw/skills/...`、`/root/.openclaw/workspace-*/.openclaw/skills/...`,也不要用 `exec` + `ls/find` 探路。
|
|
15
|
+
> - 若 `wecom_mcp` 返回 `errcode: 846609` 或 `unsupported mcp biz type`,表示当前 bot 未开通该 category,不是路径、白名单或 sandbox 问题;立即停止继续 `read`、`list`、`find`、memory fallback 探索,直接告知用户对应 category 未开通。
|
|
16
|
+
|
|
17
|
+
通过 `wecom_mcp` tool 对企业微信待办事项进行写操作,支持四种操作:创建待办、更新待办、删除待办、变更用户状态。
|
|
18
|
+
|
|
19
|
+
## 行为策略
|
|
20
|
+
|
|
21
|
+
**重试策略**: 遭遇"返回 HTTP 错误"或"HTTP 请求失败"时,主动重试,最多重试三次。
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 操作
|
|
26
|
+
|
|
27
|
+
### 1. 创建待办
|
|
28
|
+
|
|
29
|
+
创建一个新的待办事项,可指定内容、分派人和提醒时间:
|
|
30
|
+
|
|
31
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo create_todo '<json格式的入参>'`
|
|
32
|
+
|
|
33
|
+
**参数说明:**
|
|
34
|
+
|
|
35
|
+
需要遵循 “注意事项”中的格式要求:
|
|
36
|
+
|
|
37
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
38
|
+
|------|------|------|------|
|
|
39
|
+
| `content` | string | ✅ | 待办内容 |
|
|
40
|
+
| `follower_list` | object | ❌ | 分派人列表,格式见注意事项第 7 条 |
|
|
41
|
+
| `remind_time` | string | ❌ | 提醒时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
**调用示例:**
|
|
45
|
+
|
|
46
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo create_todo '{"content": "<待办的内容>", "remind_time": "2025-06-01 09:00:00"}'`
|
|
47
|
+
|
|
48
|
+
**返回格式:**
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"errcode": 0,
|
|
53
|
+
"errmsg": "ok",
|
|
54
|
+
"todo_id": "TODO_ID"
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
### 2. 更新待办
|
|
61
|
+
|
|
62
|
+
修改已有待办事项的内容、分派人、状态或提醒时间:
|
|
63
|
+
|
|
64
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo update_todo '<json格式的入参>'`
|
|
65
|
+
|
|
66
|
+
**参数说明:**
|
|
67
|
+
|
|
68
|
+
需要遵循 “注意事项”中的格式要求:
|
|
69
|
+
|
|
70
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
71
|
+
|------|------|------|------|
|
|
72
|
+
| `todo_id` | string | ✅ | 待办 ID |
|
|
73
|
+
| `content` | string | ❌ | 新的待办内容 |
|
|
74
|
+
| `follower_list` | object | ❌ | 新的分派人列表(全量替换,非追加),格式见注意事项第 7 条。若要新增分派人,需先查出现有分派人,合并后一起提交 |
|
|
75
|
+
| `todo_status` | number | ❌ | 新的待办状态:`0`-已完成,`1`-进行中。删除请使用 `delete_todo` |
|
|
76
|
+
| `remind_time` | string | ❌ | 新的提醒时间 |
|
|
77
|
+
|
|
78
|
+
**调用示例:**
|
|
79
|
+
|
|
80
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo update_todo '{"todo_id": "TODO_ID", "content": "<待办的内容>", "remind_time": "2025-07-01 09:00:00"}'`
|
|
81
|
+
|
|
82
|
+
**返回格式:**
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"errcode": 0,
|
|
87
|
+
"errmsg": "ok"
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### 3. 删除待办
|
|
94
|
+
|
|
95
|
+
删除指定的待办事项:
|
|
96
|
+
|
|
97
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo delete_todo '<json格式的入参>'`
|
|
98
|
+
|
|
99
|
+
**参数说明:**
|
|
100
|
+
|
|
101
|
+
需要遵循 “注意事项”中的格式要求:
|
|
102
|
+
|
|
103
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
104
|
+
|------|------|------|------|
|
|
105
|
+
| `todo_id` | string | ✅ | 待办 ID |
|
|
106
|
+
|
|
107
|
+
**调用示例:**
|
|
108
|
+
|
|
109
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo delete_todo '{"todo_id": "TODO_ID"}'`
|
|
110
|
+
|
|
111
|
+
**返回格式:**
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"errcode": 0,
|
|
116
|
+
"errmsg": "ok"
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> 删除操作不可撤销,执行前应向用户确认。
|
|
121
|
+
> 注意:`delete_todo` 与 `update_todo` 设置 `todo_status=2` 效果相同,优先使用 `delete_todo`。
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### 4. 变更用户待办状态
|
|
126
|
+
|
|
127
|
+
更改当前用户在某个待办中的状态(拒绝/接受/已完成):
|
|
128
|
+
|
|
129
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo change_todo_user_status '<json格式的入参>'`
|
|
130
|
+
|
|
131
|
+
**参数说明:**
|
|
132
|
+
|
|
133
|
+
需要遵循 “注意事项”中的格式要求:
|
|
134
|
+
|
|
135
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
136
|
+
|------|------|------|------|
|
|
137
|
+
| `todo_id` | string | ✅ | 待办 ID |
|
|
138
|
+
| `user_status` | number | ✅ | 用户状态:`0`-拒绝,`1`-接受,`2`-已完成 |
|
|
139
|
+
|
|
140
|
+
**调用示例:**
|
|
141
|
+
|
|
142
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo change_todo_user_status '{"todo_id": "TODO_ID", "user_status": 2}'`
|
|
143
|
+
|
|
144
|
+
**返回格式:**
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"errcode": 0,
|
|
149
|
+
"errmsg": "ok"
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 典型工作流
|
|
156
|
+
|
|
157
|
+
### 创建待办并分派给同事
|
|
158
|
+
|
|
159
|
+
用户问:"帮我创建一个待办,让张三下周一前完成需求文档"
|
|
160
|
+
|
|
161
|
+
1. 第一步:通过 wecom-contact-lookup 技能查询张三的 userid,在返回结果中筛选姓名为"张三"的成员,获取其 userid
|
|
162
|
+
2. 第二步:创建待办并分派,使用 `wecom_mcp` tool 调用 `wecom_mcp call todo create_todo '{"content": "<待办的内容>", "follower_list": {"followers": [{"follower_id": "zhangsan", "follower_status": 1}]}, "remind_time": "2025-03-24 09:00:00"}'`
|
|
163
|
+
|
|
164
|
+
> `follower_id` 必须来自 `wecom-contact-lookup` 技能的 `get_userlist` 接口返回的 `userid`,禁止自行猜测。若搜索结果有多个同名人员,需展示候选列表让用户确认。
|
|
165
|
+
|
|
166
|
+
### 标记待办完成
|
|
167
|
+
|
|
168
|
+
需要区分两种场景:**标记待办本身完成**(改 `todo_status`)和**标记我的参与状态为完成**(改 `user_status`)。
|
|
169
|
+
|
|
170
|
+
#### 场景 A:标记待办本身完成
|
|
171
|
+
|
|
172
|
+
用户问:"把'完成Q2规划文档'这个待办标记为完成" / "关闭这个待办"
|
|
173
|
+
|
|
174
|
+
1. 第一步:通过 wecom-get-todo-list 获取待办列表,找到目标待办的 todo_id。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{}'`
|
|
175
|
+
2. 第二步:通过 wecom-get-todo-detail 获取详情,确认是目标待办。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '{"todo_id_list": ["TODO_ID"]}'`
|
|
176
|
+
3. 第三步:确认后,将待办状态改为已完成。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo update_todo '{"todo_id": "TODO_ID", "todo_status": 0}'`
|
|
177
|
+
|
|
178
|
+
#### 场景 B:标记我的参与状态为完成
|
|
179
|
+
|
|
180
|
+
用户问:"我已经完成了这个待办" / "标记我的部分为完成"
|
|
181
|
+
|
|
182
|
+
1. 第一步:通过 wecom-get-todo-list 获取待办列表,找到目标待办的 todo_id。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{}'`
|
|
183
|
+
2. 第二步:通过 wecom-get-todo-detail 获取详情,确认是目标待办。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '{"todo_id_list": ["TODO_ID"]}'`
|
|
184
|
+
3. 第三步:确认后,变更当前用户的参与状态为已完成。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo change_todo_user_status '{"todo_id": "TODO_ID", "user_status": 2}'`
|
|
185
|
+
|
|
186
|
+
> **如何判断用户意图:** 如果用户说"标记完成"且该待办是自己创建的、没有其他分派人,通常指场景 A(标记待办本身完成)。如果该待办有多个参与人,用户可能只是想标记自己那部分完成(场景 B)。不确定时应向用户确认。
|
|
187
|
+
|
|
188
|
+
> 用户提供的是待办内容描述而非 ID,所以需要先通过 wecom-get-todo-list 和 wecom-get-todo-detail 查找再匹配。匹配到多个相似待办时,列出候选项让用户确认。
|
|
189
|
+
|
|
190
|
+
### 更新待办内容或提醒时间
|
|
191
|
+
|
|
192
|
+
用户问:"把那个需求文档的待办提醒时间改到下周五"
|
|
193
|
+
|
|
194
|
+
1. 第一步:查找目标待办。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{}'`,再使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '{"todo_id_list": ["TODO_ID_1", "TODO_ID_2"]}'`
|
|
195
|
+
2. 第二步:确认目标后更新。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo update_todo '{"todo_id": "TODO_ID", "remind_time": "2025-03-28 09:00:00"}'`
|
|
196
|
+
|
|
197
|
+
### 删除待办
|
|
198
|
+
|
|
199
|
+
用户问:"删掉'代码评审'那个待办"
|
|
200
|
+
|
|
201
|
+
1. 第一步:查找目标待办。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{}'`,再使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '{"todo_id_list": ["TODO_ID"]}'`
|
|
202
|
+
2. 第二步:向用户确认后删除。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo delete_todo '{"todo_id": "TODO_ID"}'`
|
|
203
|
+
|
|
204
|
+
> 删除前必须向用户确认,确认措辞示例:"确认删除待办'代码评审'吗?删除后不可恢复。"
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 注意事项
|
|
209
|
+
|
|
210
|
+
1. **todo_id 来源规则**
|
|
211
|
+
- `todo_id` 必须来自 `wecom-get-todo-list` 返回的结果,禁止自行推测或构造
|
|
212
|
+
- 用户通常提供待办内容描述而非 ID,应先通过 wecom-get-todo-list 查列表再匹配
|
|
213
|
+
- 若匹配到多个相似待办,展示候选列表让用户确认
|
|
214
|
+
|
|
215
|
+
2. **follower_id 来源规则**
|
|
216
|
+
- `follower_id` 即 `userid`,必须通过 `wecom-contact-lookup` 技能的 `get_userlist` 接口获取
|
|
217
|
+
- 禁止根据用户姓名自行猜测 userid
|
|
218
|
+
- 若搜索结果有多个同名人员,展示候选列表让用户选择
|
|
219
|
+
|
|
220
|
+
3. **时间格式**
|
|
221
|
+
- 所有时间参数使用 `YYYY-MM-DD HH:mm:ss` 格式
|
|
222
|
+
- 用户说"明天"、"下周一"等相对时间时,根据当前日期推算具体日期
|
|
223
|
+
|
|
224
|
+
4. **状态值含义**
|
|
225
|
+
- 待办状态(`todo_status`):`0`-已完成,`1`-进行中,`2`-已删除
|
|
226
|
+
- 用户状态(`user_status`):`0`-拒绝,`1`-接受,`2`-已完成
|
|
227
|
+
- 分派人状态(`follower_status`):`0`-拒绝,`1`-接受,`2`-已完成
|
|
228
|
+
|
|
229
|
+
5. **破坏性操作确认**
|
|
230
|
+
- 删除待办(`delete_todo`)前必须向用户确认
|
|
231
|
+
- 变更状态为"拒绝"(`user_status=0`)前建议向用户确认
|
|
232
|
+
|
|
233
|
+
6. **错误处理**
|
|
234
|
+
- 若 `errcode` 不为 `0`,说明接口调用失败,告知用户 `errmsg` 中的错误信息
|
|
235
|
+
|
|
236
|
+
7. **follower_list** 的格式(作为输入参数的时候)
|
|
237
|
+
|
|
238
|
+
```json
|
|
239
|
+
"follower_list": { // 分派人列表
|
|
240
|
+
"followers": [ // 注意里面还有一层是 "followers",它的value才是真正的列表数组
|
|
241
|
+
{
|
|
242
|
+
"follower_id": "FOLLOWER_ID", // 分派人id
|
|
243
|
+
"follower_status": 1 // 分派人状态:0-拒绝, 1-接受, 2-已完成
|
|
244
|
+
}
|
|
245
|
+
]
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
> `follower_id` 即 userid,需要通过 `wecom-contact-lookup` 查询获取,禁止自行猜测或构造。
|
|
249
|
+
|
|
250
|
+
## 相关技能
|
|
251
|
+
|
|
252
|
+
- **获取待办列表**:`wecom-get-todo-list` — 查询待办概要列表,获取 todo_id
|
|
253
|
+
- **获取待办详情**:`wecom-get-todo-detail` — 根据 todo_id 获取完整内容
|
|
254
|
+
- **通讯录查询**:`wecom-contact-lookup` 的 `get_userlist` — 获取成员 userid,用于 `follower_id`
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wecom-get-todo-detail
|
|
3
|
+
description: 企业微信待办详情批量查询技能,根据待办 ID 列表获取完整信息(包含待办内容和分派人)。在用户说"看看这个待办的详情"、"待办内容是什么"、"这个待办分派给谁了"、"告诉我待办的具体信息"等需要查看待办完整内容的场景时使用。通常配合 wecom-get-todo-list 使用——先获取待办 ID 列表,再用本技能获取详情。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 企业微信待办详情查询技能
|
|
7
|
+
|
|
8
|
+
> `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
|
|
9
|
+
|
|
10
|
+
> ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
|
|
11
|
+
|
|
12
|
+
> ⚠️ **路径与停止规则**:
|
|
13
|
+
> - 如果要读取本 skill,必须直接使用 `<available_skills>` 或 `skillsSnapshot` 中给出的精确绝对路径。
|
|
14
|
+
> - 不要猜测或改写为 `/data/openclaw/skills/wecom-*`、`/workspace/.openclaw/skills/...`、`/root/.openclaw/workspace-*/.openclaw/skills/...`,也不要用 `exec` + `ls/find` 探路。
|
|
15
|
+
> - 若 `wecom_mcp` 返回 `errcode: 846609` 或 `unsupported mcp biz type`,表示当前 bot 未开通该 category,不是路径、白名单或 sandbox 问题;立即停止继续 `read`、`list`、`find`、memory fallback 探索,直接告知用户对应 category 未开通。
|
|
16
|
+
|
|
17
|
+
通过 `wecom_mcp` tool 根据待办 ID 列表批量查询完整详情,包含待办内容和分派人信息。
|
|
18
|
+
|
|
19
|
+
## 行为策略
|
|
20
|
+
|
|
21
|
+
**人员 ID 转姓名(关键步骤)**: 返回结果中的 `follower_id` 和 `creator_id` 都是系统内部 ID,直接展示给用户毫无意义——用户不认识这些 ID,只认识姓名。因此在向用户展示待办详情之前,必须先调用 `wecom-contact-lookup` 技能获取通讯录,将所有 `follower_id` 和 `creator_id` 匹配为真实姓名。具体做法:
|
|
22
|
+
|
|
23
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call contact get_userlist '{}'` 获取通讯录,在返回的 userlist 中,用 userid 字段匹配 follower_id / creator_id,取对应的 name。
|
|
24
|
+
|
|
25
|
+
如果通讯录中找不到某个 ID,展示时标注"未知用户(ID: xxx)"即可。
|
|
26
|
+
|
|
27
|
+
**重试策略**: 遭遇"返回 HTTP 错误"或"HTTP 请求失败"时,主动重试,最多重试三次。
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 调用方式
|
|
32
|
+
|
|
33
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '<json格式的入参>'`
|
|
34
|
+
|
|
35
|
+
## 参数说明
|
|
36
|
+
|
|
37
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
38
|
+
|------|------|------|------|
|
|
39
|
+
| `todo_id_list` | array | ✅ | 待办 ID 列表,最多 20 个 |
|
|
40
|
+
|
|
41
|
+
**调用示例:**
|
|
42
|
+
|
|
43
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '{"todo_id_list": ["TODO_ID_1", "TODO_ID_2"]}'`
|
|
44
|
+
|
|
45
|
+
## 返回格式
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"errcode": 0,
|
|
50
|
+
"errmsg": "ok",
|
|
51
|
+
"data_list": [
|
|
52
|
+
{
|
|
53
|
+
"todo_id": "TODO_ID",
|
|
54
|
+
"todo_status": 1,
|
|
55
|
+
"content": "完成Q2规划文档",
|
|
56
|
+
"follower_list": {
|
|
57
|
+
"followers": [
|
|
58
|
+
{
|
|
59
|
+
"follower_id": "FOLLOWER_ID",
|
|
60
|
+
"follower_status": 1,
|
|
61
|
+
"update_time": "2025-01-16 14:20:00"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
"creator_id": "CREATOR_ID",
|
|
66
|
+
"user_status": 1,
|
|
67
|
+
"remind_time": "2025-06-01 09:00:00",
|
|
68
|
+
"create_time": "2025-01-15 10:30:00",
|
|
69
|
+
"update_time": "2025-01-16 14:20:00"
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 返回字段说明
|
|
76
|
+
|
|
77
|
+
| 字段 | 类型 | 说明 |
|
|
78
|
+
|------|------|------|
|
|
79
|
+
| `data_list` | array | 待办详情列表,最多 20 条 |
|
|
80
|
+
| `data_list[].todo_id` | string | 待办 ID |
|
|
81
|
+
| `data_list[].todo_status` | number | 待办状态:`0`-已完成,`1`-进行中,`2`-已删除 |
|
|
82
|
+
| `data_list[].content` | string | 待办内容 |
|
|
83
|
+
| `data_list[].follower_list.followers` | array | 分派人列表 |
|
|
84
|
+
| `data_list[].follower_list.followers[].follower_id` | string | 分派人 ID(即 userid)— **展示前需通过 wecom-contact-lookup 转为姓名** |
|
|
85
|
+
| `data_list[].follower_list.followers[].follower_status` | number | 分派人状态:`0`-拒绝,`1`-接受,`2`-已完成 |
|
|
86
|
+
| `data_list[].follower_list.followers[].update_time` | string | 分派人状态更新时间 |
|
|
87
|
+
| `data_list[].creator_id` | string | 创建人 ID — **展示前需通过 wecom-contact-lookup 转为姓名** |
|
|
88
|
+
| `data_list[].user_status` | number | 当前用户状态 |
|
|
89
|
+
| `data_list[].remind_time` | string | 提醒时间 |
|
|
90
|
+
| `data_list[].create_time` | string | 创建时间 |
|
|
91
|
+
| `data_list[].update_time` | string | 更新时间 |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 典型工作流
|
|
96
|
+
|
|
97
|
+
### 列表 + 详情联合查询(三步缺一不可)
|
|
98
|
+
|
|
99
|
+
用户问:"看看我最近的待办" / "我有哪些待办事项?"
|
|
100
|
+
|
|
101
|
+
1. 第一步:通过 wecom-get-todo-list 获取待办列表。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{}'`
|
|
102
|
+
2. 第二步:根据返回的 todo_id 批量获取详情。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_detail '{"todo_id_list": ["TODO_ID_1", "TODO_ID_2", "TODO_ID_3"]}'`
|
|
103
|
+
3. 第三步(不要跳过!):通过 wecom-contact-lookup 获取通讯录,将 follower_id / creator_id 转为姓名。用返回的 userlist 中的 userid 匹配 follower_id 和 creator_id,取 name 字段作为展示姓名
|
|
104
|
+
|
|
105
|
+
> 第三步是展示可读结果的前提。没有这一步,用户看到的是一串无意义的 ID 而非姓名。
|
|
106
|
+
|
|
107
|
+
**展示格式(注意:分派人和创建人必须显示为姓名,不是 ID):**
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
📋 您当前的待办事项(共 3 项)
|
|
111
|
+
|
|
112
|
+
1. 🔵 完成Q2规划文档
|
|
113
|
+
- 待办状态:进行中 | 我的状态:已接受
|
|
114
|
+
- 提醒时间:2025-06-01 09:00
|
|
115
|
+
- 分派人:张三、李四
|
|
116
|
+
- 创建时间:2025-01-15
|
|
117
|
+
|
|
118
|
+
2. 🔵 提交周报
|
|
119
|
+
- 待办状态:进行中 | 我的状态:已接受
|
|
120
|
+
- 提醒时间:2025-03-17 18:00
|
|
121
|
+
- 创建时间:2025-03-10
|
|
122
|
+
|
|
123
|
+
3. ☑️ 代码评审
|
|
124
|
+
- 待办状态:已完成 | 我的状态:已完成
|
|
125
|
+
- 创建时间:2025-03-01
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 注意事项
|
|
131
|
+
|
|
132
|
+
1. **人员 ID 必须转姓名**
|
|
133
|
+
- 返回结果中的 `follower_id` 和 `creator_id` 是系统内部标识,用户无法识别
|
|
134
|
+
- 展示待办详情前,先使用 `wecom_mcp` tool 调用 `wecom_mcp call contact get_userlist '{}'` 获取通讯录
|
|
135
|
+
- 用通讯录的 `userid` 匹配 `follower_id` / `creator_id`,用 `name` 替换展示
|
|
136
|
+
|
|
137
|
+
2. **todo_id 来源规则**
|
|
138
|
+
- `todo_id` 必须来自 `wecom-get-todo-list` 返回的结果,禁止自行推测或构造
|
|
139
|
+
- 用户通常提供待办内容描述而非 ID,应先通过 `wecom-get-todo-list` 查列表再匹配
|
|
140
|
+
|
|
141
|
+
3. **状态值含义**
|
|
142
|
+
- 待办状态(`todo_status`):`0`-已完成,`1`-进行中,`2`-已删除
|
|
143
|
+
- 用户状态(`user_status`):`0`-拒绝,`1`-接受,`2`-已完成
|
|
144
|
+
- 分派人状态(`follower_status`):`0`-拒绝,`1`-接受,`2`-已完成
|
|
145
|
+
|
|
146
|
+
4. **错误处理**:若 `errcode` 不为 `0`,告知用户 `errmsg` 中的错误信息
|
|
147
|
+
|
|
148
|
+
5. **单次上限**:`todo_id_list` 最多传 20 个 ID,超过需要分批请求
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
> ⚠️ **路径与停止规则**:
|
|
13
|
+
> - 如果要读取本 skill,必须直接使用 `<available_skills>` 或 `skillsSnapshot` 中给出的精确绝对路径。
|
|
14
|
+
> - 不要猜测或改写为 `/data/openclaw/skills/wecom-*`、`/workspace/.openclaw/skills/...`、`/root/.openclaw/workspace-*/.openclaw/skills/...`,也不要用 `exec` + `ls/find` 探路。
|
|
15
|
+
> - 若 `wecom_mcp` 返回 `errcode: 846609` 或 `unsupported mcp biz type`,表示当前 bot 未开通该 category,不是路径、白名单或 sandbox 问题;立即停止继续 `read`、`list`、`find`、memory fallback 探索,直接告知用户对应 category 未开通。
|
|
16
|
+
|
|
17
|
+
通过 `wecom_mcp` tool 查询企业微信待办列表,支持按时间过滤和分页。
|
|
18
|
+
|
|
19
|
+
## 行为策略
|
|
20
|
+
|
|
21
|
+
**查完列表必须查详情**: 本接口只返回待办 ID 和状态等概要信息,不包含待办的实际内容和分派人。对用户来说,没有内容的待办列表毫无用处——他们想知道的是"要做什么",而不是一串 ID。因此,每次调用 get_todo_list 拿到结果后,都要紧接着用返回的 todo_id 列表调用 `wecom-get-todo-detail` 获取完整详情(内容、分派人等),然后再向用户展示。这不是可选步骤,而是完成用户请求的必要环节。
|
|
22
|
+
|
|
23
|
+
**分页未拉完时必须提醒用户**: 接口是分页的,不要求一次性拉完所有数据。但如果响应中 `has_more` 为 `true`,说明后面还有待办没有返回——这时你在展示当前结果的同时,必须明确告诉用户"还有更多待办未显示,是否需要继续查看?"。用户可能不知道后面还有数据,如果你不说,他们会以为看到的就是全部,这会导致遗漏重要待办。这是一个容易被忽略但后果严重的点,请务必执行。
|
|
24
|
+
|
|
25
|
+
**重试策略**: 遭遇"返回 HTTP 错误"或"HTTP 请求失败"时,主动重试,最多重试三次。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 调用方式
|
|
30
|
+
|
|
31
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '<json格式的入参>'`
|
|
32
|
+
|
|
33
|
+
## 参数说明
|
|
34
|
+
|
|
35
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
36
|
+
|------|------|------|------|
|
|
37
|
+
| `create_begin_time` | string | ❌ | 创建开始时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
38
|
+
| `create_end_time` | string | ❌ | 创建结束时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
39
|
+
| `remind_begin_time` | string | ❌ | 提醒开始时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
40
|
+
| `remind_end_time` | string | ❌ | 提醒结束时间,格式:`YYYY-MM-DD HH:mm:ss` |
|
|
41
|
+
| `limit` | number | ❌ | 最大返回数量,默认 10,最大 20 |
|
|
42
|
+
| `cursor` | string | ❌ | 分页游标,首次请求不传,后续传入上次响应的 `next_cursor` |
|
|
43
|
+
|
|
44
|
+
## 返回格式
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"errcode": 0,
|
|
49
|
+
"errmsg": "ok",
|
|
50
|
+
"index_list": [
|
|
51
|
+
{
|
|
52
|
+
"todo_id": "TODO_ID",
|
|
53
|
+
"todo_status": 1,
|
|
54
|
+
"user_status": 1,
|
|
55
|
+
"creator_id": "CREATOR_ID",
|
|
56
|
+
"remind_time": "2025-06-01 09:00:00",
|
|
57
|
+
"create_time": "2025-01-15 10:30:00",
|
|
58
|
+
"update_time": "2025-01-16 14:20:00"
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"next_cursor": "NEXT_CURSOR",
|
|
62
|
+
"has_more": false
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 返回字段说明
|
|
67
|
+
|
|
68
|
+
| 字段 | 类型 | 说明 |
|
|
69
|
+
|------|------|------|
|
|
70
|
+
| `index_list` | array | 待办列表 |
|
|
71
|
+
| `index_list[].todo_id` | string | 待办唯一 ID |
|
|
72
|
+
| `index_list[].todo_status` | number | 待办状态:`0`-已完成,`1`-进行中,`2`-已删除 |
|
|
73
|
+
| `index_list[].user_status` | number | 用户状态:`0`-拒绝,`1`-接受,`2`-已完成 |
|
|
74
|
+
| `index_list[].creator_id` | string | 创建人 ID |
|
|
75
|
+
| `index_list[].remind_time` | string | 提醒时间 |
|
|
76
|
+
| `index_list[].create_time` | string | 创建时间 |
|
|
77
|
+
| `index_list[].update_time` | string | 更新时间 |
|
|
78
|
+
| `next_cursor` | string | 下一页游标 |
|
|
79
|
+
| `has_more` | boolean | 是否还有更多记录 |
|
|
80
|
+
|
|
81
|
+
> 列表返回的是待办概要信息(不含内容和分派人)。拿到列表后,必须调用 `wecom-get-todo-detail` 获取完整详情再展示给用户。
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 典型工作流
|
|
86
|
+
|
|
87
|
+
### 查看待办列表(标准两步流程)
|
|
88
|
+
|
|
89
|
+
用户问:"看看我最近的待办" / "我有哪些待办事项?" / "我还有多少事要做?"
|
|
90
|
+
|
|
91
|
+
1. 第一步:获取待办列表(只有 ID 和状态,没有内容)。使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{}'`
|
|
92
|
+
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"]}'`
|
|
93
|
+
|
|
94
|
+
两步缺一不可——只有拿到详情后,才能向用户展示有意义的待办内容。
|
|
95
|
+
|
|
96
|
+
3. 第三步(条件执行):检查第一步返回的 `has_more` 字段。如果为 `true`,在展示结果时必须提醒用户:"以上是部分待办,还有更多待办未显示,需要我继续查看吗?"——不提醒的话,用户会以为这就是全部。
|
|
97
|
+
|
|
98
|
+
### 按时间范围查询
|
|
99
|
+
|
|
100
|
+
用户问:"这个月创建的待办有哪些?"
|
|
101
|
+
|
|
102
|
+
使用 `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"}'`
|
|
103
|
+
|
|
104
|
+
### 分页获取大量待办
|
|
105
|
+
|
|
106
|
+
当待办数量超过单页上限时,通过 `cursor` 循环分页拉取:
|
|
107
|
+
|
|
108
|
+
- 首次请求(不传 cursor):使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{"limit": 20}'`,如果没有拉取完,还有更多的待办,会返回 has_more=true, next_cursor="CURSOR_1"
|
|
109
|
+
- 第二次请求(传入上次的 next_cursor):使用 `wecom_mcp` tool 调用 `wecom_mcp call todo get_todo_list '{"limit": 20, "cursor": "CURSOR_1"}'`,返回 has_more=false,拉取完毕
|
|
110
|
+
|
|
111
|
+
**分页规则:**
|
|
112
|
+
- 首次请求不传 `cursor`
|
|
113
|
+
- `has_more` 为 `true` 时,将 `next_cursor` 作为下次请求的 `cursor` 传入
|
|
114
|
+
- `has_more` 为 `false` 时停止请求
|
|
115
|
+
- 分页过程中时间过滤参数保持不变
|
|
116
|
+
- **如果选择不继续翻页(比如当前页数据已经够用),必须告诉用户还有更多待办未显示,问用户是否需要继续查看**
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 注意事项
|
|
121
|
+
|
|
122
|
+
1. **时间格式**:所有时间参数使用 `YYYY-MM-DD HH:mm:ss` 格式,用户说"明天"、"下周一"等相对时间时,根据当前日期推算具体日期
|
|
123
|
+
|
|
124
|
+
2. **状态值含义**
|
|
125
|
+
- 待办状态(`todo_status`):`0`-已完成,`1`-进行中,`2`-已删除
|
|
126
|
+
- 用户状态(`user_status`):`0`-拒绝,`1`-接受,`2`-已完成
|
|
127
|
+
|
|
128
|
+
3. **错误处理**:若 `errcode` 不为 `0`,告知用户 `errmsg` 中的错误信息
|
|
129
|
+
|
|
130
|
+
4. **必须查详情**:本接口返回的是概要信息(不含内容和分派人),拿到列表后必须紧接着调用 `wecom-get-todo-detail` 获取完整内容再展示给用户,不要只展示列表概要
|
|
131
|
+
|
|
132
|
+
5. **分页未拉完必须提醒**:如果返回的 `has_more` 为 `true`,在向用户展示结果时必须明确说明"还有更多待办未显示"并询问用户是否需要继续查看。用户不知道后面还有数据,不提醒会导致遗漏
|