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

Google Calendar推送通知请求体为空?问题排查咨询

Google Calendar Webhook推送体为空问题解决

你的当前配置

const response = await calendar.events.watch({
    auth: authClient,
    calendarId: 'primary',
    requestBody: {
      id: 'calendar-watch-' + Date.now(),
      type: 'web_hook',
      address: 'https://my-webhook-url.com',
      params: {
        ttl: '86400' // 24 hours in seconds
      }
    }
  });

问题核心

Google Calendar的Webhook推送本身就不会在POST请求体中携带事件详情,它的作用只是告知你「目标日历有事件发生了变化」,具体的事件更新内容需要你主动调用API拉取。你收到的x-goog-resource-id等请求头才是关键信息。

正确处理步骤

  • 提取关键请求头:收到推送时,从请求中获取x-goog-resource-uri、x-goog-channel-id、x-goog-resource-id这几个字段
    • x-goog-resource-uri:指向发生变化的日历资源,可直接用于API请求
    • 另外两个字段用于验证推送合法性,确保请求来自Google而非伪造
  • 主动拉取事件变化:调用Calendar API的events.list接口,传入以下参数:
    • calendarId:目标日历ID(比如你的primary)
    • updatedMin:设置为上次拉取的时间戳,只获取该时间之后更新的事件
    • 利用服务账号的授权发起请求,获取具体的事件创建/修改/删除信息
  • 权限补充检查:确保服务账号已被授予目标日历的访问权限(即使有全域委派,也需要在日历的共享设置中添加服务账号邮箱并赋予相应权限)
  • 优化推送配置:可以在watch请求的requestBody中添加token字段,用于标识不同的订阅(比如区分多个日历的推送),方便后续处理:
    requestBody: {
      // ... 现有配置
      token: 'primary-calendar-watch-token'
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:57:06