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

使用Google App Script调用Draftable API POST接口遇400错误求助

解决Draftable API POST请求返回400错误的问题

首先看你收到的错误响应:

{"left":["This field is required."],"right":["This field is required."]}

虽然你在代码里定义了left和right参数,但服务器根本没接收到这些数据,问题出在UrlFetchApp的请求参数结构上,具体原因和修复方法如下:

核心问题

在Google Apps Script中,POST请求的表单数据必须放在options的payload属性里,而不是直接作为顶级属性和method、headers同级。你现在把left和right直接写在options根节点,服务器完全读取不到这些参数,所以返回了“字段必填”的错误。

另外,当使用multipart/form-data格式传递嵌套结构(比如left包含source_url等子属性)时,需要按照Draftable API的要求,用类似left[source_url]的键名来构造表单字段,而不是直接传嵌套对象(UrlFetchApp不会自动把嵌套对象转换成正确的表单格式)。

修正后的代码

function POST() {
  // 构造符合要求的表单 payload
  var payload = {
    "left[source_url]": "https://api.draftable.com/static/test-documents/paper/left.pdf",
    "left[display_name]": "old-example.docx",
    "left[file_type]": "pdf",
    "right[source_url]": "https://api.draftable.com/static/test-documents/paper/right.pdf",
    "right[display_name]": "newer-example.docx",
    "right[file_type]": "pdf"
  };

  var options = {
    "method": "POST",
    "headers": {
      "Accept": "application/json",
      "Authorization": "Token 你的实际Token", // 替换成真实的API Token
    },
    "payload": payload,
    "muteHttpExceptions": true // 可选,方便调试时查看完整响应
  };

  try {
    var result = UrlFetchApp.fetch("https://api.draftable.com/v1/comparisons", options);
    var params = JSON.parse(result.getContentText());
    Logger.log("Comparison identifier: " + params.identifier);
  } catch (e) {
    Logger.log("请求错误: " + e.toString());
    Logger.log("响应内容: " + result.getContentText());
  }
}

关键调整说明

  • 把所有请求参数移到payload对象中,并且用left[xxx]、right[xxx]的格式来定义嵌套字段,这样服务器才能正确解析。
  • 移除了手动设置的Content-Type: multipart/form-data,因为当payload是普通对象时,UrlFetchApp会自动生成正确的multipart请求头(包括boundary),手动设置反而可能导致格式错误。
  • 添加了muteHttpExceptions: true和try-catch块,方便调试时查看完整的错误响应内容,避免只看到截断的信息。
  • 确保Authorization里的Token是你实际的API密钥,替换掉占位符。

这样调整后,服务器就能正确接收到left和right的参数,应该就能成功创建对比任务了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:22:09