{"skill":{"slug":"lark-meeting","displayName":"lark-meeting","summary":"帮助用户预约会议室, 当用户需要预约会议室时执行此技能","description":"---\nname: lark-meeting\ndescription: 帮助用户预约会议室, 当用户需要预约会议室时执行此技能\n---\n\n# 预约会议室\n\n通过本仓库脚本调用飞书会议室与日历能力完成**初始化**（层级 + 会议室列表）与**按忙闲自动预约**。依赖本机已配置且已登录的 `lark-cli` 及相应 API 权限。\n\n## 仓库内配置文件（`conf/`）\n\n| 文件 | 作用 |\n|------|------|\n| `meeting.json` | 城市/大厦/楼层与 `rooms` 顺序；预约脚本默认读取 |\n| `meeting_room_blacklist.json` | **会议室黑名单**（初始化写列表、预约时再次过滤），可直接编辑；技能更新黑名单即改此文件 |\n\n### `meeting_room_blacklist.json` 字段\n\n与 `meeting.json` **同目录**（默认均为 `conf/`）。若文件不存在，脚本使用内置默认（等价于仓库内示例）。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `name_substrings` | 字符串数组 | 会议室**名称**包含其中**任一字串**则排除；设为 `[]` 可关闭名称规则 |\n| `exclude_if_capacity_gt` | 整数或 `null` | 飞书返回的 `capacity` **大于**该值则排除；设为 `null` 可关闭人数规则（**预约阶段**配置里的 `rooms` 通常无 `capacity`，此项主要在**重新初始化**拉取会议室时生效） |\n| `room_ids` | 字符串数组 | 显式按 `room_id` 排除 |\n\n**维护方式：**用户说「不要某会议室 / 排除面试间 / 拉黑某 room_id」时，由 **AI 编辑** `conf/meeting_room_blacklist.json`（保持合法 JSON）。  \n- 改 **名称 / room_id** 规则后，**无需重跑初始化**即可影响下次预约（预约脚本会读黑名单）。  \n- 改 **容量**规则或希望 **从飞书重新拉全量列表** 时，在用户确认后**再执行一次** `meeting_init_processor.py`（同城市/大厦/楼层），以刷新 `meeting.json` 中的 `rooms`。\n\n**权限提示：**若无法写入 `conf/`，可提示用户在终端授权，例如：`sudo chown -R $(whoami):staff <技能仓库>/conf/`（路径按实际技能目录替换）。\n\n## 入口命令（在仓库根目录执行）\n\n| 能力 | 命令 | 说明 |\n|------|------|------|\n| 初始化 | `python scripts/meeting_init_processor.py` | **交互**：按提示选城市 → 职场（大厦）→ 楼层。**非交互**：同时传 `--city`、`--workplace` 或 `--building`、`--floor`；写入 `meeting.json`，并按黑名单过滤 `rooms` |\n| 预约 | `python scripts/meeting_processor.py --start-time <ISO> --end-time <ISO> --summary \"<主题>\"` | 按 `rooms` 顺序查忙闲；应用同目录黑名单后取首个空闲并创建日程 |\n\n**初始化脚本参数：**`--top-n`、`--page-size`；非交互三项见上。**预约脚本参数：**`--description`、`--config`（默认 `conf/meeting.json`）、`--calendar-id`（默认 `primary`）。\n\n**首次使用：**若未配置 `lark-cli`，先按 `lark-shared` 完成 `lark-cli config init` 与 `lark-cli auth login`。\n\n## AI 工作方式\n\n### 初始化\n\n- **优先非交互**：用户已给出城市、大厦、楼层且名称不易歧义时，确认后执行：  \n  `python scripts/meeting_init_processor.py --city \"…\" --building \"…\" --floor \"…\"`  \n  匹配失败时脚本会打印参考列表（Top 10 等），再据报错收窄名称。\n- **缺信息或易歧义**：请用户补全或自行交互运行初始化脚本。\n- 成功后**可简述** `meeting.json` 关键信息（城市/楼层/会议室数量），并提醒可开始预约。\n\n### 预约\n\n- **时间：**默认东八区 `+08:00` 解析自然语言为 ISO（**精确到秒**），缺时长/结束须追问。\n- **执行前**向用户一句话确认起止时间与主题。\n- **约束：**单次时长 ≤ 4 小时；`meeting.json` 不存在时引导先初始化。\n\n### 黑名单\n\n- 按用户口述增删规则时，**直接改** `conf/meeting_room_blacklist.json`（与当前使用的 `meeting.json` 同目录；若用户自定义 `--config`，则黑名单为**该文件同目录**下的 `meeting_room_blacklist.json`）。\n- 改完后预约立即生效；若用户依赖「容量」过滤或要重拉会议室列表，说明需**再跑一次初始化**。\n\n## 示例话术\n\n- 「用北京某某大厦 17 楼初始化」→ 确认无歧义后执行带 `--city` / `--building` / `--floor` 的非交互命令。\n- 「明天下午 3 点会议室开周会」→ 解析 ISO + `--summary`，缺时长先问。\n- 「别给我订面试间」→ 确认 `name_substrings` 含 `面试间`（默认已有）；若无则写入并说明已生效。\n\n## 脚本说明\n\n- `scripts/meeting_room_blacklist.py`：加载/解析黑名单规则（初始化与预约共用）。\n- `scripts/meeting_init_processor.py`：写 `meeting.json`；黑名单路径固定为仓库内 `conf/meeting_room_blacklist.json`。\n- `scripts/meeting_processor.py`：读 `meeting.json`；黑名单为 `config` 文件同目录的 `meeting_room_blacklist.json`。\n- `scripts/lark_cli.py`：API 封装。\n\n## 限制\n\n- 依赖 `lark-cli` 可用及会议室/日历权限。\n- 层级名称可能重名，非交互匹配失败时需用户改用更精确名称或交互初始化。\n","tags":{"latest":"1.0.1"},"stats":{"comments":0,"downloads":408,"installsAllTime":0,"installsCurrent":0,"stars":1,"versions":2},"createdAt":1775362843070,"updatedAt":1778492415940},"latestVersion":{"version":"1.0.1","createdAt":1775364614253,"changelog":"- 新增配置文件：增加了 conf/meeting_room_blacklist.json，用于管理会议室黑名单规则。\n- 支持通过黑名单文件灵活排除指定会议室（按名称、容量、room_id）。\n- 黑名单配置无需重启或重新初始化即可生效于后续预约流程。\n- 文档详细说明了黑名单字段和维护方法，提升灵活性和易用性。","license":"MIT-0"},"metadata":null,"owner":{"handle":"gooodplus","userId":"s172c89ns8h8h7129ary4kthc983mbdh","displayName":"gooodplus","image":"https://avatars.githubusercontent.com/u/157717741?v=4"},"moderation":null}