You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script新增日历事件自动添加嘉宾失败问题求助

问题解决方案

错误根源

你的代码报错Event object is undefined,核心原因是Google Apps Script的日历变更触发器事件参数e并不包含calendarEvent属性,ChatGPT生成的代码误用了不存在的参数结构,导致无法获取事件对象。

日历变更触发器触发时,事件参数e的正确结构包含以下字段:

  • changeType:事件变更类型(created/updated/deleted)
  • calendarId:触发事件的日历ID
  • eventId:变更的日历事件ID

你需要通过calendarId和eventId调用Calendar API来获取实际的事件对象,而非直接从e中读取。

修正后的代码

function addGuestToNewMeetings(e) {
  var targetCalendarId = 'bob@companyA.com'; // 目标日历ID
  var guestEmail = 'bob@companyB.com';

  try {
    // 跳过删除事件的情况,避免无效调用
    if (e.changeType === 'deleted') {
      console.log('事件已删除,无需处理');
      return;
    }

    // 验证触发的日历是否为目标日历
    if (e.calendarId !== targetCalendarId) {
      console.log('触发事件的日历非目标日历,跳过');
      return;
    }

    // 通过Calendar API获取事件对象
    var event = Calendar.Events.get(targetCalendarId, e.eventId);

    if (!event) {
      console.error('无法获取事件对象');
      return;
    }

    // 检查事件标题是否匹配
    if (event.summary.includes('Systems Review Scheduled')) {
      // 检查嘉宾是否已存在
      var hasGuest = event.attendees?.some(attendee => attendee.email === guestEmail);
      
      if (!hasGuest) {
        // 添加嘉宾
        event.attendees = event.attendees || [];
        event.attendees.push({ email: guestEmail });
        Calendar.Events.update(event, targetCalendarId, e.eventId);
        console.log('已添加嘉宾:', guestEmail);
      } else {
        console.log('嘉宾已存在:', guestEmail);
      }
    } else {
      console.log('事件标题不匹配:', event.summary);
    }
  } catch (error) {
    console.error('处理出错:', error.toString());
  }
}

关键注意事项

  • 启用Calendar API:在脚本编辑器中,点击「扩展」→「Apps Script」→「服务」→「添加服务」,找到并启用「Calendar API」;
  • 触发器验证:确认你设置的触发器是「日历事件变更」类型,且关联的日历ID与代码中的targetCalendarId一致;
  • 避免手动测试:手动点击运行按钮时,事件参数e为空,会触发额外错误,需通过实际创建/修改目标日历中的事件来测试触发器。

内容的提问来源于stack exchange,提问作者Matt M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:52:47