@mocrane/wecom 2026.3.14 → 2026.3.20
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 +17 -13
- package/index.ts +37 -0
- package/package.json +4 -3
- package/skills/wecom-contact-lookup/SKILL.md +162 -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
- package/src/agent/handler.ts +105 -14
- package/src/mcp/index.ts +7 -0
- package/src/mcp/schema.ts +108 -0
- package/src/mcp/tool.ts +226 -0
- package/src/mcp/transport.ts +561 -0
- package/src/media/const.ts +24 -0
- package/src/media/index.ts +15 -0
- package/src/media/uploader.ts +240 -0
- package/src/monitor.ts +293 -12
- package/src/outbound.ts +116 -46
- package/src/types/index.ts +1 -0
- package/src/types/message.ts +10 -1
- package/src/ws-adapter.ts +4 -0
|
@@ -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` 创建会议并自动添加参与人
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# check_availablity API
|
|
2
|
+
|
|
3
|
+
查询指定用户在某时间范围内的忙碌时段。
|
|
4
|
+
|
|
5
|
+
## 参数说明
|
|
6
|
+
|
|
7
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
8
|
+
|------|------|------|------|
|
|
9
|
+
| `check_user_list` | array | ✅ | 用户 ID 列表,1~10 个 |
|
|
10
|
+
| `start_time` | string | ✅ | 查询开始时间 |
|
|
11
|
+
| `end_time` | string | ✅ | 查询结束时间 |
|
|
12
|
+
|
|
13
|
+
## 请求示例
|
|
14
|
+
|
|
15
|
+
使用 `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"}'`
|
|
16
|
+
|
|
17
|
+
## 返回字段
|
|
18
|
+
|
|
19
|
+
| 字段 | 类型 | 说明 |
|
|
20
|
+
|------|------|------|
|
|
21
|
+
| `errcode` | integer | 返回码,`0` 表示成功 |
|
|
22
|
+
| `errmsg` | string | 错误信息 |
|
|
23
|
+
| `user_busy_list` | array | 用户忙碌时段列表 |
|
|
24
|
+
|
|
25
|
+
### user_busy_list[] 数组中每项字段
|
|
26
|
+
|
|
27
|
+
| 字段 | 类型 | 说明 |
|
|
28
|
+
|------|------|------|
|
|
29
|
+
| `userid` | string | 用户 ID |
|
|
30
|
+
| `busy_slots` | array | 忙碌时段列表 |
|
|
31
|
+
| `busy_slots[].start_time` | string | 忙碌时段开始时间 |
|
|
32
|
+
| `busy_slots[].end_time` | string | 忙碌时段结束时间 |
|
|
33
|
+
| `busy_slots[].schedule_id` | string | 关联的日程 ID |
|
|
34
|
+
| `busy_slots[].subject` | string | 日程标题 |
|
|
35
|
+
|
|
36
|
+
## 响应示例
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"errcode": 0,
|
|
41
|
+
"errmsg": "ok",
|
|
42
|
+
"user_busy_list": [
|
|
43
|
+
{
|
|
44
|
+
"userid": "USER_ID",
|
|
45
|
+
"busy_slots": [
|
|
46
|
+
{
|
|
47
|
+
"start_time": "YYYY-MM-DD HH:MM:SS",
|
|
48
|
+
"end_time": "YYYY-MM-DD HH:MM:SS",
|
|
49
|
+
"schedule_id": "SCHEDULE_ID",
|
|
50
|
+
"subject": "日程标题"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# create_schedule API
|
|
2
|
+
|
|
3
|
+
创建新日程,支持设置标题、时间、地点、参与者、提醒和重复规则。
|
|
4
|
+
|
|
5
|
+
## 参数说明(`schedule` 对象内)
|
|
6
|
+
|
|
7
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
8
|
+
|------|------|------|------|
|
|
9
|
+
| `start_time` | string | ✅ | 开始时间 |
|
|
10
|
+
| `end_time` | string | ✅ | 结束时间 |
|
|
11
|
+
| `summary` | string | ❌ | 日程标题,最长 128 字 |
|
|
12
|
+
| `description` | string | ❌ | 日程描述,最长 1000 字 |
|
|
13
|
+
| `location` | string | ❌ | 地点,最长 128 字 |
|
|
14
|
+
| `is_whole_day` | integer | ❌ | 是否全天:`0`-否(默认),`1`-是 |
|
|
15
|
+
| `attendees` | array | ❌ | 参与者列表,每项含 `userid` |
|
|
16
|
+
| `reminders` | object | ❌ | 提醒与重复设置(见 [reminders 字段参考](ref-reminders.md)) |
|
|
17
|
+
|
|
18
|
+
## 请求示例
|
|
19
|
+
|
|
20
|
+
使用 `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}, "location": "会议地点"}}'`
|
|
21
|
+
|
|
22
|
+
## 返回字段
|
|
23
|
+
|
|
24
|
+
| 字段 | 类型 | 说明 |
|
|
25
|
+
|------|------|------|
|
|
26
|
+
| `errcode` | integer | 返回码,`0` 表示成功 |
|
|
27
|
+
| `errmsg` | string | 错误信息 |
|
|
28
|
+
| `schedule_id` | string | 创建成功的日程 ID |
|
|
29
|
+
|
|
30
|
+
## 响应示例
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"errcode": 0,
|
|
35
|
+
"errmsg": "ok",
|
|
36
|
+
"schedule_id": "SCHEDULE_ID"
|
|
37
|
+
}
|
|
38
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# get_schedule_detail API
|
|
2
|
+
|
|
3
|
+
通过日程 ID 批量获取日程详细信息。
|
|
4
|
+
|
|
5
|
+
## 参数说明
|
|
6
|
+
|
|
7
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
8
|
+
|------|------|------|------|
|
|
9
|
+
| `schedule_id_list` | array | ✅ | 日程 ID 列表,1~50 个 |
|
|
10
|
+
|
|
11
|
+
## 请求示例
|
|
12
|
+
|
|
13
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule get_schedule_detail '{"schedule_id_list": ["SCHEDULE_ID_1", "SCHEDULE_ID_2"]}'`
|
|
14
|
+
|
|
15
|
+
## 返回字段
|
|
16
|
+
|
|
17
|
+
| 字段 | 类型 | 说明 |
|
|
18
|
+
|------|------|------|
|
|
19
|
+
| `errcode` | integer | 返回码,`0` 表示成功 |
|
|
20
|
+
| `errmsg` | string | 错误信息 |
|
|
21
|
+
| `schedule` | array | 日程详情列表 |
|
|
22
|
+
|
|
23
|
+
### schedule[] 字段
|
|
24
|
+
|
|
25
|
+
| 字段 | 类型 | 说明 |
|
|
26
|
+
|------|------|------|
|
|
27
|
+
| `schedule_id` | string | 日程唯一 ID |
|
|
28
|
+
| `summary` | string | 日程标题 |
|
|
29
|
+
| `description` | string | 日程描述 |
|
|
30
|
+
| `start_time` | integer | 开始时间(Unix 时间戳,秒) |
|
|
31
|
+
| `end_time` | integer | 结束时间(Unix 时间戳,秒) |
|
|
32
|
+
| `location` | string | 地点 |
|
|
33
|
+
| `status` | integer | `0`-正常,`1`-已取消 |
|
|
34
|
+
| `is_whole_day` | integer | `0`-否,`1`-是 |
|
|
35
|
+
| `admins` | array | 管理员 userid 列表 |
|
|
36
|
+
| `attendees` | array | 参与者列表 |
|
|
37
|
+
| `attendees[].userid` | string | 参与者 userid |
|
|
38
|
+
| `attendees[].response_status` | integer | 响应状态(见下表) |
|
|
39
|
+
| `reminders` | object | 提醒设置(见 [reminders 字段参考](ref-reminders.md)) |
|
|
40
|
+
|
|
41
|
+
### response_status 枚举
|
|
42
|
+
|
|
43
|
+
| 值 | 含义 |
|
|
44
|
+
|----|------|
|
|
45
|
+
| `1` | 待定 |
|
|
46
|
+
| `2` | 接受 |
|
|
47
|
+
| `3` | 接受单次 |
|
|
48
|
+
| `4` | 拒绝 |
|
|
49
|
+
| `5` | 接受本次及未来 |
|
|
50
|
+
| `6` | 待定单次 |
|
|
51
|
+
| `7` | 待定本次及未来 |
|
|
52
|
+
| `8` | 拒绝单次 |
|
|
53
|
+
| `9` | 拒绝本次及未来 |
|
|
54
|
+
|
|
55
|
+
## 响应示例
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"errcode": 0,
|
|
60
|
+
"errmsg": "ok",
|
|
61
|
+
"schedule": [
|
|
62
|
+
{
|
|
63
|
+
"schedule_id": "SCHEDULE_ID",
|
|
64
|
+
"summary": "日程标题",
|
|
65
|
+
"start_time": 1700000000,
|
|
66
|
+
"end_time": 1700003600,
|
|
67
|
+
"location": "会议室",
|
|
68
|
+
"status": 0,
|
|
69
|
+
"is_whole_day": 0,
|
|
70
|
+
"attendees": [
|
|
71
|
+
{"userid": "USER_ID","tmp_external_userid": "tmp_external_userid_example","response_status": 2}
|
|
72
|
+
],
|
|
73
|
+
"reminders": {
|
|
74
|
+
"is_remind": 1,
|
|
75
|
+
"remind_before_event_secs": 3600,
|
|
76
|
+
"timezone": 8
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# update_schedule API
|
|
2
|
+
|
|
3
|
+
修改已有日程,只需传入需要修改的字段,未传字段保持不变。
|
|
4
|
+
|
|
5
|
+
## 参数说明(`schedule` 对象内)
|
|
6
|
+
|
|
7
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
8
|
+
|------|------|------|------|
|
|
9
|
+
| `schedule_id` | string | ✅ | 目标日程 ID |
|
|
10
|
+
| `start_time` | string | ❌ | 开始时间 |
|
|
11
|
+
| `end_time` | string | ❌ | 结束时间 |
|
|
12
|
+
| `summary` | string | ❌ | 日程标题,最长 128 字 |
|
|
13
|
+
| `description` | string | ❌ | 日程描述,最长 1000 字 |
|
|
14
|
+
| `location` | string | ❌ | 地点,最长 128 字 |
|
|
15
|
+
| `is_whole_day` | integer | ❌ | 是否全天:`0`-否,`1`-是 |
|
|
16
|
+
| `attendees` | array | ❌ | 参与者列表,每项含 `userid` |
|
|
17
|
+
| `reminders` | object | ❌ | 提醒与重复设置(见 [reminders 字段参考](ref-reminders.md)) |
|
|
18
|
+
|
|
19
|
+
> 仅传需修改的字段,其余保持不变。
|
|
20
|
+
|
|
21
|
+
## 请求示例
|
|
22
|
+
|
|
23
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call schedule update_schedule '{"schedule": {"schedule_id": "SCHEDULE_ID", "summary": "更新后的标题", "start_time": "YYYY-MM-DD HH:MM:SS", "end_time": "YYYY-MM-DD HH:MM:SS"}}'`
|
|
24
|
+
|
|
25
|
+
## 返回字段
|
|
26
|
+
|
|
27
|
+
| 字段 | 类型 | 说明 |
|
|
28
|
+
|------|------|------|
|
|
29
|
+
| `errcode` | integer | 返回码,`0` 表示成功 |
|
|
30
|
+
| `errmsg` | string | 错误信息 |
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# reminders 字段参考
|
|
2
|
+
|
|
3
|
+
提醒设置对象,用于 `create_schedule` 和 `update_schedule` 接口。
|
|
4
|
+
|
|
5
|
+
## 字段说明
|
|
6
|
+
|
|
7
|
+
| 字段 | 类型 | 说明 |
|
|
8
|
+
|------|------|------|
|
|
9
|
+
| `is_remind` | integer | 是否提醒:`0`-否,`1`-是 |
|
|
10
|
+
| `remind_before_event_secs` | integer | 提前提醒秒数,可选值:`0`/`300`/`900`/`3600`/`86400` |
|
|
11
|
+
| `remind_time_diffs` | array | 提醒时间差(秒),可选值:`-604800`/`-172800`/`-86400`/`-3600`/`-900`/`-300`/`0`/`32400` |
|
|
12
|
+
| `timezone` | integer | 时区,`-12` ~ `12`,中国为 `8` |
|
|
13
|
+
|
|
14
|
+
## 使用示例
|
|
15
|
+
|
|
16
|
+
### 基本提醒(提前 1 小时)
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"is_remind": 1,
|
|
21
|
+
"remind_before_event_secs": 3600,
|
|
22
|
+
"timezone": 8
|
|
23
|
+
}
|
|
24
|
+
```
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wecom-smartsheet-data
|
|
3
|
+
description: 企业微信智能表格数据(记录)管理技能。提供智能表格记录的增删改查能力。适用场景:(1) 查询子表全部记录 (2) 添加一行或多行记录 (3) 更新已有记录 (4) 删除记录。当用户需要读取表格数据、写入新数据、修改或删除表格行时触发此 Skill。支持通过 docid 或文档 URL 定位文档。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 企业微信智能表格数据管理
|
|
7
|
+
|
|
8
|
+
> `wecom_mcp` 是一个 MCP tool,所有操作通过调用该 tool 完成。
|
|
9
|
+
|
|
10
|
+
> ⚠️ **前置条件**:首次调用 `wecom_mcp` 前,必须按 `wecom-preflight` 技能执行前置条件检查,确保工具已加入白名单。
|
|
11
|
+
|
|
12
|
+
管理智能表格中的记录(行数据)。所有接口支持通过 `docid` 或 `url` 二选一定位文档。
|
|
13
|
+
|
|
14
|
+
## CLI 调用方式
|
|
15
|
+
|
|
16
|
+
通过 `wecom_mcp` tool 调用,品类为 `doc`:
|
|
17
|
+
|
|
18
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call doc <tool_name> '<json_params>'` 调用指定技能
|
|
19
|
+
|
|
20
|
+
## 返回格式说明
|
|
21
|
+
|
|
22
|
+
所有接口返回 JSON 对象,包含以下公共字段:
|
|
23
|
+
|
|
24
|
+
| 字段 | 类型 | 说明 |
|
|
25
|
+
|------|------|------|
|
|
26
|
+
| `errcode` | integer | 返回码,`0` 表示成功,非 `0` 表示失败 |
|
|
27
|
+
| `errmsg` | string | 错误信息,成功时为 `"ok"` |
|
|
28
|
+
|
|
29
|
+
当 `errcode` 不为 `0` 时,说明接口调用失败,可重试 1 次;若仍失败,将 `errcode` 和 `errmsg` 展示给用户。
|
|
30
|
+
|
|
31
|
+
### smartsheet_get_records
|
|
32
|
+
|
|
33
|
+
查询子表全部记录。
|
|
34
|
+
|
|
35
|
+
- 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_records '{"docid": "DOCID", "sheet_id": "SHEETID"}'`
|
|
36
|
+
- 或通过 URL:使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_records '{"url": "https://doc.weixin.qq.com/smartsheet/xxx", "sheet_id": "SHEETID"}'`
|
|
37
|
+
|
|
38
|
+
参见 [API 详情](references/api-get-records.md)。
|
|
39
|
+
|
|
40
|
+
### smartsheet_add_records
|
|
41
|
+
|
|
42
|
+
添加一行或多行记录,单次建议 500 行内。
|
|
43
|
+
|
|
44
|
+
**调用前**必须先了解目标表的字段类型(通过 `smartsheet_get_fields`)。
|
|
45
|
+
|
|
46
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_add_records '{"docid": "DOCID", "sheet_id": "SHEETID", "records": [{"values": {"任务名称": [{"type": "text", "text": "完成需求文档"}], "优先级": [{"text": "高"}]}}]}'`
|
|
47
|
+
|
|
48
|
+
各字段类型的值格式参见 [单元格值格式参考](references/cell-value-formats.md)。
|
|
49
|
+
|
|
50
|
+
### smartsheet_update_records
|
|
51
|
+
|
|
52
|
+
更新一行或多行记录,单次必须在 500 行内。需提供 record_id(通过 `smartsheet_get_records` 获取)。
|
|
53
|
+
|
|
54
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_update_records '{"docid": "DOCID", "sheet_id": "SHEETID", "records": [{"record_id": "RECORDID", "values": {"任务名称": [{"type": "text", "text": "更新后的内容"}]}}]}'`
|
|
55
|
+
|
|
56
|
+
**注意**:创建时间、最后编辑时间、创建人、最后编辑人字段不可更新。
|
|
57
|
+
|
|
58
|
+
### smartsheet_delete_records
|
|
59
|
+
|
|
60
|
+
删除一行或多行记录,单次必须在 500 行内。**操作不可逆**。record_id 通过 `smartsheet_get_records` 获取。
|
|
61
|
+
|
|
62
|
+
使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_delete_records '{"docid": "DOCID", "sheet_id": "SHEETID", "record_ids": ["RECORDID1", "RECORDID2"]}'`
|
|
63
|
+
|
|
64
|
+
## 典型工作流
|
|
65
|
+
|
|
66
|
+
1. **读取数据** → 使用 `wecom_mcp` tool 调用 `wecom_mcp call doc smartsheet_get_records '{"docid":"DOCID","sheet_id":"SHEETID"}'`
|
|
67
|
+
2. **写入数据** → 先 `smartsheet_get_fields` 了解列类型 → 若涉及成员(USER)字段,先通过 `wecom-contact-lookup` 的 `get_userlist` 查找人员 userid → `smartsheet_add_records` 写入
|
|
68
|
+
3. **更新数据** → 先 `smartsheet_get_records` 获取 record_id → 若涉及成员(USER)字段,先通过 `wecom-contact-lookup` 的 `get_userlist` 查找人员 userid → `smartsheet_update_records` 更新
|
|
69
|
+
4. **删除数据** → 先 `smartsheet_get_records` 确认 record_id → `smartsheet_delete_records` 删除
|
|
70
|
+
|
|
71
|
+
> **注意**:成员(USER)类型字段需要填写 `user_id`,不能直接使用姓名。必须先通过 `wecom-contact-lookup` 技能的 `get_userlist` 接口按姓名查找到对应的 `userid` 后再使用。
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# smartsheet_get_records API
|
|
2
|
+
|
|
3
|
+
查询智能表格中指定子表的记录信息。只支持获取全部记录。支持通过 docid 或文档 URL 定位文档,二者传入其一即可。
|
|
4
|
+
|
|
5
|
+
## 技能定义
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"name": "smartsheet_get_records",
|
|
10
|
+
"description": "查询智能表格中指定子表的记录信息。只支持获取全部记录。支持通过 docid 或文档 URL 定位文档,二者传入其一即可。",
|
|
11
|
+
"inputSchema": {
|
|
12
|
+
"properties": {
|
|
13
|
+
"docid": {
|
|
14
|
+
"description": "文档的 docid,与 url 二选一传入",
|
|
15
|
+
"title": "Docid",
|
|
16
|
+
"type": "string"
|
|
17
|
+
},
|
|
18
|
+
"url": {
|
|
19
|
+
"description": "文档的访问链接,与 docid 二选一传入",
|
|
20
|
+
"title": "URL",
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
"sheet_id": {
|
|
24
|
+
"description": "子表的 sheet_id,用于指定要查询的智能表格中的哪个子表",
|
|
25
|
+
"title": "Sheet Id",
|
|
26
|
+
"type": "string"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"oneOf": [
|
|
30
|
+
{ "required": ["docid", "sheet_id"] },
|
|
31
|
+
{ "required": ["url", "sheet_id"] }
|
|
32
|
+
],
|
|
33
|
+
"title": "smartsheet_get_recordsArguments",
|
|
34
|
+
"type": "object"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 参数说明
|
|
40
|
+
|
|
41
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
42
|
+
|---|---|---|---|
|
|
43
|
+
| docid | string | 与 url 二选一 | 文档的 docid |
|
|
44
|
+
| url | string | 与 docid 二选一 | 文档的访问链接 |
|
|
45
|
+
| sheet_id | string | 是 | 子表的 sheet_id,用于指定要查询的智能表格中的哪个子表 |
|
|
46
|
+
|
|
47
|
+
## 请求示例
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"docid": "DOCID",
|
|
52
|
+
"sheet_id": "123Abc"
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"url": "https://doc.weixin.qq.com/smartsheet/xxx",
|
|
59
|
+
"sheet_id": "123Abc"
|
|
60
|
+
}
|
|
61
|
+
```
|