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

Google Apps Script调用Facebook Graph API批量请求报错排查

解决Google Apps Script调用Facebook Graph API批量请求的错误

你遇到的“流量过多”错误属于误导性提示,实际是请求格式不符合Facebook批量API的要求。Facebook批量请求需要以表单形式提交,其中batch参数的值为JSON字符串,而非直接发送完整的JSON payload。

修改后的代码

function fetchFbBatchMe() {
  let fbApiKey = getTokenFB();
  // 构造batch请求数组并转为JSON字符串
  let batchJson = JSON.stringify([{
    method: 'GET',
    relative_url: 'me'
  }]);

  let params = {
    method: 'post',
    muteHttpExceptions: true, // 开启后可查看FB返回的真实错误详情
    headers: {
      'Authorization': fbApiKey // 无需手动设置Content-Type,UrlFetchApp会自动处理
    },
    payload: {
      batch: batchJson // 以表单字段形式提交batch参数
    }
  };

  try {
    let response = UrlFetchApp.fetch(FB_API_URL, params);
    let responseCode = response.getResponseCode();
    let responseText = response.getContentText();

    Logger.log('响应状态码: ' + responseCode);
    Logger.log('响应内容: ' + responseText);

    if (responseCode !== 200) {
      // 可根据FB返回的错误信息进一步排查问题
    }
  } catch (e) {
    Logger.log('请求异常: ' + e);
  }
}

关键修改说明

  • 移除手动设置的Content-Type:UrlFetchApp提交表单对象时,会自动设置Content-Type: application/x-www-form-urlencoded,这是Facebook批量API要求的标准格式。
  • 表单形式提交batch参数:将batch数组转为JSON字符串后,作为表单的batch字段提交,而非将整个batch对象转为JSON作为payload。
  • 开启muteHttpExceptions: true:即使返回非200状态码,也不会直接抛出异常,能获取到Facebook返回的真实错误信息,便于调试。

为什么Postman能正常运行?

Postman在发送请求时,若选择raw JSON格式,可能会自动转换为表单提交格式;或者Facebook API在某些场景下兼容JSON格式,但Google Apps Script的UrlFetchApp对请求格式要求更严格,必须严格遵循FB的API规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:44:52