返回 Skills
wecomteam/wecom-cli· MIT 内容可用

wecomcli-schedule

企业微信日程管理技能。适用于用户对企业微信日程的各类管理需求。当用户需要:(1) 查询指定时间范围内的日程列表或获取日程详细信息(标题、时间、地点、参与者等),(2) 创建新日程并设置提醒、参与人等,(3) 修改已有日程的标题、时间、地点等信息或取消日程,(4) 添加或移除日程参与人,(5) 查询多个成员的闲忙状态并分析共同空闲时段以安排会议时使用此技能。

安装

与 skills.sh 相同的 Command / Prompt 安装方式


name: wecomcli-schedule description: 企业微信日程管理技能。适用于用户对企业微信日程的各类管理需求。当用户需要:(1) 查询指定时间范围内的日程列表或获取日程详细信息(标题、时间、地点、参与者等),(2) 创建新日程并设置提醒、参与人等,(3) 修改已有日程的标题、时间、地点等信息或取消日程,(4) 添加或移除日程参与人,(5) 查询多个成员的闲忙状态并分析共同空闲时段以安排会议时使用此技能。 metadata: requires: bins: ["wecom-cli"] cliHelp: "wecom-cli schedule --help"

企业微信日程管理技能

wecom-cli 是企业微信提供的命令行程序,所有操作通过执行 wecom-cli 命令完成。

通过 wecom-cli schedule <接口名> '<json入参>' 与企业微信日程系统交互。

注意事项

  • 日程列表查询仅支持当日前后 30 天,时间格式 YYYY-MM-DDYYYY-MM-DD HH:mm:ss
  • 涉及参与者 userid 时,需先使用 wecomcli-contact 技能获取;存在同名时展示候选让用户选择(禁止暴露 userid)
  • 创建/修改/取消前,先确认目标日程和参与者信息
  • errcode != 0 时展示错误信息;返回的 start_time/end_time 为 Unix 时间戳(秒),需转为可读格式
  • 注意时间格式转换:接口入参使用字符串格式(如 YYYY-MM-DD HH:mm:ss),但返回值多为 Unix 时间戳,使用时需进行格式转换

接口列表

get_schedule_list_by_range — 查询日程 ID 列表

wecom-cli schedule get_schedule_list_by_range '{"start_time": "YYYY-MM-DD HH:mm:ss", "end_time": "YYYY-MM-DD HH:mm:ss"}'

返回 schedule_id_list 数组。仅支持当日前后 30 天。

get_schedule_detail — 获取日程详情

wecom-cli schedule get_schedule_detail '{"schedule_id_list": ["SCHEDULE_ID_1", "SCHEDULE_ID_2"]}'

支持 1~50 个 ID,返回日程标题、时间、地点、参与者等。参见 API 详情

create_schedule — 创建日程

wecom-cli 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}}}'

参见 API 详情 | reminders 字段

update_schedule — 修改日程

只需传入需修改的字段,未传字段保持不变。

wecom-cli schedule update_schedule '{"schedule": {"schedule_id": "SCHEDULE_ID", "summary": "更新后的标题"}}'

参见 API 详情

cancel_schedule — 取消日程

wecom-cli schedule cancel_schedule '{"schedule_id": "SCHEDULE_ID"}'

add_schedule_attendees / del_schedule_attendees — 管理参与人

  • 添加参与人:
wecom-cli schedule add_schedule_attendees '{"schedule_id": "SCHEDULE_ID", "attendees": [{"userid": "USER_ID"}]}'
  • 移除参与人:
wecom-cli schedule del_schedule_attendees '{"schedule_id": "SCHEDULE_ID", "attendees": [{"userid": "USER_ID"}]}'

check_availability — 查询闲忙

wecom-cli schedule check_availability '{"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"}'

支持 1~10 个用户,返回各用户的忙碌时段列表。参见 API 详情


典型工作流

查询日程

经典 query 示例:

  • "我今天有哪些日程?"
  • "帮我看看这周三下午有没有会议"
  • "明天的日程安排是什么?"
  • "查一下最近有没有关于项目评审的日程"
  • "我下周一到周五的日程都有哪些?"

流程:

  1. 根据用户意图计算时间范围(如"今天"→当日 00:00:00 至 23:59:59,"这周"→本周一至周日)
  2. 调用 get_schedule_list_by_range 获取日程 ID 列表
  3. 调用 get_schedule_detail 批量获取详情,将 Unix 时间戳转为可读时间
  4. 若用户提到关键词(如"项目评审"),在 summary 中匹配筛选;未找到则逐步扩大范围至前后 30 天上限
  5. 展示日程列表时包含标题、时间、地点、参与者等关键信息,方便用户快速了解

创建日程

经典 query 示例:

  • "帮我创建一个明天下午 2 点到 3 点的会议,标题叫需求评审"
  • "安排一个周五全天的团建活动"
  • "创建日程:后天上午 10 点和张三、李四开产品方案讨论会,地点在 3 楼会议室"
  • "帮我建个日程,下周一 14:00-15:00,提前 15 分钟提醒"
  • "约一个明天上午的日程,邀请王伟参加"

