# 预约/改约日程或会议、查询/搜索可用会议室的工作流 ## 执行摘要 - **第一步永远是判断任务类型:新建日程,还是编辑已有日程。** - **编辑已有日程时,必须先定位目标日程或实例的 `event_id`。** - **默认做智能助理,不做表单填写机。** 能根据上下文补全的默认值就直接补全,仅在必须决策的冲突或无法唯一确定的场景下才发起询问。 - **新建流先补默认值,编辑流先继承已定位日程信息。** - **明确时间** → 进入 [明确时间分支](./lark-calendar-schedule-clear-time.md) - **模糊时间或无时间信息** → 进入 [模糊时间分支](./lark-calendar-schedule-fuzzy-time.md) - **BLOCKING REQUIREMENT**: 面临时间方案或会议室方案的选择时,必须先向用户展示选项并等待确认,禁止未经确认直接创建/更新日程。 - **必须按顺序执行。** 不要跳过"任务类型判定""目标日程定位(编辑流)""补默认值/继承基线信息""判断时间明确性"这些前置步骤。 ## 严禁行为 - **严禁在未读取对应子命令文档前直接调用命令。** - **严禁在尚未判断"新建"还是"编辑"之前,就直接进入创建日程或查会议室动作。** - **严禁把带有既有日程锚点 + 修改动词的请求当成新建日程。** - **严禁在编辑已有日程时跳过目标定位步骤。** 未拿到唯一 `event_id` 前,不得调用 `+update`。 - **严禁在面临时间/会议室方案选择时,未经用户确认就擅自创建/更新日程。** ## 适用场景 - "帮我约个会" / "下周找时间和 XX 开会" - "帮我订/找/搜索一个可用会议室" - "明天下午3点约个日程" - "把明天上午的日程加上 小明" - "给下周一的周会换个会议室" - "把这个日程改到明天下午,并加上学清 F201" ## 核心概念 - **会议室是日程的一种参与人(attendee / resource),不能脱离日程单独预定。** - **预定或查找会议室,均需先确定时间块。** - **当用户说"查会议室""找会议室",默认意图是查会议室可用性,不是检索会议室资源名录。** ## 任务类型判定 | 类型 | 典型语言信号 | 第一动作 | |------|--------------|----------| | 新建日程 | "约个会""安排会议""新建日程""订个会议室开会" | 补默认值,再进入时间判断 | | 编辑已有日程 | "给某日程加人/删人/加会议室""把某日程改到…""换会议室" | 先定位目标 `event_id` | 规则: - 只要同时出现**既有日程锚点**(标题、时间段、`这个日程`、`这场会`)和**修改动词**(添加、移除、改到、换),默认判定为编辑。 - 对重复性日程的编辑,必须先定位到对应实例的 `event_id`。 ## 编辑流:先定位目标日程 定位规则: - 优先利用用户给出的标题、日期、时间范围等锚点,通过 `+agenda`、`+search-event` 或实例视图缩小范围 - 命中多个候选日程时,必须向用户展示候选项并要求确认 - 重复性日程必须继续定位到该次实例的 `event_id` 编辑流分支路由: | 编辑子场景 | 下一步 | |-----------|--------| | 仅增删普通参会人/群组,不改时间,不涉及会议室 | 直接 `+update`(详见 [lark-calendar-update.md](./lark-calendar-update.md)) | | 新增会议室,不改时间 | 基于已定位日程 start/end → [明确时间分支](./lark-calendar-schedule-clear-time.md) | | 只改时间,不涉及会议室 | 判断时间明确性 → 对应分支 | | 既改时间,又新增/更换会议室 | 先确定最终时间 → 再查会议室 → 落地 | ## 新建日程:智能推断默认值 - **标题**:根据上下文自动生成;如无法推断,默认"会议" - **参会人**:如未指定,默认仅用户自己 - **时长**:基于上下文推断;默认 30 分钟 - **无时间信息**:默认推断合理区间(如"今天"或"近两天"),进入时间推荐流程,禁止询问用户 搜索参与人出现多个结果无法唯一确定时,必须询问用户并记录长期记忆。 ## 判断时间是否明确 时间基准规则: - **新建流**:使用用户给出的时间,或默认补全出的时间范围 - **编辑流且不改时间**:已定位日程的当前 `start/end` 就是明确时间 - **编辑流且改时间**:用户想改到的新时间;若表达模糊,进入模糊时间分支 **注意**: 在执行修改日程/会议时间的任务时,必须先获取原日程的持续时长。如果用户只提供了新的开始时间,你必须根据原时长自动计算出新的结束时间,严格保持原时长不变,禁止擅自改变原日程的时长。 ## 分支路由 | 判定结果 | 下一步读取 | |----------|-----------| | 明确时间 | [schedule-clear-time.md](./lark-calendar-schedule-clear-time.md) | | 模糊时间 / 无时间信息 | [schedule-fuzzy-time.md](./lark-calendar-schedule-fuzzy-time.md) | ## 落地日程变更 用户确认后调用: - 新建 → [`+create`](./lark-calendar-create.md) - 编辑 → [`+update`](./lark-calendar-update.md) ```bash lark-cli calendar +create \ --summary "..." \ --start "" \ --end "" \ --attendee-ids "ou_xxx,oc_xxx,omm_xxx" lark-cli calendar +update \ --event-id "" \ --start "" \ --end "" \ --add-attendee-ids "omm_new_room" ``` 落地规则: - 编辑流必须始终沿用前面定位得到的目标 `event_id`;禁止在最后一步重新猜测目标日程 - 编辑流中"新增会议室"默认仅追加 `room_id`,不移除已有会议室 - 仅当用户明确说"更换会议室"时,才同时 `--remove-attendee-ids` 旧 + `--add-attendee-ids` 新 - 需要会议室时,将选中的 `room_id` 写入参与人列表 ## 参考 - [lark-calendar-schedule-clear-time.md](./lark-calendar-schedule-clear-time.md) - [lark-calendar-schedule-fuzzy-time.md](./lark-calendar-schedule-fuzzy-time.md) - [lark-calendar-room-find.md](./lark-calendar-room-find.md) - [lark-calendar-suggestion.md](./lark-calendar-suggestion.md) - [lark-calendar-create.md](./lark-calendar-create.md) - [lark-calendar-update.md](./lark-calendar-update.md) - [SKILL.md](../SKILL.md)