Google 日历 api 推送通知:401 - 未经授权的 WebHook 回调通道

Google calendar api Push notification: 401 - Unauthorized WebHook callback channel

问题的任何解决方案。这似乎不起作用

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "push.webhookUrlUnauthorized",
    "message": "Unauthorized WebHook callback channel: https://xxxxx"
   }
  ],
  "code": 401,
  "message": "Unauthorized WebHook callback channel: https://xxxxx"
 }
}

无论如何都要解决这个问题

要在 Google 日历中使用 Push Notifications,请确保您遵循此处的说明:

  1. 在 Google Dev Console 中注册您接收 URL 的域。转到凭据并单击域验证以进行 webhook 设置。

例如,如果您打算使用https://yourdomainexample.com/notifications作为您的接收URL,您需要注册https://yourdomainexample.com。 设置接收 URL 或 "Webhook" 回调接收器。

  1. 这是一个 HTTPS 服务器,用于处理资源更改时触发的 API 通知消息。

  2. 为您要监视的每个资源端点设置一个通知通道。

通道指定通知消息的路由信息​​。作为频道设置的一部分,您可以确定要接收通知的具体 URL 位置。每当频道的资源发生变化时,Google 日历 API 会向该 URL.

发送一条通知消息作为 POST 请求

您也可以查看此 SO thread 以获取更多参考。

此修复帮助我解决了问题。我没有在 google 应用程序授权的重定向 url 中提到回调 link。 添加后,我能够生成监视事件并且能够接收推送通知消息

推送通知需要您验证域所有权,因此不能在 API 资源管理器中创建,因为它不提供将请求与您已验证的项目相关联的方法所有权。如果您使用项目凭证,这可以在 OAuth Playground 中完成,详情如下:

  • 配置API项目:

    1. https://console.developers.google.com/project/ 访问您的 API 项目。
    2. 确保您已根据 https://developers.google.com/admin-sdk/directory/v1/guides/push#registering-your-domain 中的说明注册了您网站的 HTTPS 版本。
    3. 从“产品和服务”菜单(左上角的三个水平线),select“API 管理器”,然后是“已启用 APIs”选项卡,并确保启用适当的 API。
    4. Select“凭据”,然后从“添加凭据”下拉列表中,select“Oauth 客户端 ID”。
    5. 如果之前没有配置,系统会提示您配置同意屏幕,因此请点击“配置同意屏幕”。如果是,请输入您的电子邮件地址、产品名称,然后点击“保存”。
    6. Select 'Web Application',然后输入客户端 ID 的名称。
    7. 在'Authorized Javascript Origins'下输入'https://developers.google.com.'
    8. 在 'Authorised redirect URIs' 下,输入“https://developers.google.com/oauthplayground”。
    9. 点击“创建客户端 ID”。
  • 配置 OAuth 游乐场:

    1. 导航到 https://developers.google.com/oauthplayground/
    2. 点击右上角的“OAuth 2.0 配置”(齿轮图标)。
    3. 选中“使用您自己的 OAuth 凭据”。
    4. 将 API 项目的“凭据”页面中的“客户端 ID”粘贴到“OAuth 客户端 ID”中。
    5. 将 API 项目的“凭据”页面中的“客户端密码”粘贴到“OAuth 客户端密码”中。
    6. 点击“关闭”。
  • 授权 API 请求:

    1. 在“输入您自己的范围”中输入https://www.googleapis.com/auth/admin.directory.user
    2. 点击“授权 APIs”。
    3. 系统将提示您允许 API 访问您的域,因此请单击“允许访问”。
    4. 您将看到响应“HTTP/1.1 302 Found。”点击“交换令牌授权码”。
    5. 您应该看到“HTTP/1.1 200 OK”。稍后页面将下拉到下一部分。
    6. Select POST 作为 'HTTP method.'
    7. 点击'Enter request body',输入您的要求,例如:

      { "id": "c887ce64-adc8-4007-952c-a172c376b30d", "type": "web_hook", "address": "https://example.com/watch" }

    8. 完成后点击'Close'。

    9. 输入您要监控的资源的 URI,将 {calendarId} 替换为适当的日历 ID,例如: https://www.googleapis.com/calendar/v3/calendars/user@example.com/events/watch
    10. 点击'Send the request.'

    11. 您应该会收到类似于以下内容的回复:

      { "resourceId": "DmuNd7MI-w7qwW1FxDNf_pdqk7Y", "kind": "api#channel", "expiration": "1507327087000", "id": "c887ce64-adc8-4007-952c-a172c376b30d", "resourceUri": "https://www.googleapis.com/calendar/v3/calendars/user@example.com/events?maxResults=250&alt=json" }

注意:其他 API 的推送通知,例如 Directory API,可能有其他参数。查看相关参考文档以了解详细信息。