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

Google Calendar API Watch已创建但无法推送变更通知,求解决方案

可能的解决方案
  • 处理Google的初始验证请求:创建Watcher时,Google会向你的Ngrok端点发送一个GET请求,携带hub.mode、hub.challenge、hub.verify_token参数。你的服务器必须直接返回hub.challenge的原始值作为响应体,且状态码为200,否则Google不会激活这个Watcher。即使Postman能正常访问,没处理这个验证逻辑的话,推送也不会触发。
  • 确认Ngrok域名与Watcher配置一致:免费版Ngrok每次重启会生成新域名,确保你代码里的address字段是当前Ngrok的有效域名,且没有拼写错误(比如末尾的斜杠是否正确)。如果需要长期稳定域名,建议使用Ngrok付费版的固定域名。
  • 检查API权限范围:确保SCOPES包含足够的权限,比如https://www.googleapis.com/auth/calendar(读写权限)或https://www.googleapis.com/auth/calendar.events(事件读写)。权限不足会导致Watcher无法获取日历变更并推送。
  • Watcher的续期管理:你设置的TTL是36000秒(10小时),到期后Watcher会自动失效。需要实现续期逻辑,在TTL到期前重新创建Watcher,或者设置更长的TTL(最大支持2592000秒,即30天)。
  • 查看Google API推送日志:登录Google Cloud Console,找到Calendar API的日志页面,查看是否有推送失败的记录(比如HTTP 4xx/5xx错误、超时),这能直接定位是Google未发送通知,还是你的端点接收异常。
  • 排查服务器安全策略:检查本地服务器的防火墙、安全组或WAF规则,是否拦截了Google的IP段请求。可以临时关闭安全规则测试,或者添加Google推送服务的IP到白名单。
  • 验证Webhook响应格式:确保你的端点在接收POST推送时,返回200 OK状态码,且响应体为空或符合Google要求。如果响应超时或状态码错误,Google会停止推送。
  • 检查凭证有效性:确认token.json中的凭证未过期,且包含有效的刷新token。如果凭证失效,即使Watcher创建成功,后续的变更推送也会失败。可以重新生成凭证测试。

你的代码参考

import json
import os.path
import uuid

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from scopes_ import SCOPES

def main():
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

    # Google Calendar API Events Watch接口
    service = build('calendar', 'v3', credentials=creds)
    channel = {
        'id': str(uuid.uuid4()),
        "address": 'https://687a-212-111-193-44.eu.ngrok.io/test_watch/',
        'type': 'web_hook',
        'params': {
            'ttl': '36000'
        }
    }

    res = service.events().watch(calendarId='primary', body=channel).execute()
    print(res)

if __name__ == '__main__':
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:01:37