飞书会议室智能预订
v2.9.0飞书会议室查询与预订。当用户提到"查会议室"、"订会议室"、"空闲会议室"、"预订会议室"、"开会"、"找个会议室"、"F4会议室"、"紫金会议室"、"哪个会议室有空"、或者创建会议时需要自动匹配空闲会议室时,必须使用此 技能。也适用于用户要求创建日程并指定楼栋/区域时自动完成会议室预订的场景。也适用于用户提到"会议室偏好"、"我的偏好"、"候补"、"补订会议室"、"自动订会议室"、"下周去哪"、"工区"、"出差"时。
运行时依赖
安装命令
点击复制技能文档
飞书会议室查询与预订
管理飞书会议室的忙闲查询、自动匹配、日程预订、多工区偏好管理、周工区管理和候补轮询。
前置依赖 lark-命令行工具 已安装且 机器人 身份可用 飞书应用已开通相关权限(calendar:calendar.free_busy:read, calendar:calendar.event:创建 等) 数据文件:references/room-m应用ing.json、references/user-preferences.json、references/room-wAIt列出.json、references/weekly-workspace.json 脚本目录:scripts/ 工具脚本
所有会议室操作必须通过脚本,不要手写 bash 循环。
查询_rooms.py — 会议室查询(不变) # 列出所有楼栋 python3 scripts/查询_rooms.py --列出-buildings
# 列出指定楼栋的会议室 python3 scripts/查询_rooms.py --列出-rooms -b "丽金"
# 查询空闲会议室(表格输出) python3 scripts/查询_rooms.py -b "丽金" \ -s "2026-04-20T14:00:00+08:00" \ -e "2026-04-20T15:00:00+08:00" -o table
# 按容量筛选 python3 scripts/查询_rooms.py -b "丽金" \ -s "2026-04-20T14:00:00+08:00" \ -e "2026-04-20T15:00:00+08:00" \ --capacity-gte 8 -o table
workspace_管理器.py — 周工区管理(🆕 新增) # 获取当前工区信息 python3 scripts/workspace_管理器.py --获取
# 设置本周工区 python3 scripts/workspace_管理器.py --设置-current --workspace "丽金智地中心 B座"
# 设置下周工区 python3 scripts/workspace_管理器.py --设置-next --workspace "紫金数码园4号楼"
# 推荐下周工区(基于本周会议室使用频率) python3 scripts/workspace_管理器.py --recommend
# 手动周切换 python3 scripts/workspace_管理器.py --advance-week
# 清空下周设置 python3 scripts/workspace_管理器.py --clear-next
manage_preferences.py — 偏好管理(简化版:仅按工区维护会议室偏好列表) # 设置偏好(指定工区 + 会议室列表) python3 scripts/manage_preferences.py --设置 \ --user "ou_xxx" --building "丽金智地中心 西塔" \ --preferred-rooms "F11-15,F11-07"
# 读取偏好(指定工区) python3 scripts/manage_preferences.py --获取 --user "ou_xxx" --building "丽金智地中心 西塔"
# 读取所有偏好 python3 scripts/manage_preferences.py --获取 --user "ou_xxx"
# 列出所有用户偏好 python3 scripts/manage_preferences.py --列出
# 删除指定工区的偏好 python3 scripts/manage_preferences.py --删除 --user "ou_xxx" --building "丽金智地中心 西塔"
watch_wAIt列出.py — 候补管理(🔄 去掉容量限制) # 查看候补状态 python3 scripts/watch_wAIt列出.py --状态
# 执行一轮轮询 python3 scripts/watch_wAIt列出.py --poll
# 添加候补(只需指定楼栋,不限容量) python3 scripts/watch_wAIt列出.py --添加 \ --event-id "xxx" --summary "周会" \ --启动 "2026-04-20T14:00:00+08:00" --end "2026-04-20T15:00:00+08:00" \ --building "丽金"
# 移除候补 python3 scripts/watch_wAIt列出.py --移除 --event-id "xxx"
# 清理过期候补 python3 scripts/watch_wAIt列出.py --清理
数据文件 文件 用途 references/room-m应用ing.json 会议室资源 ID 映射 references/user-preferences.json 用户会议室偏好(按工区存储偏好会议室列表) references/room-wAIt列出.json 候补预订队列(不限容量) references/weekly-workspace.json 🆕 周工区记录(本周/下周) 核心流程 流程 F:工区管理(🆕 新增)
管理用户的工区,支持随时切换(出差、临时调整)+ 周期兜底(周五提醒下周)。
第 1 层:显式切换(随时触发):
用户随时说"今天我在紫金"、"这周去上海"、"明天起去丽金" 立刻生效,支持指定日期范围 数据结构为 segments 数组,每个 segment 包含 from/to/workspace 新 segment 会自动截断与之重叠的旧 segment 用户说 解析 动作 "今天在紫金" 只影响今天 设置 --workspace "紫金" --from "今天" --to "今天" "这周去上海" 本周剩余 设置 --workspace "上海新江湾" --from "今天" --to "本周日" "明天起去紫金" 明天开始 设置 --workspace "紫金" --from "明天" "下周回丽金" 下周开始 设置-next --workspace "丽金"
第 2 层:周期兜底(周五提醒):
Heartbeat 在周五检测下周工区是否已设置 未设置 → 执行 --recommend 推荐下周工区(基于本周会议室使用频率) 弹卡片询问用户确认 用户选择后 --设置-next 写入 已设置 → 跳过,不打扰
查询当前工区:
--获取 自动根据今天的日期匹配 segment --timeline 展示完整工区时间线
工区使用规则:
所有流程默认使用 --获取 返回的当前工区 用户显式指定楼栋时,覆盖默认工区 周一时 next_week 不会被自动提升,需通过显式 设置 或新的 segment 覆盖 流程 A:查询空闲会议室
用户只想看哪些会议室有空。
解析意图 — 时间段、楼栋(默认取周工区)、容量需求 确定日期 — ⚠️ 严格验证星期几 执行查询 — python3 scripts/查询_rooms.py -b "楼栋" -s ... -e ... -o table 呈现结果 — 直接转发脚本输出 流程 B:创建会议并自动预订
用户要开会,需要创建日程 + 匹配会议室。
解析意图 — 标题、时间、楼栋(默认取周工区)、容量、参会人 确定日期 — ⚠️ 严格验证星期几 确定工区 — 读取 weekly-workspace.json 的 current_week.workspace,用户可显式覆盖 读取该工区的偏好 — python3 scripts/manage_preferences.py --获取 --user "ou_xxx" --building "丽金智地中心 西塔" 有偏好 → 偏好会议室排在选择列表最前面 该工区无偏好 → 弹卡片让用户选,选择后写入偏好 查询空闲会议室 — 用脚本查询,带上容量筛选 用户选择 — feishu_ask_user_question 弹卡片(按偏好排序) 创建日程 — feishu_calendar_event 创建 添加会议室+参会人 — feishu_calendar_event_attendee 创建 ⚠️ 字段名是 attendee_id,不是 id 验证 RSVP — 等 5 秒后查 attendee 列出 Fallback — de命令行工具ne 时自动换下一个空闲会议室 流程 C:会议室偏好管理
每个工区独立维护偏好会议室列表(仅存储用户手动设置的偏好,无自动学习)。
设置偏好:
用户说"在丽金我偏好 F11-15 和 F11-07" 调用 --设置 --building "丽金智地中心 西塔" --preferred-rooms "F11-15,F11-07" 写入
读取偏好:
--获取 --user "ou_xxx" --building "丽金智地中心 西塔" 读取指定工区偏好 --获取 --user "ou_xxx" 读取全部偏好
应用偏好:
流程 B/D 自动读取当前工区的偏好 偏好会议室排在选择列表最前面 没有偏好时按容量从大到小排序
删除偏好:
--删除 --user "ou_xxx" --building "丽金智地中心 西塔" 删除指定工区偏好 --删除 --user "ou_xxx" 删除全部偏好 流程 D:扫描日程自动补订(🔄 收窄范围)
自动检测用户日程中缺少会议室的会议并补订。
触发方式:
手动:用户说"帮我检查有没有缺会议室的日程"、"补订会议室" 自动:Heartbeat 定时任务
扫描步骤:
调用 feishu_calendar_event 列出 获取用户近期日程 严格过滤(只补订符合条件的会议): ✅ self_rsvp_状态 = "accept"(已接受的会议,不管发起者是谁) ❌ self_rsvp_状态 != "accept" → 跳过(未接受/待定/拒绝的会议不补订) ❌ 已有 resource 参会人 → 跳过 ❌ 标题含 "1:1/线上/phone/聚餐/假期" → 跳过 ❌ 全天事件 → 跳过 ❌ 纯线上视频会议(无 location)→ 跳过 对符合条件的会议: 读取当前周工区作为默认楼栋 先获取该时段所有空闲会议室的完整列表 有偏好 → 按偏好排序,自动选偏好第一个(不弹卡片) 无该工区偏好 → 弹卡片让用户选 全部满 → 加入候补(不限容量,只指定楼栋)
关键变化:
❌ 不再补订用户未接受的会议 ❌ 不再补订聚餐、假期等特殊类型 ✅ 先拿到完整空闲列表,再精准预订(避免竞态) ✅ 按当前周工区查询 流程 E:候补轮询(🔄 不限容量)
会议室满了时的自动候补机制。
候补条件放宽:
❌ 不使用 capacity_gte 筛选(小会议室也比没有强) ❌ 不使用 preferred_rooms 排序(候补时优先容量大的) ✅ 只需指定候补楼栋
添加候补:
流程 D/B 发现全满时,调用 watch_wAIt列出.py --添加 --building "楼栋" 只需传 --building,不再传 --capacity-gte
轮询检查:
Heartbeat 或手动触发 watch_wAIt列出.