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

求助:Google Apps Script对接消息API时如何实现带文件的POST请求

求助:Google Apps Script对接消息API时如何实现带文件的POST请求

嘿,我完全懂你现在的困境——之前发文字消息顺顺当当,一加上文件就卡壳了对吧?其实问题核心在于请求格式不匹配:你之前用的是application/json格式提交数据,但这个API要求的是multipart/form-data(就是curl里--form对应的表单格式),JSON根本没法正确传递文件内容。

我给你调整一下代码,改成符合API要求的表单提交方式,重点处理文件的Blob传递:

function sendMessageWithFile(telephone, message, fileId) {
  var url = "https://apinew.socialhub.pro/api/sendMessage";
  telephone = telephone.toString();
  
  // 从Google Drive获取目标文件的Blob对象(这是GAS里处理文件上传的关键)
  var targetFile = DriveApp.getFileById(fileId);
  var fileBlob = targetFile.getBlob();
  
  // 构建multipart/form-data格式的表单参数
  var payload = {
    "api_token": "MY_TOKEN", // 替换成你的真实token
    "phone": telephone,
    "message": message,
    "file": fileBlob // 直接传入Blob,GAS会自动处理成表单文件字段
  };
  
  var config = {
    muteHttpExceptions: true,
    method: "post",
    payload: payload
    // 这里不需要手动设置Content-Type!GAS检测到Blob时会自动生成正确的multipart头
  };
  
  var response = UrlFetchApp.fetch(url, config);
  var data = JSON.parse(response.getContentText());
  
  Logger.log(data); // 可以查看日志调试API返回的信息
  return response;
}

几个关键说明:

  • fileId是你要发送的文件在Google Drive中的ID(可以从文件的URL末尾获取,比如https://drive.google.com/file/d/[这里就是fileId]/view)
  • 不用再做JSON序列化了,直接把所有参数放进payload对象,文件字段直接传Blob就行,和curl里的file=@"文件路径"效果一致
  • 一定要删掉之前手动设置的Content-Type: application/json,否则会和GAS自动生成的表单头冲突

如果还是报错,建议打开Logger.log(response.getContentText())看看API返回的具体错误信息,大概率是文件类型不兼容、token/手机号格式问题这类小细节~

备注:内容来源于stack exchange,提问作者user3347814

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:33:15