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

使用Webhook向Python服务器推送Google Calendar数据时遇问题

Google Calendar Webhook 400错误修复指南

一、400错误的核心原因

你的Flask服务器返回400,大概率是Google推送的请求格式和你预期的不一致,导致request.json解析失败。Postman测试正常是因为你发的是标准JSON,但Google Calendar的推送通知有特殊结构:

  • 不会直接发送事件详细内容,只会传递资源变化的元信息
  • 部分场景下,Google会用application/x-www-form-urlencoded格式发送请求,而非你默认预期的JSON格式

二、修复Webhook服务器代码

修改Flask代码,兼容不同请求格式,同时捕获解析异常(必须返回200状态码,否则Google会重复推送):

from flask import Flask, request, jsonify
import json

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    try:
        # 先尝试JSON解析,失败则处理表单格式
        if request.is_json:
            data = request.get_json()
        else:
            # Google推送可能通过表单的message字段传递JSON数据
            data = json.loads(request.form.get('message'))
        
        print("收到的通知元数据:", data)
        
        # 关键:需要自行调用Google API拉取最新事件内容
        if 'resourceUri' in data:
            print(f"需从该地址获取更新资源: {data['resourceUri']}")
        
        return jsonify({"status": "success"}), 200
    except Exception as e:
        print(f"解析请求出错: {str(e)}")
        # 必须返回200,避免Google反复重试推送
        return jsonify({"error": str(e)}), 200

app.run(host='0.0.0.0', port=8000)

三、明确Google推送逻辑

别指望Google直接发送事件详情,它的Webhook仅负责“提醒资源发生变化”:

  1. 推送返回的resourceUri或resourceId是关键标识
  2. 你需要用已配置的Google API服务,调用events.list或events.get接口拉取最新事件数据

四、优化推送通道配置

你之前的watch请求加了timeMin和timeMax,这会限制推送仅关注该时间范围内的事件。若要监听所有事件变化,需删除这两个参数,同时延长TTL(避免通道频繁过期):

# 修改后的watch请求
result = service.events().watch(
    calendarId=calendar_id,
    body={
        "id": webhook_id,       
        "type": "web_hook",
        "address": webhook_url,
        "params": {
            "ttl": "86400"  # 改为1天,无需频繁重建通道
        }
    }
).execute()

五、可选:验证推送来源(提升安全性)

为防止恶意请求,可验证Google的请求签名:

  • 从请求头获取X-Goog-Signature和X-Goog-Channel-ID
  • 使用你的客户端密钥验证签名(具体逻辑参考Google官方文档)

六、测试步骤

  1. 重启修改后的Flask服务器
  2. 重新创建推送通道(之前的60秒TTL已过期)
  3. 修改或新增日历事件,查看服务器控制台输出,确认能正常接收元数据
  4. 根据元数据中的标识,调用API拉取最新事件内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:55:23