通过Twilio MMS发送audio/wav文件的兼容问题及解决方案咨询
场景与报错说明
PHP 8.0环境下调用Twilio SMS/MMS API,尝试将第三方系统生成的audio/wav格式语音邮件以MMS形式转发至指定手机号时触发类型不支持错误,对应错误日志:
Msg "Attempt to retrieve MediaUrl returned an unsupported Content-Type." EmailNotification "false" contentType "audio/wav" url "https://URL/test.wav" LogLevel "ERROR"
核心待解答问题:
- 同类问题是否有可落地的变通解决方案
- Twilio不支持
audio/wav格式MMS是否完全由运营商侧传输限制导致
解答
可行变通方案
- 服务端转码后发送
Twilio MMS支持audio/mp3、audio/mp4等压缩音频格式,发送前在服务端将wav文件转码为支持的格式即可。PHP环境可通过php-ffmpeg扩展调用FFmpeg能力完成转码,基础转码命令参考:ffmpeg -i origin_voicemail.wav -codec:a libmp3lame -q:a 2 target.mp3。注意转码后控制文件大小在600KB以内,避免后续走到运营商侧因MMS大小限制被拦截。 - 改用Twilio可编程语音直接推送
如果不强要求以MMS附件形式投递,可以直接调用Twilio可编程语音API呼叫目标手机号,用户接通后直接播放原wav语音内容,不需要用户下载附件,投递成功率更高,也不用额外做转码处理。 - 短信附访问链接兜底
如果不想做转码、也不需要走语音呼叫,可以把wav文件上传到公网可访问的存储服务生成短链接,通过普通短信把链接发送给用户,用户点击链接即可在线收听或下载文件。注意使用正规域名生成链接,避免被运营商判定为垃圾短信拦截。
格式不支持的原因
Twilio对wav格式的限制是两层规则共同作用的结果,并非完全由运营商导致:
- 第一层是Twilio平台自身的前置校验:Twilio拉取
MediaUrl对应的媒体资源时,会首先校验返回的Content-Type,不在官方支持列表内的格式会直接拦截返回错误,你日志里的报错就是在这一层触发的,请求根本没有下发到运营商网络。 - 第二层是运营商侧的实际兼容限制:全球不同地区运营商的MMS标准并不统一,wav是无压缩原始音频格式,同音质下文件体积是mp3的5-10倍,绝大多数运营商单条MMS的媒体大小限制在300KB-1MB区间,wav很容易超出阈值;同时不同品牌、系统版本的手机对wav格式MMS的解析兼容性极差,Twilio直接将wav移出支持列表,本质是为了减少跨网络、跨终端的投递失败概率。
内容的提问来源于stack exchange,提问作者DatTrish
相关产品推荐
相关产品推荐

