Skill: tujinsama/schedule-sync-claw (version 1.0.0)

--- name: schedule-sync-claw description: "飞书日历智能协作 Skill。核心能力：(1) 智能约会——查询多人空闲时间、自动创建会议并发送邀请，(2) 日程同步——监听/查询日历变更并同步，(3) 会议背景预置——会前自动拉取相关飞书文档和会议纪要。激活场景：用户提到安排会议、约人开会、查空闲时间、日程协调、会议邀请、预置背景资料、会前准备、查日历、创建日程、发日历邀请等。也适用于自然语言如帮我约张三开会、查一下这周谁有空、下午3点有个会帮我准备资料等请求。通用 Skill，任何 agent 均可调用。依赖飞书日历 v4 API 和飞书文档 API。" --- # 日程协办虾 — 飞书日历智能协作 ## 执行策略（按优先级） ### 🥇 优先级 1：飞书插件工具（openclaw-lark） 检查环境是否安装了 `openclaw-lark` 插件。该插件提供以下原生工具： | 工具名 | 核心能力 | |--------|---------| | `feishu_calendar_event` | 创建/查询/修改/删除日程、搜索日程、回复邀请 | | `feishu_calendar_freebusy` | 查询 1-10 个用户的空闲忙状态 | | `feishu_calendar_event_attendee` | 添加参会人、查看参会人列表 | | `feishu_calendar_calendar` | 查询/管理日历列表 | **判断条件**：当前环境中可用 `feishu_calendar_event` 工具时，直接使用插件工具完成所有日历操作，跳过优先级 2。 > ⚠️ 插件工具使用**用户身份**（user_access_token），需用户完成 OAuth 授权。如授权未完成，工具会自动引导用户授权。 **插件工具使用要点**（详见 [feishu-calendar SKILL](~/.openclaw/extensions/openclaw-lark/skills/feishu-calendar/SKILL.md)）： - 时间格式：ISO 8601（带时区），如 `2026-03-27T14:00:00+08:00` - `user_open_id` 必填：值取消息上下文的 SenderId（`ou_xxx`），确保发起人出现在参会人列表 - 参会人 ID 统一用 `open_id`（`ou_xxx` 格式） - 创建日程时可直接传 `attendees`（无需分两步） - `list` 操作自动展开重复日程，时间区间不超过 40 天 ### 🥈 优先级 2：API 脚本方式 当飞书插件未安装或不可用时，退化为使用 API 脚本。 **前置要求**： - 环境变量 `FEISHU_APP_ID`、`FEISHU_APP_SECRET` - 应用后台已开启 `calendar:calendar` 权限 - 详见 [references/feishu-calendar-api.md](references/feishu-calendar-api.md) - 脚本：[scripts/feishu-calendar.sh](scripts/feishu-calendar.sh) > ⚠️ API 脚本方式使用 `tenant_access_token`（应用身份），只能操作应用日历，无法查询用户 freebusy 或读取用户个人日历。 --- ## 工作流 ### 工作流 1：创建会议并邀请成员 触发：用户要创建会议、安排日程、约人开会 **步骤：** 1. **解析请求** — 提取：参与者（姓名/open_id）、会议主题、开始时间、结束时间、会议描述 2. **查询参与者 open_id** — 如只有姓名，通过 `feishu_search_user` 查找 3. **查空闲（可选但推荐）** — 创建前查询参会人是否有时间冲突 4. **创建日程** — 按优先级选择： - **插件方式**：调用 `feishu_calendar_event` with action=create - **脚本方式**：先获取 token + 日历 ID → 创建 event → 单独添加 attendees 5. **输出摘要** — 会议时间、主题、参会者、日程链接 **关键注意（仅脚本方式）**： - `visibility` 必须是字符串 `"default"`，不能是数字 `0` - `timestamp` 必须是秒级时间戳字符串（如 `"1774596600"`） - 创建 event 不接受 `attendees`，必须先创建再单独添加 - 插件方式无此限制，可直接传 attendees ### 工作流 2：查询空闲时间 触发：用户要找时间开会、查某人有空没 **步骤：** 1. **确认参与者** — 收集需要查询的用户的 open_id 2. **确定时间范围** — 默认查询未来 5 个工作日 3. **查询忙闲** — 按优先级选择： - **插件方式**：调用 `feishu_calendar_freebusy`（支持 1-10 人批量查询） - **脚本方式**：告知用户需要 OAuth 授权，引导安装飞书插件 4. **计算共同空闲时段** — 取各参与者空闲时段交集，按会议时长筛选 5. **推荐时间** — 展示 2-3 个可用时段，工作日上午优先 > ⚠️ 查询用户空闲忙状态**必须使用用户身份**（插件方式）。脚本方式（tenant_access_token）无法查询用户 freebusy。 ### 工作流 3：日程查询与同步 触发：用户查日历 / "今天有什么会" / "这周安排" **步骤：** 1. **确定时间范围** — 按请求解析（今天/本周/指定日期） 2. **查询日程** — 按优先级选择： - **插件方式**：调用 `feishu_calendar_event` with action=list（自动展开重复日程） - **脚本方式**：用 `scripts/feishu-calendar.sh list` 或直接 curl 3. **格式化输出** — 按时间排序，简洁展示（北京时间） ### 工作流 4：修改/删除日程 触发：用户要改时间、取消会议、更新会议信息 **步骤：** 1. **定位日程** — 通过 search 或 list 找到目标 event_id 2. **执行操作** — 按优先级选择： - **插件方式**：`feishu_calendar_event` with action=patch/delete - **脚本方式**：直接 curl 对应 API 端点 3. **确认结果** — 反馈操作是否成功 ### 工作流 5：回复日程邀请 触发：用户要接受/拒绝/暂定某个会议邀请 **步骤：** 1. **获取 event_id** — 从日程列表中找到目标日程 2. **回复** — 调用 `feishu_calendar_event` with action=reply，传 `rsvp_status`（accept/decline/tentative） > ⚠️ 回复邀请仅插件方式支持（需要用户身份）。 ### 工作流 6：会议背景预置 触发：会议即将开始 / 用户要求准备会议资料 / "帮我看看XX会议的相关文档" **步骤：** 1. **识别会议** — 从用户消息或日历中获取会议信息 2. **关键字提取** — 从会议主题提取核心关键词 3. **搜索相关文档** — 搜索飞书云文档、知识库、云空间文件 4. **整理背景摘要** — 文档标题、链接、摘要，按相关性排序 5. **输出** — 结构化背景资料清单 --- ## 关键规则 - **时间格式统一**：内部处理用 `Asia/Shanghai` (UTC+8)，展示用北京时间（"下午3点"），不展示 UTC - **插件优先**：有飞书插件时必须优先使用插件工具，退化为 API 脚本时明确告知用户限制 - **先查空闲再创建**：创建会议前尽量查 freebusy 避免时间冲突 - **去重优先**：创建前检查是否已有相同时间/主题的会议 - **对外操作先确认**：创建日程、邀请参会人等操作需先与用户确认细节 ## 插件工具速查 | 用户意图 | 工具 | action | 必填参数 | 强烈建议 | |---------|------|--------|---------|---------| | 创建会议 | feishu_calendar_event | create | summary, start_time, end_time | user_open_id, attendees | | 查日程 | feishu_calendar_event | list | start_time, end_time | - | | 改日程 | feishu_calendar_event | patch | event_id | start_time/end_time | | 搜日程 | feishu_calendar_event | search | query | - | | 回复邀请 | feishu_calendar_event | reply | event_id, rsvp_status | - | | 删日程 | feishu_calendar_event | delete | event_id | - | | 查空闲 | feishu_calendar_freebusy | list | time_min, time_max, user_ids[] | - | | 邀请参会人 | feishu_calendar_event_attendee | create | calendar_id, event_id, attendees[] | - | | 查日历列表 | feishu_calendar_calendar | list | - | - | ## API 脚本速查（备选方案） | 操作 | 方法 | 端点 | 说明 | |------|------|------|------| | 获取 tenant token | POST | [REDACTED_SECRET] | 应用身份认证 | | 获取主日历 | GET | `/calendar/v4/calendars/primary` | tenant 下返回应用日历 | | 创建日程 | POST | `/calendar/v4/calendars/{cal_id}/events` | 不含 attendees | | 添加参会人 | POST | `/calendar/v4/calendars/{cal_id}/events/{evt_id}/attendees` | 创建后单独调用 | | 查询日程 | GET | `/calendar/v4/calendars/{cal_id}/events?start_time=&end_time=` | 秒级时间戳 query 参数 | | 更新日程 | PATCH | `/calendar/v4/calendars/{cal_id}/events/{evt_id}` | | | 删除日程 | DELETE | `/calendar/v4/calendars/{cal_id}/events/{evt_id}` | | Base URL: `https://open.feishu.cn/open-apis` > 详细 API 参考见 [references/feishu-calendar-api.md](references/feishu-calendar-api.md)


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)