关于通过Twilio向WhatsApp发送Polly语音及音频消息的技术问询
问题解答:Polly音频通过Twilio发送至WhatsApp的可行性与故障修复
首先明确:完全可以通过Twilio将Amazon Polly生成的文本转语音音频发送到WhatsApp,你的代码核心逻辑没问题,故障大概率出在音频文件的可访问性、格式合规性或Twilio的媒体校验环节,以下是具体排查和修复步骤:
1. 排查音频文件的可访问性
- Twilio需要能直接抓取你提供的
media_url,请先在浏览器中打开该URL,确认能直接下载并播放MP3文件:- 如果链接需要登录验证、token过期或权限限制,Twilio无法获取音频,导致发送失败。
- 建议为Firebase存储的文件生成长期有效的公开访问链接,或配置Firebase存储的IP白名单允许Twilio服务器访问(公开链接实现更便捷)。
2. 验证音频格式合规性
WhatsApp通过Twilio接收音频有明确要求,Polly生成的音频默认符合,但需确认:
- 格式:必须是MP3
- 比特率:64kbps-128kbps(Polly默认128kbps,符合要求)
- 采样率:44.1kHz或48kHz
- 文件大小:不超过16MB
3. 代码优化与调试
你的代码结构正确,可尝试以下调整:
- 暂时移除
body字段,单独发送音频:部分地区的WhatsApp客户端对文本+媒体的组合消息可能存在兼容性问题,先单独测试音频发送是否成功。 - 打印完整异常信息:捕获异常时输出
str(e)的完整内容,或直接查看Twilio控制台的消息日志,里面会有具体错误代码(比如12300代表无效媒体URL,12302代表媒体格式不支持)。
修正后的示例代码:
path = "https://firebasestorage.googleapis.com/v0/b/compartamosdemo-50264.appspot.com/o/10557652_confirmacion.mp3?alt=media&token=d22c70ba-b123-4670-8a11-4adef74b0699" message = "" try: # 先单独发送音频,排除文本干扰 message = client.messages.create( from_='whatsapp:+141....', # 替换为你的Twilio WhatsApp号码 to='whatsapp:+57319....', # 替换为接收方WhatsApp号码 media_url=[path] ) print(f"发送成功,消息SID: {message.sid}") except Exception as e: # 输出完整错误信息用于调试 error_detail = str(e) print(f"发送失败: {error_detail}") app.logger.error("Error en messages: %s", error_detail) return str(message)
4. 额外注意事项
- 如果是刚通过Polly生成的音频,确保已经成功上传到Firebase存储,且文件状态为“已完成”,避免使用未上传完成的临时链接。
- Twilio的媒体抓取有缓存机制,如果之前用了无效链接,建议更换新URL或等待缓存过期后再测试。
内容的提问来源于stack exchange,提问作者Andrés Darío Suárez Guarnizo
相关产品推荐
相关产品推荐

