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

如何获取共享Google Calendar中更新事件的操作账户信息

问题详情

前提

我们正在监控团队内部共享的Google Calendar,因此结合「Google Apps Script日历变更触发器」与Google Calendar API,开发了可推送事件创建、更新、删除操作通知的机器人。

问题

目前调用Google Calendar API的Events.get接口仅能获取两类账户信息:事件所有者、事件创建者。
这就导致如果账户A创建了事件后账户B对其进行编辑,当前无法获取账户B的信息。请问是否有包含API或其他服务在内的方案,可获取共享Google Calendar中更新事件的账户信息?

现有代码

function doMain(e) {
  Logger.log(e);
  var items = onCalendarEdit(e.calendarId);

  for (var i = 0; i < items.length; i++) {
    var Event = Calendar.Events.get(e.calendarId, items[i].id);
    EventProcessing(Event);
  }
}



function onCalendarEdit(CalId) {
  var calendarId = CalId 
  var summary = Calendar.Calendars.get(calendarId).summary
  var properties = PropertiesService.getScriptProperties();
  var nextSyncToken = properties.getProperty("syncToken_" + summary);
  var optionalArgs = {
    syncToken: nextSyncToken
  };
  var events = Calendar.Events.list(calendarId, optionalArgs);
  Logger.log(JSON.stringify(events));
  var nextSyncToken = events["nextSyncToken"];
  properties.setProperty("syncToken_" + summary, nextSyncToken);
  return events.items;
}

function EventProcessing(Event) {
/* bot : Processing to throw a notification 
*/
}
解决方案

方案1:Google Workspace场景(推荐)

使用Google Workspace Admin SDK的审计日志接口,域内所有共享日历的操作都会被全量记录,你可以通过筛选对应日历ID、事件ID的操作记录,直接获取到操作人邮箱、操作类型、操作时间等完整数据,不受Calendar API本身返回字段限制。
实现注意事项:

  • 先为你的Apps Script项目开通Admin SDK Reports API服务
  • 每次触发日历变更拿到事件ID后,调用该接口拉取该事件最近的操作记录,匹配对应的操作人信息即可
  • 需要给执行脚本的账号开通审计日志查看权限

方案2:非Workspace个人共享日历场景

通过给事件新增自定义扩展属性存储操作人信息,你可以在变更触发时,获取当前操作的用户邮箱,写入到事件的共享扩展属性中,后续查询时直接读取该属性即可。
实现注意事项:

  • 该方案仅适用于所有编辑日历的用户都有脚本执行权限的场景
  • 需要将日历触发器设置为安装型触发器,保证可以正常获取到操作用户身份

代码优化示例

function doMain(e) {
  Logger.log(e);
  var items = onCalendarEdit(e.calendarId);
  // 获取当前操作人邮箱
  const operator = Session.getActiveUser().getEmail();

  for (var i = 0; i < items.length; i++) {
    var Event = Calendar.Events.get(e.calendarId, items[i].id);
    // 将操作人写入事件共享扩展属性,方便后续查询
    if (!Event.extendedProperties) Event.extendedProperties = {shared: {}};
    Event.extendedProperties.shared.lastModifiedBy = operator;
    Calendar.Events.update(Event, e.calendarId, items[i].id);
    // 通知逻辑直接传入操作人参数
    EventProcessing(Event, operator);
  }
}

function onCalendarEdit(CalId) {
  var calendarId = CalId 
  var summary = Calendar.Calendars.get(calendarId).summary
  var properties = PropertiesService.getScriptProperties();
  var nextSyncToken = properties.getProperty("syncToken_" + summary);
  var optionalArgs = {
    syncToken: nextSyncToken
  };
  var events = Calendar.Events.list(calendarId, optionalArgs);
  Logger.log(JSON.stringify(events));
  var nextSyncToken = events["nextSyncToken"];
  properties.setProperty("syncToken_" + summary, nextSyncToken);
  return events.items;
}

function EventProcessing(Event, operator) {
/* bot : 通知逻辑直接使用operator作为操作人即可
*/
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:36:09