流程:

  1. 解析用户意图,提取时间、标题、地点、参与人、提醒设置等信息
  2. 若涉及参与人,先通过 wecomcli-contact 查询 userid;存在同名时展示候选让用户选择
  3. 若用户未指定提醒,默认设置提前 15 分钟提醒(remind_before_event_secs: 900
  4. 若用户说"全天",设置 is_whole_day: 1,时间设为当天 00:00:00 至 23:59:59
  5. 向用户确认日程信息(标题、时间、地点、参与人等)后调用 create_schedule

修改日程

经典 query 示例:

  • "把明天的需求评审改到后天下午 3 点"
  • "帮我修改下今天下午的会议标题,改成技术方案评审"
  • "我今天 14 点的日程地点改成线上腾讯会议"
  • "把周五的团建活动推迟一个小时"
  • "帮我给明天的周会加个描述:讨论 Q2 规划"

流程:

  1. 先通过查询工作流定位目标日程(根据用户提到的时间、标题等关键词匹配)
  2. 若匹配到多个日程,展示候选列表让用户确认
  3. 向用户确认要修改的字段和目标值
  4. 调用 update_schedule,只传入需修改的字段

取消日程

经典 query 示例:

  • "取消明天下午的需求评审"
  • "帮我把周五的团建日程删掉"
  • "我不想开今天 15 点的会了,帮我取消"

流程:

  1. 先通过查询工作流定位目标日程
  2. 向用户确认取消的日程信息(标题、时间等),避免误操作
  3. 确认后调用 cancel_schedule

管理参与人

经典 query 示例:

  • "把张三加到明天的需求评审会议里"
  • "帮我把李四从周五的日程里移除"
  • "明天下午的会议再邀请一下王伟和赵敏"
  • "把我后天那个技术分享的参与人里去掉刘强"

流程:

  1. 通过 wecomcli-contact 获取目标人员 userid;存在同名时展示候选让用户选择
  2. 通过查询工作流定位目标日程
  3. 调用 add_schedule_attendeesdel_schedule_attendees 完成添加/移除

查询闲忙并安排会议

经典 query 示例:

  • "帮我看看张三和李四明天下午有没有空"
  • "查一下我和王伟这周的空闲时间,想约个会"
  • "我想跟产品组的小明、小红开个会,看看大家什么时候有空"
  • "找一个明天下午大家都有空的时段,安排一个 1 小时的会议"

流程:

  1. 通过 wecomcli-contact 获取相关人员 userid
  2. 调用 check_availability 查询指定时间范围内各用户的忙碌时段
  3. 分析所有用户的忙碌时段,计算出共同空闲时段并推荐给用户
  4. 用户确认时段后,调用 create_schedule 创建会议并自动添加参与人

附带文件

references/check-availability.md
# check_availability API

查询指定用户在某时间范围内的忙碌时段。

## 参数说明

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `check_user_list` | array | ✅ | 用户 ID 列表,1~10 个 |
| `start_time` | string | ✅ | 查询开始时间 |
| `end_time` | string | ✅ | 查询结束时间 |

## 请求示例

```bash
wecom-cli schedule check_availability '{"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"}'
```

## 返回字段

| 字段 | 类型 | 说明 |
|------|------|------|
| `errcode` | integer | 返回码,`0` 表示成功 |
| `errmsg` | string | 错误信息 |
| `user_busy_list` | array | 用户忙碌时段列表 |

### user_busy_list[] 数组中每项字段

| 字段 | 类型 | 说明 |
|------|------|------|
| `userid` | string | 用户 ID |
| `busy_slots` | array | 忙碌时段列表 |
| `busy_slots[].start_time` | string | 忙碌时段开始时间 |
| `busy_slots[].end_time` | string | 忙碌时段结束时间 |
| `busy_slots[].schedule_id` | string | 关联的日程 ID |
| `busy_slots[].subject` | string | 日程标题 |

## 响应示例

```json
{
    "errcode": 0,
    "errmsg": "ok",
    "user_busy_list": [
        {
            "userid": "USER_ID",
            "busy_slots": [
                {
                    "start_time": "YYYY-MM-DD HH:mm:ss",
                    "end_time": "YYYY-MM-DD HH:mm:ss",
                    "schedule_id": "SCHEDULE_ID",
                    "subject": "日程标题"
                }
            ]
        }
    ]
}
```
references/create-schedule.md
# create_schedule API

创建新日程,支持设置标题、时间、地点、参与者、提醒和重复规则。

## 参数说明(`schedule` 对象内)

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `start_time` | string | ✅ | 开始时间 |
| `end_time` | string | ✅ | 结束时间 |
| `summary` | string | ❌ | 日程标题,最长 128 字 |
| `description` | string | ❌ | 日程描述,最长 1000 字 |
| `location` | string | ❌ | 地点,最长 128 字 |
| `is_whole_day` | integer | ❌ | 是否全天:`0`-否(默认),`1`-是 |
| `attendees` | array | ❌ | 参与者列表,每项含 `userid` |
| `reminders` | object | ❌ | 提醒与重复设置(见 [reminders 字段参考](ref-reminders.md)) |

## 请求示例

```bash
wecom-cli 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": "会议地点"}}'
```

## 返回字段

| 字段 | 类型 | 说明 |
|------|------|------|
| `errcode` | integer | 返回码,`0` 表示成功 |
| `errmsg` | string | 错误信息 |
| `schedule_id` | string | 创建成功的日程 ID |

## 响应示例

```json
{
    "errcode": 0,
    "errmsg": "ok",
    "schedule_id": "SCHEDULE_ID"
}
```
references/get-schedule-detail.md
# get_schedule_detail API

通过日程 ID 批量获取日程详细信息。

## 参数说明

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `schedule_id_list` | array | ✅ | 日程 ID 列表,1~50 个 |

## 请求示例

```bash
wecom-cli schedule get_schedule_detail '{"schedule_id_list": ["SCHEDULE_ID_1", "SCHEDULE_ID_2"]}'
```

## 返回字段

| 字段 | 类型 | 说明 |
|------|------|------|
| `errcode` | integer | 返回码,`0` 表示成功 |
| `errmsg` | string | 错误信息 |
| `schedule` | array | 日程详情列表 |

### schedule[] 字段

| 字段 | 类型 | 说明 |
|------|------|------|
| `schedule_id` | string | 日程唯一 ID |
| `summary` | string | 日程标题 |
| `description` | string | 日程描述 |
| `start_time` | integer | 开始时间(Unix 时间戳,秒) |
| `end_time` | integer | 结束时间(Unix 时间戳,秒) |
| `location` | string | 地点 |
| `status` | integer | `0`-正常,`1`-已取消 |
| `is_whole_day` | integer | `0`-否,`1`-是 |
| `admins` | array | 管理员 userid 列表 |
| `attendees` | array | 参与者列表 |
| `attendees[].userid` | string | 参与者 userid |
| `attendees[].response_status` | integer | 响应状态(见下表) |
| `reminders` | object | 提醒设置(见 [reminders 字段参考](ref-reminders.md)) |

### response_status 枚举

| 值 | 含义 |
|----|------|
| `1` | 待定 |
| `2` | 接受 |
| `3` | 接受单次 |
| `4` | 拒绝 |
| `5` | 接受本次及未来 |
| `6` | 待定单次 |
| `7` | 待定本次及未来 |
| `8` | 拒绝单次 |
| `9` | 拒绝本次及未来 |

## 响应示例

```json
{
    "errcode": 0,
    "errmsg": "ok",
    "schedule": [
        {
            "schedule_id": "SCHEDULE_ID",
            "summary": "日程标题",
            "start_time": 1700000000,
            "end_time": 1700003600,
            "location": "会议室",
            "status": 0,
            "is_whole_day": 0,
            "attendees": [
                {"userid": "USER_ID","tmp_external_userid": "tmp_external_userid_example","response_status": 2}
            ],
            "reminders": {
                "is_remind": 1,
                "remind_before_event_secs": 3600,
                "timezone": 8
            }
        }
    ]
}
```
references/ref-reminders.md
# reminders 字段参考

提醒设置对象,用于 `create_schedule` 和 `update_schedule` 接口。

## 字段说明

| 字段 | 类型 | 说明 |
|------|------|------|
| `is_remind` | integer | 是否提醒:`0`-否,`1`-是 |
| `remind_before_event_secs` | integer | 提前提醒秒数,可选值:`0`/`300`/`900`/`3600`/`86400` |
| `remind_time_diffs` | array | 提醒时间差(秒),可选值:`-604800`/`-172800`/`-86400`/`-3600`/`-900`/`-300`/`0`/`32400` |
| `timezone` | integer | 时区,`-12` ~ `12`,中国为 `8` |

## 使用示例

### 基本提醒(提前 1 小时)

```json
{
    "is_remind": 1,
    "remind_before_event_secs": 3600,
    "timezone": 8
}
```
references/update-schedule.md
# update_schedule API

修改已有日程,只需传入需要修改的字段,未传字段保持不变。

## 参数说明(`schedule` 对象内)

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `schedule_id` | string | ✅ | 目标日程 ID |
| `start_time` | string | ❌ | 开始时间 |
| `end_time` | string | ❌ | 结束时间 |
| `summary` | string | ❌ | 日程标题,最长 128 字 |
| `description` | string | ❌ | 日程描述,最长 1000 字 |
| `location` | string | ❌ | 地点,最长 128 字 |
| `is_whole_day` | integer | ❌ | 是否全天:`0`-否,`1`-是 |
| `attendees` | array | ❌ | 参与者列表,每项含 `userid` |
| `reminders` | object | ❌ | 提醒与重复设置(见 [reminders 字段参考](ref-reminders.md)) |

> 仅传需修改的字段,其余保持不变。

## 请求示例

```bash
wecom-cli 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"}}'
```

## 返回字段

| 字段 | 类型 | 说明 |
|------|------|------|
| `errcode` | integer | 返回码,`0` 表示成功 |
| `errmsg` | string | 错误信息 |