使用Apps Script查询Google Calendar预约及Workspace预约时段的方法
问题解答:通过Apps Script检索Google Calendar预约及潜在预约时段
可以实现,除了常规日程活动外,Google Calendar API对Workspace账号开放了预约时段(Appointment Schedule)的专属查询字段,你只需要在现有代码基础上适配对应接口参数即可。
前提条件
- 你使用的是Google Workspace账号,个人Google账号不支持预约时段的API调用权限
- 已在Apps Script项目中启用
Calendar高级服务,基础CalendarApp服务无法获取预约时段的专属字段
具体实现步骤
步骤1:启用Calendar高级服务
在Apps Script编辑器左侧点击「服务」,找到「Calendar」选项后点击添加即可。
步骤2:核心代码实现
以下代码可同时返回指定时间范围内的已确认预约、以及未被预订的潜在可预约时段:
function getCalendarAppointments() { // 配置查询参数 const calendarId = '你的日历ID,通常为你的Workspace邮箱地址'; // 示例查询范围为当前时间起未来30天,可按需修改 const startTime = new Date(); const endTime = new Date(startTime.getTime() + 30 * 24 * 60 * 60 * 1000); // 调用Calendar API拉取预约相关事件 const events = Calendar.Events.list(calendarId, { timeMin: startTime.toISOString(), timeMax: endTime.toISOString(), singleEvents: true, orderBy: 'startTime', // 过滤查询类型:包含预约计划表、具体可预约槽两类事件 eventTypes: ['appointmentSchedule', 'appointmentSlot'] }); const bookedAppointments = []; // 已创建的确认预约 const availableSlots = []; // 潜在可预约时段 events.items.forEach(event => { // 筛选已被用户预订的预约 if (event.eventType === 'appointmentSlot' && event.attendees?.length > 0) { bookedAppointments.push({ title: event.summary, startTime: event.start.dateTime, endTime: event.end.dateTime, bookerEmail: event.attendees[0].email }); } // 筛选未被预订的空闲预约槽 if (event.eventType === 'appointmentSlot' && !event.attendees) { availableSlots.push({ startTime: event.start.dateTime, endTime: event.end.dateTime, duration: `${(new Date(event.end.dateTime) - new Date(event.start.dateTime)) / 60000}分钟` }); } }); // 输出结果,可按需对接Google Sheet等其他服务 console.log('已确认预约:', bookedAppointments); console.log('可预约时段:', availableSlots); }
注意事项
只有你作为创建者的预约计划表才可以提取完整的可预约时段列表,其他用户共享给你的预约计划表需要对方授予编辑权限才能查询完整数据。
- 已被标记为「繁忙」的非预约类日程不会被计入可预约时段结果,和Calendar预约功能的自动排期规则一致
- 如需批量导出结果,可直接通过
SpreadsheetApp服务将上述两个结果数组写入Google Sheet存储
内容的提问来源于stack exchange,提问作者JS Henney
相关产品推荐
相关产品推荐

