资讯动态

Lark 飞书 CLI 日历 Skill:预约/改约日程与会议室搜索的完整工作流指南

发布时间:2026/9/21 16:41:03 来源:尧图企业网站定制
Lark 飞书 CLI 日历 Skill预约/改约日程与会议室搜索的完整工作流指南【免费下载链接】cliThe official Lark/飞书 CLI tool, maintained by the larksuite team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Calendar, Mail, Tasks, Meetings, and more, with 200 commands and 20 AI Agent Skills.项目地址: https://gitcode.com/gh_mirrors/cli414/cli本文以skills/lark-calendar/references/lark-calendar-schedule-meeting.md为主体结合仓库内create、update、room-find、suggestion、freebusy等命令文档与shortcuts/calendar/下的源码实现完整还原飞书 CLI 中预约/改约日程、查询/搜索可用会议室的智能调度工作流帮助开发者与 AI Agent 理解任务类型判定、时间分支路由、会议室落地等关键决策节点掌握可直接运行的 CLI 调用方式。在 Lark/飞书官方 CLI仓库路径gh_mirrors/cli414/cli中帮我约个会下周找个时间开会给周会换个会议室这类自然语言请求并不是简单映射到一条创建命令就能完成的。lark-calendarskill 通过lark-calendar-schedule-meeting.md定义了一套严格的调度工作流先判定任务类型新建还是编辑再定位目标日程、补全默认值、判断时间明确性、走对应分支查询会议室与忙闲最后才落地写操作。本文将以这份工作流文档为主线逐一拆解每个步骤的判定规则、命令参数与底层实现依据。一、工作流全景先判型、再定位、后落地schedule-meeting.md开篇即给出执行摘要强调以下几个原则第一步永远是判断任务类型新建日程还是编辑已有日程。编辑已有日程时必须先定位目标日程或实例的event_id未拿到唯一event_id前不得调用update。默认做智能助理不做表单填写机能根据上下文补全的默认值就直接补全仅在必须决策的冲突或无法唯一确定的场景下才发起询问。新建流先补默认值编辑流先继承已定位日程信息。BLOCKING REQUIREMENT面临时间方案或会议室方案的选择时必须先向用户展示选项并等待确认禁止未经确认直接创建/更新日程。必须按顺序执行不要跳过任务类型判定 → 目标日程定位编辑流→ 补默认值/继承基线信息 → 判断时间明确性这些前置步骤。该文档还明确列出了一系列严禁行为包括严禁在未读取对应子命令文档前直接调用命令严禁在尚未判断新建还是编辑之前就直接进入创建日程或查会议室动作严禁把带有既有日程锚点 修改动词的请求当成新建日程严禁在编辑已有日程时跳过目标定位步骤严禁在面临时间/会议室方案选择时未经用户确认就擅自创建/更新日程。这一设计在skills/lark-calendar/SKILL.md的前置条件路由一节得到呼应凡涉及预约日程/会议、调整时间、查会议室第一步必须读schedule-meeting.md仅编辑字段标题/描述或增删参会人不涉及时间和会议室时可跳过直接读lark-calendar-update.md。二、核心概念会议室是日程的参与人不是独立资源schedule-meeting.md的核心概念部分给出了三条关键认知会议室是日程的一种参与人attendee / resource不能脱离日程单独预定。预定或查找会议室均需先确定时间块。当用户说查会议室找会议室默认意图是查会议室可用性不是检索会议室资源名录。这一点在源码与命令文档中均有印证。room-find的文档lark-calendar-room-find.md开篇即声明会议室是日程的一种资源型参与人不能脱离日程单独预定update文档也强调会议室是 resource attendee必须使用omm_ID 添加到参会人列表。参会人 ID 前缀规范贯穿所有相关命令前缀类型说明ou_user飞书用户 open_idoc_chat飞书群组omm_resource会议室在create的参数定义中lark-calendar-create.md--attendee-ids同样支持用户ou_、群组oc_和会议室omm_并明确要求AI 提取时请务必保留对应前缀。三、任务类型判定新建 vs 编辑工作流要求处理任何请求前先做任务类型判定。文档给出了判定表类型典型语言信号第一动作新建日程约个会安排会议新建日程订个会议室开会补默认值再进入时间判断编辑已有日程给某日程加人/删人/加会议室把某日程改到…换会议室先定位目标event_id判定规则非常明确只要同时出现既有日程锚点标题、时间段、这个日程、这场会和修改动词添加、移除、改到、换默认判定为编辑对重复性日程的编辑必须先定位到对应实例的event_id。适用场景示例文档原文帮我约个会 / 下周找时间和 XX 开会帮我订/找/搜索一个可用会议室明天下午3点约个日程把明天上午的日程加上 小明给下周一的周会换个会议室把这个日程改到明天下午并加上学清 F201四、编辑流先定位目标日程绝不跳步4.1 定位规则编辑已有日程时必须先定位目标event_id优先利用用户给出的标题、日期、时间范围等锚点通过agenda、search-event或实例视图缩小范围命中多个候选日程时必须向用户展示候选项并要求确认重复性日程必须继续定位到该次实例的event_id。search-event的命令形态来自 SKILL.mdlark-cli calendar search-event --query 周会 --start 2026-04-20 --end 2026-04-27 \ --attendee-ids ou_user1,oc_chat1,omm_room1 --page-token page_token --page-size 30注意--attendee-ids的多值语义为同类型内 OR并集--attendee-ids ou_A,ou_B表示 A或B 参加的日程而非 A 和 B 都参加。4.2 编辑流分支路由定位成功后按子场景路由到不同处理路径编辑子场景下一步仅增删普通参会人/群组不改时间不涉及会议室直接update详见 lark-calendar-update.md新增会议室不改时间基于已定位日程 start/end → 明确时间分支只改时间不涉及会议室判断时间明确性 → 对应分支既改时间又新增/更换会议室先确定最终时间 → 再查会议室 → 落地五、新建流智能推断默认值新建日程时遵循智能助理原则能推断的默认值直接补全标题根据上下文自动生成如无法推断默认会议参会人如未指定默认仅用户自己时长基于上下文推断默认 30 分钟无时间信息默认推断合理区间如今天或近两天进入时间推荐流程禁止询问用户。一个例外是搜索参与人出现多个结果无法唯一确定时必须询问用户并记录长期记忆。六、判断时间是否明确编辑流改时间必须保持原时长时间基准规则新建流使用用户给出的时间或默认补全出的时间范围编辑流且不改时间已定位日程的当前start/end就是明确时间编辑流且改时间用户想改到的新时间若表达模糊进入模糊时间分支。文档特别强调了一条容易踩坑的规则在执行修改日程/会议时间的任务时必须先获取原日程的持续时长。如果用户只提供了新的开始时间你必须根据原时长自动计算出新的结束时间严格保持原时长不变禁止擅自改变原日程的时长。这一规则在update文档中同样被标注为⚠️ 高风险操作修改时间时必须先读取原日程时长并计算新 end如果 end 计算错误导致日程时长变化用户会直接感知。七、分支路由明确时间与模糊时间两条路径时间明确性判定完成后按分支表路由判定结果下一步读取明确时间schedule-clear-time.md模糊时间 / 无时间信息schedule-fuzzy-time.md7.1 明确时间分支room-find freebusy 冲突处理lark-calendar-schedule-clear-time.md处理时间已明确的场景。进入分支前调度器已完成任务类型判定、event_id 定位、默认值补全与时间明确性判断。流程分三步步骤 1查询会议室如需lark-cli calendar room-find \ --slot start~end \ --attendee-ids ids \ --city city \ --building building \ --floor F2 \ --room-name room_name时间块确定规则编辑流且不改时间、只新增会议室时--slot必须来自已定位日程的当前start/end编辑流且既改时间又加会议室时--slot必须来自候选新时间而不是旧时间。room-find的完整参数lark-calendar-room-find.md参数必填说明--slot start~end是期望查询的时间块格式开始时间~结束时间多个候选时间块可重复传入--city text否城市强约束。仅当用户明确说出城市时才提取严禁根据园区或楼宇名称自行联想--building text否楼宇强约束承载城市以下、楼层以上的办公区/园区/楼栋描述--floor text否仅用于筛选楼层先归一化再传规范值如2楼/二楼/2F统一为F2--room-name text否会议室名称约束支持英文逗号分隔多个名称--min-capacity n否最小容纳人数必须为正整数--max-capacity n否最大容纳人数用于过滤过大空间--attendee-ids id_list否参会对象 IDou_/oc_前缀。不要传入 bot 的 open_id--event-rrule rrule否重复日程规则RFC5545。系统绝对不支持 COUNT必须转为 UNTIL--timezone tz否预约日程所用时区默认用户设备时区如Asia/Shanghai批量会议室名称查询示例# 场景帮我约一个 16~20 号之间的会议室 lark-cli calendar room-find \ --slot 2026-03-27T14:00:0008:00~2026-03-27T15:00:0008:00 \ --room-name 16,17,18,19,20 # 场景查找 木星 或 火星 会议室 lark-cli calendar room-find \ --slot 2026-03-27T14:00:0008:00~2026-03-27T15:00:0008:00 \ --room-name 木星,火星参数提取还有几处重要规则--city仅在用户明确说出城市时提取若已提取--city--building中不要再重复携带城市前缀如北京学清嘉创大厦B座应拆为--city 北京与--building 学清嘉创大厦B座复合会议室号如F3-05应优先拆为--floor F3--room-name 05同一语义槽位只保留一个规范值禁止同时传2楼 F2这类重复信息。此外返回结果不保证与搜索词完全字面匹配——底层可能结合邻近楼层推荐如搜2层无空房时可能返回相近的3层候选这不应被误判为异常。步骤 2查询忙闲# 单人 / 多人查忙--user-id 可重复或逗号分隔服务端已合并相邻/重叠忙碌区间 lark-cli calendar freebusy --start start --end end --user-id ou_a,ou_b # 直接求共同空闲推荐用于「找几个人一起有空」 lark-cli calendar freebusy --start start --end end \ --user-id ou_a,ou_b,ou_c --type common_free --min-duration 30m忙闲查询规则参与人含bot无需为 bot 查询忙闲——bot 是虚拟身份可并行多个会议、无忙闲语义参与人过多超过 5 人仅查询当前用户及少数核心人员忙闲即可参与人含群组无需展开群组成员查询忙闲如果用户是从suggestion确认了时间块后进入本分支的无需再调用freebusy找多人共同空闲直接用--type common_free [--min-duration dur]让 CLI 一次算出共同空闲不要自己再合并求交。freebusy的四种视角来自 SKILL.mdbusy合并后的忙碌区间默认、raw_busy原始日程块 rsvp_status、free空闲区间可带--min-duration、common_free多人共同空闲可带--min-duration。注意freebusy只回答哪些区间空着不判断该区间是否适合排会要推荐合适时间必须走suggestion。步骤 3冲突处理无冲突直接让用户选择会议室如需进入落地操作有冲突必须先说明冲突情况询问用户继续当前时间→ 让用户选择会议室如需进入落地操作换时间→ 转入模糊时间分支。7.2 模糊时间分支suggestion 批量查询lark-calendar-schedule-fuzzy-time.md处理时间模糊如明天下午下周找个时间或完全无时间信息的场景核心动作是调用suggestion产出候选时间块。步骤 1调用 suggestionlark-cli calendar suggestion \ --start range_start \ --end range_end \ --attendee-ids ids \ --duration-minutes n \ --event-rrule rrule规则用户完全没有提供时间信息时先默认一个合理区间如今天剩余时间或近两天再调用编辑流中若用户说改到明天下午下周找个时间再约基于用户期望的新时间范围调用不要沿用旧时间不要在用户完全没给时间时反问你想约什么时候——先补合理区间再进入 suggestion。suggestion的核心参数lark-calendar-suggestion.md参数必填说明--start time否搜索区间开始时间默认当前时间--end time否搜索区间结束时间默认与 start 同一天取当天结束时间--attendee-ids id_list否参与人 IDou_/oc_前缀不要传 bot 的 open_id--event-rrule rrule否重复日程规则RFC5545不支持 COUNT--duration-minutes min否会议时长分钟优先用户显式值其次上下文推断--timezone tz否时区默认用户设备时区--exclude times否排除的时间块start~end格式多个用逗号分隔--format flag否输出格式固定为json--dry-run否预览 API 调用不执行时间格式支持 ISO 86012026-03-19T08:40:2908:00、日期时间自动补全时区、仅日期start 取 00:00:00、end 取 23:59:59、Unix 时间戳秒级四类自动解析。步骤 2分支处理不需要会议室获取多个推荐时间块后直接向用户展示候选时间用户确认后进入落地操作需要会议室获取候选时间块后不要急于让用户只选时间——先将这些时间块一次性交给room-find批量查询可用会议室然后将【候选时间】与【对应的可用会议室列表】结构化展示让用户一次性完成选择。注意即使用户最初只说查会议室且未带时间也必须强制走 suggestion → room-find 路径。步骤 3用户确认后用户选中suggestion返回的时间块后无需再次调用freebusy直接进入落地操作。BLOCKING REQUIREMENT 再次强调必须先向用户展示选项并等待确认禁止在未获用户确认时直接创建/更新日程。模糊语义消解与长期记忆针对存在歧义的时间场景如上班后下班前、未明确上下午的 12 小时制时间严禁主观臆断应主动澄清真实意图用户澄清后将个性化定义沉淀为长期偏好。7.3 用户展示格式结构化分行严禁揉成一团展示多个时间块及对应会议室时必须结构化分行排版严禁将时间与会议室放在同一行。文档给出的标准模板## 2026-03-27 周五 [选项 1] 14:00 - 15:00参会人均空闲 可用会议室 1. 学清嘉创大厦B座-F2-02(7人) 2. 学清嘉创大厦B座-F2-05(10人) [选项 2] 16:00 - 17:00参会人均空闲 可用会议室 1. 学清嘉创大厦B座-F3-01(6人) 2. 学清嘉创大厦B座-F3-06(8人) 请回复您倾向的选项编号以及对应的会议室序号我来为您完成预定。room-find输出同样要求按此格式整理且补充了两条 AI 行为准则展示给用户的room_name必须逐字透传CLI/API 返回的原值禁止重组、意译、缩写或便于阅读式摘要重复性日程要明确阻断原因——若候选会议室的reserve_until_time无法覆盖重复性日程必须向用户说明该会议室最长可约至何时用户确认继续时自动将日程重复规则结束时间缩短至该reserve_until_time防止预约失败。suggestion的展示则要求附上润色后的推荐理由并如实反馈冲突返回的推荐方案不一定都完全空闲判断依据是推荐理由中是否表达了完全空闲或没有任何忙闲冲突存在冲突时必须如实说明绝不能误导用户。当返回结果包含ai_action_guidance字段或所有方案均非空闲时必须主动提供优化建议如调整时间范围、会议时长或参与人。八、落地日程变更create 与 update用户确认后进入落地阶段新建 →create编辑 →updatelark-cli calendar create \ --summary ... \ --start start \ --end end \ --attendee-ids ou_xxx,oc_xxx,omm_xxx lark-cli calendar update \ --event-id event_id \ --start start \ --end end \ --add-attendee-ids omm_new_room落地规则文档原文编辑流必须始终沿用前面定位得到的目标event_id禁止在最后一步重新猜测目标日程编辑流中新增会议室默认仅追加room_id不移除已有会议室仅当用户明确说更换会议室时才同时--remove-attendee-ids旧 --add-attendee-ids新需要会议室时将选中的room_id写入参与人列表。8.1create命令详解create创建日程并按需邀请参会人。推荐命令ISO 8601 时间# 创建日程 邀请参会人 lark-cli calendar create \ --summary 产品评审 \ --start 2026-03-12T14:0008:00 \ --end 2026-03-12T15:0008:00 \ --attendee-ids ou_aaa,ou_bbb # 无参会人 lark-cli calendar create \ --summary 午餐 \ --start 2026-03-12T12:0008:00 \ --end 2026-03-12T13:0008:00 # 指定日历 lark-cli calendar create --summary ... --start ... --end ... \ --calendar-id cal_xxx关键参数与默认行为参数必填说明--summary text否日程标题。标题中不应该出现时间、地点、人物信息--start time是开始时间ISO 8601必须带时区偏移不带偏移会按进程时区解析致偏移--end time是结束时间ISO 8601必须带时区偏移--description markdown否日程描述统一使用此字段Markdown 格式--attendee-ids id_list否参与人 ID 列表逗号分隔支持ou_/oc_/omm_--calendar-id id否日历 ID省略则使用主日历--rrule rrule否重复规则RFC5545如FREQDAILY;INTERVAL1;UNTIL具体日期--meeting-owner-id ou_否设置 VC 会议 owner需--as botowner 须为本租户用户 open_id--dry-run否预览 API 调用不执行源码层面shortcuts/calendar/calendar_create.go中--start与--end被标记为Required: true--attendee-ids的说明为attendee IDs, comma-separated (supports user ou_, chat oc_, room omm_)与文档完全一致。create的自动行为来自文档注意区用户表达每周 X每周重复连续 N 周时必须使用 rrule 创建重复性日程而非创建多个独立日程自动设置attendee_ability: can_modify_event参会人可查看彼此并编辑日程自动设置free_busy_status: busy默认忙闲状态为忙碌自动设置reminders: [{minutes: 5}]默认开始前 5 分钟提醒自动设置vchat: {vc_type: vc}默认包含飞书视频会议失败保护若添加参会人失败如 open_id 错误CLI 会自动删除刚创建的空日程回滚不通知参会人审批会议室create不暴露attendees[].approval_reason若会议室要求审批请用用户身份先创建日程再用完整 APIcalendar event.attendees create --as user添加会议室并传approval_reason。--description字段支持 Markdown 富文本加粗、斜体、下划线、删除线、链接、最多三级标题、引用、列表、GFM 表格与图片本地图片路径相对路径且位于当前工作目录内会自动上传云盘内联渲染飞书文档 URL 自动解析为内联文档。禁止用***文本***同时表示加粗斜体端上会残留*应嵌套书写如**u*~~文本~~*/u**。8.2update命令详解update更新既有日程字段或独立增量添加/移除参会人和会议室。它支持三类互相独立的动作更新日程字段、添加参会人/会议室、移除参会人/会议室——可以单独执行也可以在同一次命令中组合执行。# 更新标题、描述、时间 lark-cli calendar update \ --event-id EVENT_ID \ --summary 产品评审 \ --description 评审需求范围、排期与风险 \ --start 2026-03-12T14:0008:00 \ --end 2026-03-12T15:0008:00 # 增量添加参会人和会议室 lark-cli calendar update \ --event-id EVENT_ID \ --add-attendee-ids ou_aaa,ou_bbb,omm_room # 移除参会人和会议室 lark-cli calendar update \ --event-id EVENT_ID \ --remove-attendee-ids ou_aaa,omm_room # 同时更新日程信息、移除旧会议室、添加新会议室 lark-cli calendar update \ --event-id EVENT_ID \ --summary 产品评审 \ --start 2026-03-12T15:0008:00 \ --end 2026-03-12T16:0008:00 \ --remove-attendee-ids omm_old_room \ --add-attendee-ids omm_new_room参数一览参数必填说明--event-id id是要更新的日程 ID。重复性日程请根据操作范围选择 ID--calendar-id id否日历 ID省略则使用primary--summary text否新标题仅在显式传入时更新传空字符串会清空标题--description markdown否新描述Markdown 格式仅在显式传入时更新--start time否新开始时间必须带时区偏移。更新时间时必须同时传--end--end time否新结束时间必须带时区偏移。更新时间时必须同时传--start--rrule rrule否新重复规则RFC5545不要使用 COUNT转为 UNTIL--add-attendee-ids id_list否增量添加参会人/会议室逗号分隔ou_/oc_/omm_--remove-attendee-ids id_list否增量移除参会人/会议室逗号分隔--notify否是否发送更新通知默认true可用--notifyfalse静默更新--dry-run否预览 API 调用不执行至少需要提供一个动作。使用规则要点--add-attendee-ids是增量添加不是替换最终参与人列表不要用它表达只保留这些人对--summary、--descriptionCLI 以是否显式传入该 flag判断是否更新而非值是否为空只想增删参会人或会议室时不需要同时传--summary、--start、--end等日程字段反之亦然如需替换某个参与人、群组或会议室使用--remove-attendee-ids 旧ID--add-attendee-ids 新ID同一次命令组合多个动作时执行顺序为日程字段 → 移除参会人 → 添加参会人若中途失败不会自动回滚已成功步骤错误信息会说明已完成的步骤不得擅自附加--skip-room-check重试将错误信息含会议室 ID 与原因原样透传给用户说明本次更新会导致会议室预定失败明确询问是否仍要继续用户确认后再带--skip-room-check重新执行预检失败如接口 404 或返回错误会降级放行向 stderr 打一条 warning 后继续执行避免因新接口不稳定阻塞正常更新。九、重复性日程与会议室reserve_until_time 校验工作流中与重复性日程相关的约束详见 lark-calendar-recurring.md重复性日程/例外的编辑和删除必须显式指定操作范围--apply-tosingle只操作当前这一次、all整条序列 例外、this-and-following从起始实例截断并新建后续序列event_id结构为{event_uid}_{originalTime}originalTime 0表示 Master 或 Normal 0表示某次实例唯一可靠区分 Instance 与 Exception 的方式是get返回的is_exception字段room-find时若为重复性日程必须校验返回的reserve_until_time该会议室最晚可预约时间是否覆盖event-rrule对应的重复范围不覆盖则需缩短规则结束时间suggestion、room-find、update的 rrule 参数均明确不支持 COUNT如需限制重复次数必须转为 UNTIL。十、工作流落地路径小结将整个调度工作流串起来一次完整的预约/改约日程 会议室任务遵循以下执行序列任务类型判定新建 vs 编辑锚点 修改动词 编辑编辑流定位agenda/search-event定位唯一event_id多候选必须确认补默认值 / 继承基线新建流补标题、参会人、时长默认值编辑流继承已定位日程信息判断时间明确性新建流用用户时间或补全时间编辑流不改时间用当前 start/end改时间须保持原时长分支路由明确时间 →room-find如需→freebusy如需→ 冲突处理模糊时间 →suggestion→ 批量room-find如需→ 结构化展示BLOCKING REQUIREMENT任何时间方案/会议室方案选择都必须先展示选项并等待用户确认落地新建 →create编辑 →update编辑流始终沿用定位得到的event_id。这套工作流将智能助理原则落实为可执行的决策树既避免了 Agent 在信息不全时盲目写操作又保证了新建流不因缺少时间信息而卡壳——这正是 Lark 飞书 CLI 在日历域设计中值得借鉴的核心模式。开发者可以在 skills/lark-calendar/references/ 下按需阅读lark-calendar-schedule-clear-time.md、lark-calendar-schedule-fuzzy-time.md、lark-calendar-room-find.md、lark-calendar-suggestion.md、lark-calendar-create.md、lark-calendar-update.md等完整命令文档并在shortcuts/calendar/目录中查看calendar_create.go、calendar_update.go、calendar_room_find.go、calendar_suggestion.go等对应实现。【免费下载链接】cliThe official Lark/飞书 CLI tool, maintained by the larksuite team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Calendar, Mail, Tasks, Meetings, and more, with 200 commands and 20 AI Agent Skills.项目地址: https://gitcode.com/gh_mirrors/cli414/cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价