axios调用Twilio API发媒体消息报Message body not provided错
问题排查结果
返回Message body not provided错误是三个代码问题共同导致的:
- axios配置项使用错误:axios发送请求时,请求体对应的配置字段是
data而非body,当前代码写的body: new URLSearchParams(...)不会被axios识别,实际发送给Twilio的是完全空的请求体,服务端读不到任何提交参数。 - 请求头Content-Type值错误:表单urlencoded格式的正确MIME类型是
application/x-www-form-urlencoded,代码中配置的x-www-form-urlencoded是无效值,即使参数传对了服务端也无法正常解析表单内容。 - 接口参数规则不符合Twilio要求:调用Conversations消息发送接口时,
Body字段为强制必填项,即使发送纯媒体消息、不需要附带文本内容,也需要显式传入Body: ''(空字符串),仅传MediaSid会被接口判定为参数缺失。
修复方案
调整后可正常运行的axios请求代码如下:
await axios({ url: `https://conversations.twilio.com/v1/Services/${convoServiceSid}/Conversations/${stringSenderId}/Messages`, method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, auth: { username: subActServiceSid, password: subActAuthToken }, // 用data字段传请求体,同时补充必填的空Body参数 data: new URLSearchParams({ MediaSid: 'ME58052d0b6e178ace30a0dbb617ffec2c', Body: '' }) }).then(res => { console.log("Twilio媒体消息发送返回结果", res.data) })
补充说明:子账号场景下使用带
/Services/{serviceSid}前缀的服务级别接口路径写法是正确的,不需要改回文档示例中的全局路径。
内容的提问来源于stack exchange,提问作者KingJoeffrey
相关产品推荐
相关产品推荐

