使用Google Apps Script发送谷歌日历邀请时遇API调用错误求助
谷歌日历邀请发送问题排查与解决
问题描述
想用Google Apps Script发送谷歌日历邀请,但代码执行时持续报错:
- 最初将代码最后一行从
Calendar.Events.patch(event, calendar, event.id, args);修改为calendar.createEvent.patch(resource, calendarId, eventId, args)后,提示**"calendar.createEvent.patch is not a function"** - 查阅相关问题未找到解决方法,尝试方案后又出现**"GoogleJsonResponseException: API call to calendar.events.patch failed with error: Not Found"**
- 目标日历已共享给我,我拥有查看所有事件、创建及修改事件的权限
测试代码
第一段测试代码
function testnotification(){ var calendarId = "####"; var eventId = "###"; var email = "###@gmail.com" addGuestAndSendEmail(calendarId,eventId,email) } function addGuestAndSendEmail(calendarId, eventId, newGuest) { var calendar = CalendarApp.getCalendarById(calendarId); var event = calendar.getEventById(eventId); var attendees = []; attendees.push({email: newGuest}); var resource = { attendees: attendees }; var args = { sendUpdates: "all" }; calendar.createEvent.patch(resource, calendarId, eventId, args); }
第二段测试代码
function testNotification(){ var calendarId = "###"; var eventId = "###"; var email = "###@gmail.com" addGuestAndSendEmail(calendarId,eventId,email) } function addGuestAndSendEmail(calendarId, eventId, newGuest) { Calendar.Events.patch({ attendees: [{ email: newGuest }] }, calendarId, eventId, { sendUpdates: "all" }); }
问题分析与解决建议
第一个错误原因:API调用方式错误
calendar.createEvent.patch是完全错误的写法——CalendarApp.getCalendarById()返回的是CalendarApp类实例,它没有createEvent.patch方法。patch是**日历高级服务(Calendar Advanced Service)**的专属方法,只能通过Calendar.Events.patch()调用,不能和CalendarApp的实例混用。
第二个错误"Not Found"的可能原因及解决
- 事件ID格式错误
- 确认
eventId是完整事件ID:如果是从CalendarApp的event.getId()获取的ID,需注意其格式为日历ID@google.com_事件ID,可以直接使用完整字符串,或者去掉前缀只保留后面的事件ID部分。
- 确认
- 日历ID验证
- 确保
calendarId正确,可从日历设置的「集成日历」中复制,格式通常为xxx@group.calendar.google.com或个人邮箱地址。
- 确保
- 高级服务未启用
- 使用
Calendar.Events.patch()必须先启用日历高级服务:- 打开脚本编辑器,点击菜单栏「资源」→「高级Google服务」
- 找到「Calendar API」,开启开关后点击「确定」
- 使用
- 权限范围确认
- 重新运行脚本,确保授权弹窗中所有权限都已通过,避免因权限不足导致的访问失败。
修正后的可用代码
推荐使用日历高级服务写法,同时保留原有参会者(避免覆盖):
function testNotification() { var calendarId = "你的日历ID"; var eventId = "你的完整事件ID"; var email = "guest@example.com"; addGuestAndSendEmail(calendarId, eventId, email); } function addGuestAndSendEmail(calendarId, eventId, newGuest) { // 获取现有参会者,避免覆盖原有名单 var existingEvent = Calendar.Events.get(calendarId, eventId); var attendees = existingEvent.attendees || []; attendees.push({ email: newGuest }); // 更新事件并发送通知 Calendar.Events.patch( { attendees: attendees }, calendarId, eventId, { sendUpdates: "all" } ); }
提示:若无需保留原有参会者,可直接设置
attendees: [{ email: newGuest }],但会替换所有现有参会者,谨慎使用。
内容的提问来源于stack exchange,提问作者user12736831
相关产品推荐
相关产品推荐

