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

使用Google Apps Script验证Zoom Webhook端点失败

解决Google Apps Script中Zoom Webhook端点验证失败的问题

问题分析

你的代码核心逻辑没问题,但在Google Apps Script(GAS)中直接返回JSON字符串不符合Web响应规范,Zoom无法正确识别响应格式;另外代码中sT变量未明确声明,这也可能导致签名计算错误。

修正后的代码

function doPost(e) {
  // 解析Zoom发送的验证请求
  const requestJSON = JSON.parse(e.postData.contents);
  const plainToken = requestJSON.payload.plainToken;
  // 替换为你在Zoom控制台获取的Webhook密钥
  const webhookSecret = "YOUR_ZOOM_WEBHOOK_SECRET";

  // 计算HMAC SHA256签名并转为十六进制字符串
  const signatureBytes = Utilities.computeHmacSha256Signature(plainToken, webhookSecret, Utilities.Charset.US_ASCII);
  const encryptedToken = signatureBytes
    .map(byte => {
      const value = byte < 0 ? 256 + byte : byte;
      return ("0" + value.toString(16)).slice(-2);
    })
    .join("");

  // 构造符合要求的响应内容
  const responseBody = {
    plainToken: plainToken,
    encryptedToken: encryptedToken
  };

  // 使用GAS标准方式返回JSON响应,确保状态码200和正确MIME类型
  return ContentService.createTextOutput(JSON.stringify(responseBody))
    .setMimeType(ContentService.MimeType.JSON);
}

关键修复点

  • 规范响应格式:GAS的doPost函数必须通过ContentService返回响应,设置正确的MIME类型为JSON,这样Zoom才能正确解析返回内容,同时默认返回状态码200。
  • 明确密钥变量:补充sT(改名为webhookSecret)的声明,替换为你实际的Zoom Webhook密钥,避免未定义错误。
  • 代码可读性优化:调整变量命名,让逻辑更清晰。

验证步骤

  1. 部署GAS脚本为Web应用:选择任何人,甚至匿名访问权限(Zoom Webhook请求为匿名),执行权限选择我(当前用户),部署类型选Web应用。
  2. 复制部署后的Web应用URL,配置到Zoom Webhook端点中。
  3. 在Zoom控制台触发验证,检查状态是否变为验证成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:00:55