【问题标题】:Responding to Google Calendar API's push notifications with Google Apps Script使用 Google Apps 脚本响应 Google Calendar API 的推送通知
【发布时间】:2018-08-21 17:20:57
【问题描述】:

每当我拥有的一系列日历发生更改时,我想使用 Google Apps 脚本更新 Google 电子表格并使用 Gmail API 发送电子邮件。

Google Calendar push notifications 可以与 Google App Script 一起使用,还是需要其他某种平台?

我愿意学习任何必要的东西。我了解接收通知需要域名。

感谢您的帮助!

【问题讨论】:

  • “推送通知”是什么意思?到什么?您可以使用 Apps 脚本将任意负载发送到任意网址。如果所述有效负载和所述端点与将 GCM / FCM 发送给您安装的 Android/iOS 应用程序的相关最终用户所需的相应,那么确定。
  • @tehhowch 他指的是push notifications as supported by the Calendar API,而不是网络推送通知(最近几年左右才出现)。
  • @dimu 工作表和 gmail api 标签的使用也让我认为 OP 希望应用程序通知用户,而不是看起来像 webhook 处理程序;)

标签: google-apps-script push-notification google-calendar-api


【解决方案1】:

很遗憾,使用 Google App Script 无法实现这一点(至少在撰写本文时是这样)。

您可以尝试创建一个 Google Apps Script(GAS) 网络应用程序并将其网址用作日历 API 推送通知的端点。但是,日历 API 发送的推送通知的数据负载驻留在自定义 HTTP 标头中,目前无法从 GAS Web 应用程序访问。

还有其他解决方案,但它们会让您远离 GSuite 的生态系统,而且它们不太可能是免费的。但是,如果您在编程技能方面能够胜任这项任务并且您有能力在平台上进行金钱投资,那么您应该查看 Google Cloud Functions。它是一种付费播放的基于云的 mirco 服务,但如果您保持在每月免费使用配额之下,它实际上是免费的。

【讨论】:

  • 感谢您的反馈。我真的不介意移出 GSuite 的生态系统。我可以选择同步资源吗?developers.google.com/calendar/v3/sync
  • 从未需要使用该功能,因此无法提供任何指导。
【解决方案2】:

如果您熟悉 GAS(Google Apps 脚本),这是一项非常简单的任务,下面的代码只是所需内容的一部分(event.getLastUpdated 是诀窍),但它提供了如何完成任务的想法你需要。我也有这个要求,它对我来说很好......

设置包含日历详细信息的电子表格,并将您的日历信息发布到其中...

  function getCalendars()
  {
   var cal = CalendarApp.getCalendarsByName(calName)[0]; // loop here with all your Calenders
   var events = cal.getEvents( date1, date2 ); // start date & end date
   for (var x in events ) 
   { 
      var event = events[x];
      var title = event.getTitle();
      var created = event.getDateCreated();
      var lastMod = event.getLastUpdated();
      var lastRead = getLastModifiedFromSpreadSheet();
      var diff= daysDiff(lastMod, read);
      if (diff > 0) {putNewDateInSpreadsheet(); doYourStuff;)
    }
  }

  function daysDiff(a, b) { // change to hours or minutes if required
  var oneDay = 1000 * 60 * 60 * 24;
  return Math.floor(b.getTime() / oneDay) - Math.floor(a.getTime() / oneDay);
  }

【讨论】:

  • 感谢代码,但我最终在编辑日历时使用了通知触发器来运行函数。
  • @BrandonPillay 您是如何让该通知生效的?
  • @JordanRhea 如果我没记错的话,我使用了日历触发器构建器developers.google.com/apps-script/reference/script/…,但如果这不是正确的方法,请告诉我。我将通过我的文件找到我使用的方法。顺便说一句,您创建了一些很棒的内容。
  • @JordanRhea 我可能使用了可安装的触发器。 developers.google.com/apps-script/guides/triggers
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 2019-08-22
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
相关资源
最近更新 更多