【问题标题】:Set up Google Calendar V3 API Push notification via my Google Apps script通过我的 Google Apps 脚本设置 Google Calendar V3 API 推送通知
【发布时间】:2015-05-20 05:41:07
【问题描述】:
  1. 我想使用 Google CAL API v3 观看多个日历,从而将所有这些事件从这些日历更新到主日历,所以我需要使用 WATCH/PUSH 通知 以便无论何时是那些 cal 中的一个新事件,这些事件应该在我的主日历中自动推送/创建。
  2. 但是,我面临以下问题:在 APIs Explorer 下。大多数服务返回 200 OK,除了 Watch 请求不起作用

服务 > Calendar API v3 > calendar.events.watch

我收到了以下请求和响应

请求

POST https://www.googleapis.com/calendar/v3/calendars/mailid%40domain.com/events/watch?key={YOUR_API_KEY}
{
}

回应

400 OK
 {
"error": {
 "errors": [
  {
   "domain": "global",
   "reason": "required",
   "message": "entity.resource"
  }
 ],
 "code": 400,
 "message": "entity.resource"
}
}

然后我按照以下 google 文档进行操作 https://developers.google.com/google-apps/calendar/v3/push

注册您的域:

第 1 步:验证您是否拥有该域

第 2 步:注册您的域

我在 Google 网站管理员工具中验证了我的域/通知。 我经过验证的域如下所示:

http://my-domain.com/notifications

并在 Google Developer ConsolePUSH 下的 webhook 中添加了我的域名,如 doc 中所述。

这里有什么我遗漏的吗,请问我的域的 SSL 证书是否存在问题,我如何至少在 API 资源管理器中进行测试,以便我得到返回码 200 OK。之后,我需要通过 Google Apps 脚本实现这个push/WATCH

是否有任何关于应用程序脚本使用推送通知的文档。

任何提示,提示都会对我有所帮助,在过去的 1 周里,我已经厌倦了这种尝试和错误的方法。

【问题讨论】:

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


    【解决方案1】:

    在您发布的请求中,正文为空。在文档中有一个示例,您需要提供日历 ID、web_hook 和其他信息:

    {
      "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID.
      "type": "web_hook",
      "address": "https://example.com/notifications", // Your receiving URL.
      ...
      "token": "target=myApp-myCalendarChannelDest", // (Optional) Your channel token.
      "expiration": 1426325213000 // (Optional) Your requested channel expiration time.
      }
    

    在创建推送通知时添加此信息。

    要使用应用程序脚本,您可以将URLfetch 服务与方法“fetch()”一起使用,然后您需要提供参数提及并将调用作为 POST。

    希望这会有所帮助。

    更新:我会写在这里有更多的空间。

    推送通知以这种方式工作。 - 您创建一个带有 id、您要观看的资源、您要接收通知的地址和可选参数的推送通知。

    -如果成功,服务器将监视该资源,并在对资源进行更改时向描述更改的请求中提到的地址发送通知。

    -服务器需要知道你收到了通知,所以从#1中提到的地址,你需要告诉服务器你收到了返回HTTP 200响应的通知。 (为此,您需要一个能够监听通知并发送响应的应用)

    为您的问题 1.- 由于服务器会向 url(您的 web_hook 地址)发出 HTTP 请求,Google 要求它是安全的,这就是为什么它必须是 HTTPS。

    2.- 是的,如果没有该网址,您将无法收到通知。

    3.- Google 还需要验证您提供的 url 是否确实是您的,因此您需要提供 url,然后 Google 会为您提供一个文件,您必须使该文件在该 url 中可用,然后 Google将调用 url 并将检索该文件。然后您可以证明该 URL 是您的。我不确定此步骤是否可以使用应用程序脚本完成。您实际上可以将脚本部署为 Web 应用程序,但我不确定您是否可以将其用于此目的。(here 您可以找到更多信息和验证 url 的不同方法)

    4.- 那是你自己创造的。在文档中指出了对它的建议。

    我希望这能澄清你的问题。

    您可以在此处查看push notifications 的工作原理,此示例适用于 Drive,但概念相同。

    【讨论】:

    • 感谢 Gerardo,我试过了,但又遇到了同样的问题。请在以下链接中查看我的执行记录:docs.google.com/spreadsheets/d/…
    • 嗨 Gerardo,请检查我在以前的 cmets 中的执行记录,任何更新提前谢谢
    • 您仍然需要发送所需的参数。我看到您发送了类型和地址,但 ID 也是必需的。
    • 亲爱的 Gerardo,请告诉我,过去 1 周我们都被困住了: 1. 我们是否严格需要在 GDC 的 PUSH 下的 webhook 中添加基于 SSL 的通知 URL? 2. 我们是否还需要返回 URL 来获取通知? 3. 在哪里创建此通知。 URL("example.com/notifications"),因为我正在使用 Google 应用程序脚本。4. 在哪里获得通道 ID?请真的帮助我们,G CAL API 文档很糟糕,我们无法理解。提前谢谢,跨度>
    • 感谢您的详细回答 Gerardo,请参阅下面的链接 drive.google.com/drive/folders/0B_f0d7mdbV_UYWh4cDBEdndSZE0/… 我不知道我错过了什么。可能是我的脚本有问题。/错误应用。如果您有任何示例 php 文件或其他脚本,请与我分享通知 URL、接收 URL、..etc?所以请帮助,抱歉一直困扰您。
    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多