# Book Meeting Room

> 抢订黄龙国际中心E座会议室(campusId=202429)。当用户需要在黄龙国际中心E座预订/抢订会议室、或定时任务触发"调用 book-meeting-room"时使用。包含查询空闲、优先房间匹配、最大并发预订、失败重试、钉钉通知全流程。用户指令需携带会议日期与起止时间。

- Skill: `mihaideyu/book-meeting-room` (Agent Skill)
- Install (CLI): `npx skillmds@latest add mihaideyu/book-meeting-room`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mihaideyu/book-meeting-room/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: mihaideyu (https://skillmd.com/u/mihaideyu)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/mihaideyu/book-meeting-room

---


# 抢订会议室 Skill

适用园区: 黄龙国际中心E座(`campusId=202429`)。会议时间由用户指令(或定时任务 prompt 顶部)提供。

## 输入参数

用户指令(或定时任务 prompt)需明确给出:

| 参数 | 必填 | 说明 |
|------|------|------|
| `DATE` | 是 | 会议日期,格式 `YYYY-MM-DD`,如 `2026-07-22` |
| `START_TIME` | 是 | 开始时间,格式 `YYYY-MM-DD HH:mm:ss`,分钟必须为 `:00` 或 `:30` |
| `END_TIME` | 是 | 结束时间,同上;持续 >2 小时则必须填 `applyTopic` |

## 默认参数(可被指令覆盖)

- `campusId`: `202429`(黄龙国际中心E座)
- `capacityOptions`: `[12]`(5-8 人,实际容量 ≥6 人)
- `applyTopic`: `定期团队会议`
- 通知工号: `077858`

## 优先房间(优先级从高到低)

`5001`、`5013`、`4005`、`4006`、`6001`、`6013`

匹配规则: `roomName` 字符串包含对应房间号。

## 优先楼层(优先房间没抢到时使用)

`5层` > `6层` > `4层` > `6层以上` > 其他

## MCP 工具映射

直接使用以下 MCP 工具(无需 atc CLI):

| 操作 | MCP 工具名 |
|------|-----------|
| 查询空闲会议室 | `mcp__mcp_ant_rpc_dcanttouch_adminservice__queryIdleMeetingRooms` |
| 预订会议室 | `mcp__mcp_ant_rpc_dcanttouch_adminservice__reserveMeetingRoom` |
| 发钉钉通知 | `mcp__skyway-connector-dingtalk__run` |

## 执行策略(必须严格遵守)

### 第一步: 查询空闲会议室

调用 `mcp__mcp_ant_rpc_dcanttouch_adminservice__queryIdleMeetingRooms`:

```
参数:
  campusId: 202429
  campus: "黄龙国际中心E座"
  applyDate: "<DATE>"
  startTime: "<START_TIME>"
  endTime: "<END_TIME>"
  capacityOptions: [12]
```

**返回结果分两类**:
1. **空闲可预订**: 部分会议室立即可预订,进入第二步。
2. **不可预订但已开放预订时间**: 部分会议室返回了"开放预订时间"字段(如 `openTime` / `releaseTime`,字段名以实际返回为准)。记录这些房间与其开放时刻,进入"等待轮询"分支:
   - 当前时刻距开放时刻 > 60 秒: 每 60 秒轮询一次。
   - 当前时刻距开放时刻 ≤ 60 秒: **提高频率至每 5 秒轮询一次**,在开放瞬间抢占。
   - 先尝试抢空闲的优先房间,同时按上述频率轮询,在开放时刻到时重新执行第一步。

### 第二步: 匹配优先房间

从空闲可预订结果中,按优先级顺序 `5001 → 5013 → 4005 → 4006 → 6001 → 6013` 匹配 `roomName` 包含对应房间号的会议室。收集所有匹配到的房间的 `roomId`。

### 第三步: 并发预订(关键!)

**必须以最大并发同时发起预订**: 在同一条消息中并行调用多个 MCP 工具,每个调用预订一个匹配到的优先房间。**严禁串行**!

使用工具: `mcp__mcp_ant_rpc_dcanttouch_adminservice__reserveMeetingRoom`

```
参数:
  roomId: <roomId>
  startTime: "<START_TIME>"
  endTime: "<END_TIME>"
  applyTopic: "定期团队会议"
```

任一调用返回预订成功,立即停止其他并发调用,**该房间预订成功,跳到第六步**。

### 第四步: 优先房间都失败则抢优先楼层

如果所有优先房间都不可用或预订失败,从查询结果中按楼层优先级(5>6>4>6+>其他)选任意 ≥6 人容量的空闲会议室,**同样并发预订多个**(每层选 1-2 个候选,一并并发调用)。

### 第五步: 持续重试

预订全部失败时进入重试循环:
- 至少重试 **5 轮**,每轮重新执行第一步(避免用旧数据)。
- 重试间隔回退: 第 1-2 轮立即重试,第 3-5 轮间 60 秒。
- 重试到 `START_TIME` 仍失败,放弃并跳到第六步报失败。

### 第六步: 汇报结果

无论成功或失败,通过钉钉向工号 `077858` 发送卡片通知。

**成功通知**:
```
✅ 会议室抢订成功
房间: <roomName> (<floor>F)
时间: <DATE> <START_TIME> ~ <END_TIME>
主题: 定期团队会议
```

**失败通知**:
```
❌ 会议室抢订失败
时间: <DATE> <START_TIME> ~ <END_TIME>
原因: <失败原因摘要>
重试轮数: <N>
```

发送方式(通过 `mcp__skyway-connector-dingtalk__run`):

```
args: ["message","send-card","--user-id","077858"]
cardParam: { "markdown": "<上面的通知文案>" }
```

## 硬规则

1. **直接调用 MCP 工具**: 不再使用 `atc tool call CLI`,直接用注入的 MCP 工具(如 `mcp__mcp_ant_rpc_dcanttouch_adminservice__queryIdleMeetingRooms`)。
2. **必须并行**: 优先房间预订、优先楼层预订都要在一条消息中并行发起多个 MCP 工具调用。
3. **每次重试前重新查询**: 不要用旧数据重复预订同一房间,会被认定重复预订。
4. **3 小时以上会议必须填 `applyTopic`**: 默认主题已设为"定期团队会议",一般无需改。
