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

调用Google Apps Script的cURL转JS后请求200但脚本未执行如何解决?

问题原因与修复方案

核心错误原因

  • 请求体JSON格式非法:你手动拼接的JSON字符串中devMode键未添加双引号,不符合标准JSON语法规范。终端cURL工具对JSON格式容错性较高,可正常解析发送该请求,但Google Script API对浏览器端请求会做严格格式校验,参数解析失败后不会触发对应Apps Script函数,因此会出现HTTP状态码200但功能未执行的情况。
  • 缺少执行结果校验逻辑:Google Apps Script API的HTTP状态码200仅代表接口成功接收请求,不代表函数执行成功。执行过程中的权限错误、参数错误等信息都会放在响应体的error字段中,不会改变HTTP状态码,你之前的代码未做响应解析,无法感知到这类错误。
  • 潜在配置问题:如果JSON修正后仍无法正常执行,需确认以下配置:访问令牌拥有Apps Script执行权限、Google Drive读写权限;Web应用域名已在Google Cloud项目的OAuth同意屏幕中登记;Apps Script的部署配置(执行身份、可访问范围)与令牌权限匹配。

修正后的JavaScript代码

const url = "https://script.googleapis.com/v1/scripts/### script ID ###:run";

const xhr = new XMLHttpRequest();
xhr.open("POST", url);

xhr.setRequestHeader("Authorization", "Bearer ### access token ###");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    console.log("状态码:", xhr.status);
    const res = JSON.parse(xhr.responseText);
    console.log("完整响应内容:", res);
    // 捕获接口返回的执行错误
    if (res.error) {
      console.error("函数执行出错:", res.error);
      return;
    }
    if (res.done) {
      console.log("函数执行成功,返回结果:", res.response.result);
    }
  }
};

// 用JSON.stringify自动生成标准JSON,避免手动拼写语法错误
const requestBody = JSON.stringify({
  "function": "##function name##",
  "parameters": ["##MainDocID##", ["##Doc1ID##", "##Doc2ID##", "##Doc3ID##"]],
  "devMode": false
});

xhr.send(requestBody);

后续排查建议

  1. 运行修正后的代码,查看控制台打印的完整响应内容,根据具体错误提示调整参数或权限配置。
  2. 确认Apps Script部署类型为「API可执行」,且调用时填写的部署版本号正确。
  3. 确认访问令牌的OAuth权限范围包含https://www.googleapis.com/auth/script、https://www.googleapis.com/auth/drive等必要权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:06:03