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

在Google Cloud配置webhook自动触发代码监听Google Sheets新数据

方案选型结论

你列的三个GCP服务里,只有Cloud Run完全适配当前场景,另外两个和webhook承载需求完全无关:

  • Cloud Build API:面向CI/CD构建场景,核心能力是按流水线执行构建、打包、测试任务,无常驻HTTP请求承载能力,不适合用来接业务触发请求
  • Cloud Deploy:面向多环境应用发布流转场景,用来管理部署流水线、版本发布节奏,和表格事件触发脚本的需求不匹配
  • Cloud Run:Serverless容器服务,按实际请求量计费,自动扩缩容,无需手动维护服务器,和Google Workspace(Sheets)、GCP其他服务原生打通,是承载这类轻量webhook的最优选择。

附当前运行环境截图:
当前GCP运行环境截图

具体配置步骤

1. 改造现有Python脚本为HTTP服务

你原有读取表格、执行业务逻辑的代码可以直接复用,只需要加一层HTTP接口用来接收触发请求即可,用Flask写最小可用示例:

from flask import Flask, request
import gspread
# 导入你原有脚本依赖的其他库
app = Flask(__name__)

# --- 以下是你原有鉴权、初始化Sheets连接的代码,直接迁移过来即可 ---
# 例:服务账号鉴权初始化
SHEET_ID = "替换成你的Google表格ID"
WEBHOOK_TOKEN = "替换成你自己生成的随机复杂字符串,用来做接口鉴权"
gc = gspread.service_account(filename="service_account_key.json")
sheet = gc.open_by_key(SHEET_ID).sheet1

# 你原有实现的读取指定列、处理业务逻辑的函数
def process_new_rows():
    # 原有业务逻辑放这里,建议加上游标判断:只处理上次处理位置之后的新增行,避免重复执行
    pass
# --- 原有代码段结束 ---

# 新增webhook接口
@app.route("/sheet-trigger", methods=["POST"])
def trigger_handler():
    # 校验请求token,防止非法请求触发逻辑
    req_token = request.headers.get("X-Webhook-Token", "")
    if req_token != WEBHOOK_TOKEN:
        return "Unauthorized", 401
    # 执行业务逻辑
    process_new_rows()
    return "OK", 200

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)

同目录下新建requirements.txt,写入依赖:

flask==2.3.3
gunicorn==21.2.0
gspread==5.12.4
# 追加你原有脚本用到的其他依赖

同目录下新建Dockerfile用于容器化部署:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# 启动HTTP服务,监听Cloud Run默认要求的8080端口
CMD ["gunicorn", "--bind", ":8080", "--workers", "1", "main:app"]

2. 部署服务到Cloud Run

  • 打开GCP控制台,切换到你正在使用的项目,进入Cloud Run服务页面
  • 点击「创建服务」,选择「从源代码部署」,上传刚才写好的代码目录,区域选离你近的即可
  • 「认证方式」选择「允许未认证调用」,鉴权逻辑已经在代码里通过token实现,无需额外配置IAM权限
  • 高级设置里把请求超时调整到和你业务逻辑执行时长匹配(默认60秒,最长可设3600秒)
  • 等待部署完成,复制生成的服务公网地址,格式为https://<你的服务名>-<hash>.run.app

3. 配置表格变更触发规则

选下面任意一种方式即可,第二种配置成本最低:

  • 方式一(无代码配置):调用Google Drive Push Notification API,给目标表格文件注册watch规则,设置事件类型为文件内容更新,推送地址填https://<你的Cloud Run地址>/sheet-trigger,自定义请求头带上你之前设置的X-Webhook-Token即可
  • 方式二(低代码配置):打开目标Google表格,点击顶部菜单栏「扩展程序」->「Apps Script」,写入以下触发代码:
    function sendWebhook() {
      const options = {
        method: "post",
        headers: {
          "X-Webhook-Token": "你之前设置的WEBHOOK_TOKEN值"
        },
        muteHttpExceptions: true
      };
      UrlFetchApp.fetch("https://<你的Cloud Run地址>/sheet-trigger", options);
    }
    
    保存脚本后,点击左侧边栏「触发器」,新建触发器:触发函数选sendWebhook,事件来源选「来自电子表格」,事件类型根据你的数据新增场景选「编辑时」或「表单提交时」,保存并完成账号授权即可。
注意事项
  • 记得把你用的服务账号邮箱加到Google表格的共享列表里,授予至少查看权限,否则脚本读不到表格数据
  • 业务逻辑里建议加行号游标:比如把最后处理到的行号存在表格隐藏单元格、Cloud Firestore或者服务内存里,每次触发只处理游标之后的行,处理完更新游标,避免重复处理历史数据
  • Apps Script不要用简单触发器(直接命名函数为onEdit),简单触发器没有外网访问权限,必须用可安装触发器才能正常发请求到Cloud Run

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:48:26