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

Google Apps Script调用Botmaker API POST请求发送WhatsApp消息

Botmaker WhatsApp接口Google Apps Script实现方案

你遇到的401鉴权失败错误,从响应头返回的reason-phrase可以直接定位:服务端未从请求中读取到有效的access-token值。另外UrlFetchApp构造multipart/form-data请求有特殊规则,手动设置Content-Type头会导致请求解析异常,以下是可直接运行的实现代码。

核心实现函数

/**
 * 调用Botmaker v3接口发送WhatsApp消息/附件
 * @param {string} accessToken Botmaker平台生成的有效access-token
 * @param {string} chatChannelNumber 已绑定的WhatsApp渠道号码(纯数字,带国家码)
 * @param {string} platformContactId 消息接收方的WhatsApp号码(纯数字,带国家码)
 * @param {Blob=} fileBlob 待发送的文档附件,传入Google Drive/Sheet导出的Blob对象即可
 * @param {string=} messageText 消息附带的文本内容
 * @returns {Object} 接口返回的状态码与响应数据
 */
function sendBotmakerWhatsApp(accessToken, chatChannelNumber, platformContactId, fileBlob, messageText) {
  const API_URL = 'https://go.botmaker.com/api/v1.0/message/binary/v3';

  // 构造表单参数,对应cURL中-F标记的字段
  const payload = {
    chatPlatform: 'whatsapp',
    chatChannelNumber: chatChannelNumber,
    platformContactId: platformContactId,
    mediaType: 'document'
  };

  // 按需加入附件和文本参数
  if (fileBlob) payload.file = fileBlob;
  if (messageText) payload.messageText = messageText;

  const options = {
    method: 'post',
    headers: {
      'Accept': 'application/json',
      'access-token': accessToken
    },
    payload: payload,
    muteHttpExceptions: true // 避免接口报错时脚本直接中断,方便拿到错误信息调试
  };

  const response = UrlFetchApp.fetch(API_URL, options);
  const responseText = response.getContentText();

  // 调试日志,正式上线可注释
  console.log('响应状态码:', response.getResponseCode());
  console.log('响应内容:', responseText);

  return {
    status: response.getResponseCode(),
    data: responseText ? JSON.parse(responseText) : null
  };
}

测试调用示例

function testMessageSend() {
  // 替换为你自己的真实参数
  const ACCESS_TOKEN = '你的Botmaker真实access-token';
  const CHANNEL_NUMBER = '你的WhatsApp渠道号,例如8613xxxxxxxxx';
  const TARGET_CONTACT = '接收消息的用户号码,例如8613xxxxxxxxx';
  // 示例:读取Google Drive中存储的业务报表作为附件,替换为实际文件ID即可
  const attachFile = DriveApp.getFileById('你的Google Drive文件ID').getBlob();

  const result = sendBotmakerWhatsApp(
    ACCESS_TOKEN,
    CHANNEL_NUMBER,
    TARGET_CONTACT,
    attachFile,
    '本月业务数据报表,请查收'
  );
}

关键注意事项

  • 不要手动在headers中添加Content-Type: multipart/form-data:当payload传入普通键值对对象时,UrlFetchApp会自动生成带正确boundary分隔符的multipart请求头,手动设置反而会丢失boundary导致服务端无法解析表单参数。
  • 鉴权头access-token必须传入平台生成的有效值,不要使用cURL示例中的myAccessToken占位符,注意不要在token前后加多余的引号、空格。
  • 所有号码参数均为纯数字格式,带国家码,不要添加+、-等特殊符号。
  • 若仅发送纯文本消息,可将mediaType字段值改为text,无需传入fileBlob参数。
  • 首次运行脚本时会弹出授权申请,同意脚本的外部网络请求、Google Drive访问权限即可正常执行。

内容的提问来源于stack exchange,提问作者Gerzayn Fuentes Campos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:48:24