该技能为通过 CData Connect AI 查询 Google 日历数据提供专门指引,构建于 connect-ai-base 技能之上。connect-ai-base 负责发现流程、错误恢复、SQL 方言和查询命名约定,因此使用前需要先定位并阅读 connect-ai-base;若当前环境未加载、未启用或未安装它,应立即停止任务,告知用户需要该技能并请其安装启用后再继续。该技能替代 GoogleCalendar 驱动的 getInstructions,不应再对该驱动调用 getInstructions,识别出 Google 日历连接后应直接进入模式发现步骤(getTables / getColumns)。
用途与数据模型 Google 日历是单模式驱动,模式名为 GoogleCalendar。数据围绕“归属于日历的事件”组织。主要表包括:AllCalendars(跨所有日历的事件联合视图,是查询事件的主表,用 CalendarId 限定范围)、Calendars(日历元数据:标题、描述、时区、颜色、可见性及当前用户对各日历的 AccessRole)、AccessControlRules(各日历的共享/权限 ACL 规则)、Colors(日历与事件可用颜色 ID 及其十六进制值)、EventsAttachments(事件附件元数据,含 Drive 文件 ID、URL、标题、MIME 类型)、UserSettings(当前用户的日历偏好),以及每个可访问日历对应的一张动态生成表。关键关系:AllCalendars.[CalendarId] 对应 Calendars.[Id];AccessControlRules.[CalendarId] 对应 Calendars.[Id];EventsAttachments.[EventId] 对应 AllCalendars.[Id];重复事件实例的 [RecurringEventId] 指向父事件的 [Id]。
主要能力 该驱动对每个账户可访问的日历都暴露为一张动态生成的表,名称取自日历标题(如 [Holidays in United States]、[Test Calendar]),常含空格或特殊字符,必须用方括号引用。读取事件有两种方式:一是查询 AllCalendars 联合视图并用 CalendarId 过滤(绝大多数情况应优先采用,稳定且有文档);二是直接查询已知的具名单日历表。枚举可用日历应使用 Calendars 表,而非扫描 getTables 输出(后者会被单日历表和测试表淹没)。
使用方式 典型查询流程:识别连接(未知时调用 getCatalogs 并按 DRIVER = 'GoogleCalendar' 过滤)→ 识别日历(默认 CalendarId = 'primary',可用 Calendars 表列出)→ 从 AllCalendars 查询事件(必须带 [StartDateTime] 日期过滤,否则大日历会超时,并加 [CalendarId] 过滤以提升性能)→ 精化(按 Status、与会者、全天/定时、重复等过滤)→ 执行操作(用 ImportEvent 或 QuickAddEvent 创建事件,用 GetAvailability 检查空闲,用 MoveEvent 移动,或用 UPDATE 修改 AllCalendars 事件)。
常用查询与存储过程 文档给出多个模式:查询下周事件、仅查询已确认的即将到来事件、按与会者邮箱(AttendeesEmails 为逗号分隔,需用 LIKE 匹配)、查找某天下午的空档、列出可访问日历、查询某日历的共享规则。存储过程包括:QuickAddEvent(用自然语言字符串创建事件,@CalendarId 和 @Summary 必填)、ImportEvent(添加完整事件,@CalendarId 与 @ICalUID 必填,ICalUID 需唯一;@Attendees、@ReminderOverrides、@ConferenceDataEntryPoints 只接受 JSON 数组或临时表输入;@Recurrences 为管道分隔的 RRULE/EXRULE/RDATE/EXDATE 行,不含 DTSTART/DTEND;附件通过 @AttachmentsFileUrls 引用添加并使用 @SupportsAttachments = true,没有文件上传参数;ImportEvent 没有通知参数)、GetAvailability(返回一个或多个日历的空闲/忙碌窗口,三个参数均必填,@EntityIds 为逗号分隔的日历或组标识)、MoveEvent(跨日历移动事件,@CalendarId、@EventId、@Destination 必填)、DownloadAttachments(下载事件附件内容,云端兼容调用需省略 @LocalFile 和 @FileStream 并设 @Encoding = 'BASE64',结果以 base64 返回在 FileData 列)。Subscribe* 与 StopWatchingResources 系列(订阅事件、ACL、日历列表、设置变更及取消监听)需要可公开访问的回调地址且不返回可查询数据,不适合在交互式 Connect AI/MCP 会话中使用,应忽略。
写入与限制 驱动支持在 AllCalendars(及单日历表)上执行 INSERT 和 UPDATE,前提是连接与已认证 Google 用户的 AccessRole 允许。更新事件时应同时用 [Id] 和 [CalendarId] 限定;重排事件时更新起止时间并设 [SendNotification] = 1。应优先使用原地 UPDATE 以保留事件历史与与会者响应;创建事件应优先用 ImportEvent / QuickAddEvent 而非原始 INSERT。若写入被阻止,可能是 CData 端连接处于只读模式,或用户对目标日历缺少 writer/owner 权限(可查 Calendars.[AccessRole]),应引导用户开启写入权限并确认日历权限。重复规则使用 RFC5545,常见形式如每工作日 RRULE:FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR、每周指定日 RRULE:FREQ=WEEKLY;BYDAY=MO,WE、每月首个周一 RRULE:FREQ=MONTHLY;BYDAY=1MO,可用 ;COUNT=10 限量、;UNTIL=20251231T000000Z 结束,多条规则/例外用管道分隔。查询事件必须带日期过滤,否则大日历会超时。