安装与下载
1 ClawHub CLI
从源直接安装技能的最快方式。
npx clawhub@latest install caly-managing-bookings
2 手动安装
将技能文件夹复制到以下位置之一
~/.openclaw/skills/
{'/skills/'}
优先级:工作区 › 全局 › 内置
3 提示词安装
将此提示词复制到 Openclaw 即可自动安装。
请帮我使用 Clawhub 安装 skill-caly-managing-bookings。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
更倾向于下载?
获取包含原生技能文件的ZIP压缩包。
基本信息
caly-managing-bookings
安装指南
- ClawHub CLI
从源直接安装技能的最快方式。
npx clawhub@latest install caly-managing-bookings - 手动安装
将技能文件夹复制到以下位置之一
全局模式
~/.openclaw/skills/
工作区
/skills/
优先级:工作区 > 本地 > 内置 - 提示词安装
将此提示词复制到 OpenClaw 即可自动安装。
请帮我使用 Clawhub 安装 caly-managing-bookings。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
更倾向于下载?
获取包含原生技能文件的ZIP压缩包。
下载技能 (.zip)
什么是
Caly 预约管理器可帮助 AI 代理查看即将举行、过去、已取消、未确认或定期重复的预约,并按参与者、活动类型或时间范围查找特定会议。它使用 Caly 的 MCP 工具获取预约详情和可重新安排的时段,同时按用户时区显示会议时间。
此技能优先确保变更安全:重新安排或取消前必须获得明确确认,会说明参与者将收到通知,并使用 Caly 的取消两次调用确认流程。作为 Openclaw Skills 的一部分,它将自然语言日历请求转化为清晰、可审计的工作流程。
应用场景
询问明天或其他时间范围内安排了哪些会议。
查找包含特定参与者(例如 Sam 或 Alex)的预约。
查看过去、已取消、未确认或定期重复的预约。
查看预约的参与者、主持人、地点和变更详情。
查找空闲时段,并将已确认的预约移至可用时间。
查看会议详情并明确确认操作后取消会议。
只有在用户明确要求取消定期系列中剩余预约时,才取消后续预约。
工作原理
连接到 Caly MCP 服务器,并确定可用的工具调用模式:直接调用工具,或通过 caly:search_tools 和 caly:execute_typescript 使用 Code Mode。
调用 caly:whoami 获取账户时区。
使用 caly:list_bookings 搜索预约,并应用相关的状态、参与者、活动类型或时间范围筛选条件;持续翻页,直到覆盖所请求的范围。
显示匹配的预约及其标题、参与者、状态和时区。用户要求查看某个预约的详情时,使用 caly:get_booking。
重新安排时,准确识别一项预约,使用 caly:find_available_slots 获取可用时段,并提出返回结果中的开始时间。
重新安排前,概述预约以及新旧时间对应的时区,说明参与者将收到通知,并等待用户明确答复“是”。然后调用 caly:reschedule_booking,并报告新的预约 UID。
取消时,先调用一次 caly:cancel_booking 获取确认令牌,展示预约和参与者通知详情,并等待用户明确答复“是”。然后使用相同参数和令牌再次调用该工具,并报告结果。
配置指南
按照 Caly 连接器代码库中的说明安装并连接 Caly MCP 服务器。首次使用 Caly 时需要通过 OAuth 登录。
确认代理可以使用 Caly 工具。如果没有显示 caly 工具,请先完成服务器连接,再使用此技能。
使用可用的工具接口:
如果直接列出了 caly:list_bookings 等工具,请按名称调用。
如果只列出了 caly:search_tools 和 caly:execute_typescript,请使用 Code Mode:先搜索工具,再在 caly:execute_typescript 中以 external_ 的形式调用,并返回其结果。
如果直接调用返回“Tool not found”,请改用 Code Mode,而不要重试直接调用。
工作原理
按照 Caly MCP 服务器安装和 OAuth 设置说明操作:
https://github.com/DevinoSolutions/mcp-servers/tree/main/caly#install
数据架构
此技能使用 Caly MCP 服务器返回的预约记录;它不定义本地存储格式,也不生成文件。
数据或字段 用途
status 筛选即将举行、过去、已取消、未确认或定期重复等预约。
attendeeEmail, attendeeName 查找与参与者相关的预约。
eventTypeId 按活动类型筛选。
afterStart, beforeEnd 定义预约搜索的时间范围。
take, skip 控制分页;检查 pagination.hasNextPage,以确定是否还有更多结果。
bookingUid 标识要查看详情、重新安排或取消的预约。
start 重新安排的开始时间,以 UTC ISO 8601 格式提供,并从可用时段结果中选择。
reschedulingReason, cancellationReason 预约变更的可选说明。
confirmToken 第一次取消调用返回的令牌;仅将其用于同一项预约,并且必须在用户查看取消摘要后使用。
预约详情 可能包括参与者、主持人、地点以及取消或重新安排的信息。
显示时间时,务必同时注明时区。重新安排会创建具有新 UID 的预约;取消操作不可撤销。
高级特性
支持直接调用 MCP 工具,也支持通过
caly:search_tools
caly:execute_typescript
使用 Code Mode。
可按预约状态、参与者、活动类型和时间范围搜索,并明确处理分页。
提出重新安排方案前会检查实时可用情况,并可通过
bookingUidToReschedule
将预约现有时段纳入考虑。
使用两次调用的取消流程,并采用针对特定预约的确认令牌。
在进行会通知参与者的变更前要求明确批准,以保障用户掌控权。
支持定期预约;只有在用户明确要求时才会取消后续预约。
name: managing-bookings description: "Reviews and changes the user's Caly bookings: lists upcoming, past, cancelled or unconfirmed meetings, looks one up by attendee or time, reschedules it to a free slot, or cancels it through Caly's two-step confirmation. Use when the user asks 'what meetings do I have tomorrow', 'show my bookings with Sam', 'move my call with Alex to Friday', 'reschedule the 3pm', 'cancel my meeting with this client', or 'who cancelled this week'. Reads freely; reschedule and cancel notify attendees, so they are confirmed first." Caly: managing bookings
Find the right booking, then read, move or cancel it without surprising anyone.
Connecting and calling the tools
Every tool in this skill comes from the caly MCP server, the Caly connector, and is written here as caly:.
Tools listed by name: call them directly, for example caly:list_bookings.
Only caly:search_tools and caly:execute_typescript listed (Code Mode, the default): call caly:search_tools first, then call each tool inside caly:execute_typescript as external_ (for example external_list_bookings); the program must return its result.
"Tool not found": switch to the Code Mode route instead of retrying the direct call.
No caly tools at all: Caly is not connected yet. Add the server as shown in https://github.com/DevinoSolutions/mcp-servers/tree/main/caly#install; it signs in with OAuth on first use.
A refused call throws an Error whose message starts with its code, for example CONFIRMATION_REQUIRED:.
Tools you will use
caly:whoami: the account and its time zone.
caly:list_bookings: the user's bookings, filtered by status (upcoming, past, cancelled, unconfirmed, recurring), attendeeEmail, attendeeName, eventTypeId, or a window (afterStart, beforeEnd). Paginated with take and skip; check pagination.hasNextPage.
caly:get_booking: one booking by bookingUid, with attendees, hosts, location and any cancellation or rescheduling details.
caly:find_available_slots: free start times; pass bookingUidToReschedule when moving a booking so its own slot counts as free.
caly:reschedule_booking: moves a booking to a new start (UTC ISO 8601), with an optional reschedulingReason. Caly creates a new booking with a new uid and notifies the attendees.
caly:cancel_booking: cancels a booking and notifies its attendees. It cannot be undone and takes two calls (see the workflow).
Workflow
Reviewing bookings
Call caly:whoami for the time zone, then caly:list_bookings with the filters that match the question ("tomorrow" → status: ["upcoming"] plus a window; "with Sam" → attendeeName or attendeeEmail).
Follow pagination.hasNextPage with skip until the window is covered, or tell the user how many more there are.
List each booking with its time in the user's time zone, title, attendees and status. Call caly:get_booking only when the user wants one booking's details.
Rescheduling
Identify exactly one booking and its uid. If several match, list them and ask which one.
Call caly:find_available_slots for its event type and the new day, passing bookingUidToReschedule. Use only a start time from the result.
Confirm with the user: the booking, the old time, the new time (in the user's and the attendee's time zone), and that Caly will notify the attendees. Wait for an explicit yes.
Call caly:reschedule_booking once. Report the new time and the new uid.
Cancelling
Identify exactly one booking and its uid, and ask for a reason if the user has one.
Call caly:cancel_booking with the bookingUid (and cancellationReason). The first call does not cancel: it returns CONFIRMATION_REQUIRED with a confirmToken.
Show the user which booking will be cancelled (title, time, attendees) and that the attendees will be emailed. Wait for an explicit yes.
Call caly:cancel_booking again with the SAME arguments plus the confirmToken. Report that it is cancelled.
Rules
Never reschedule or cancel without the user's explicit yes to a summary that names the booking.
Never pass a confirmToken the user has not seen the booking for, and never reuse one for a different booking.
Set cancelSubsequentBookings only when the user clearly asks to cancel the rest of a recurring series.
Always state the time zone next to every time you show.
品牌提及研究
Caly 会议预订