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

Twilio REST API v2持续返回400错误请求,如何用fetch解决?

Zapier中用Fetch调用Twilio Studio API出现400 Bad Request的修复方案

核心问题排查与修复点

  • Content-Type与请求体不匹配
    你当前设置Content-Type: multipart/form-data,但请求体是JSON.stringify处理后的JSON字符串,两者完全不兼容。Twilio Studio执行API支持两种请求格式:

    • 用JSON请求体时,需将Content-Type设为application/json
    • 用表单格式时,需将请求体转为x-www-form-urlencoded或FormData格式(Twilio大部分API更推荐这种)
  • Authorization认证格式错误
    Basic认证要求是AccountSID:AuthToken拼接后做base64编码,你写的{SID:Secret}格式错误,必须替换成实际的你的Twilio账号SID:你的AuthToken再编码。

  • Parameters参数处理错误(若启用)
    如果要传递Parameters,不需要额外用JSON.stringify包裹:

    • JSON格式请求体直接传对象即可
    • 表单格式请求体则需要把Parameters转为JSON字符串后作为表单值传递
  • 变量声明与错误处理缺失
    output未用let/const声明,属于全局变量;且fetch报错时output会变成undefined,后续访问output.status会抛错,必须增加try/catch做错误捕获。


修复后的JSON格式代码示例

const func = async () => {
  // 替换为你的Twilio Flow SID
  const url = "https://studio.twilio.com/v2/Flows/你的Flow ID/Executions";
  let phone = "+1" + "目标用户手机号";
  phone = phone.replace(/-/g, '');
  console.log('running');

  try {
    // 替换为你的Twilio Account SID和Auth Token
    const auth = Buffer.from('你的AccountSID:你的AuthToken').toString('base64');
    const response = await fetch(url, {
      method: 'POST',
      body: JSON.stringify({
        To: phone,
        From: '+1你的Twilio手机号',
        // 启用Parameters直接传对象即可
        Parameters: {
          item_num: "A11113232",
          agent: "Joel"
        }
      }),
      headers: {
        'Authorization': `Basic ${auth}`,
        'Content-Type': 'application/json',
        'Cache-Control': 'no-cache'
      },
    });

    console.log('响应状态:', response.status);
    // 打印响应内容,Twilio会返回具体错误信息帮助排查
    const responseBody = await response.json();
    console.log('响应内容:', responseBody);
  } catch (err) {
    console.error('请求错误:', err);
  }
}

func();

修复后的表单格式代码示例(更推荐)

const func = async () => {
  const url = "https://studio.twilio.com/v2/Flows/你的Flow ID/Executions";
  let phone = "+1" + "目标用户手机号";
  phone = phone.replace(/-/g, '');
  console.log('running');

  try {
    const auth = Buffer.from('你的AccountSID:你的AuthToken').toString('base64');
    const formData = new FormData();
    formData.append('To', phone);
    formData.append('From', '+1你的Twilio手机号');
    // 表单格式下Parameters需要转为JSON字符串
    formData.append('Parameters', JSON.stringify({
      item_num: "A11113232",
      agent: "Joel"
    }));

    const response = await fetch(url, {
      method: 'POST',
      body: formData,
      headers: {
        'Authorization': `Basic ${auth}`,
        'Cache-Control': 'no-cache'
        // 用FormData无需手动设置Content-Type,系统会自动生成正确格式
      },
    });

    console.log('响应状态:', response.status);
    const responseBody = await response.json();
    console.log('响应内容:', responseBody);
  } catch (err) {
    console.error('请求错误:', err);
  }
}

func();

额外排查建议

  1. 确保所有占位符(Flow ID、手机号、Account SID、Auth Token)都替换为实际有效值
  2. 打印响应内容,Twilio的400错误会返回具体的错误字段,能快速定位问题
  3. 登录Twilio控制台查看请求日志,获取更详细的错误追踪信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:55:26