使用Twilio向通话方流式传输音频时遇无效URL问题求助
Twilio音频流式传输错误(错误码11100)排查与解决
问题场景
- 已通过ngrok暴露本地服务,浏览器可正常访问生成的
stream_url /speak端点返回200状态码,但/stream_audio端点从未被触发- Twilio控制台报错码11100,提示“无效URL”
排查与解决步骤
- 强制使用HTTPS协议
Twilio要求所有Webhook和Stream URL必须使用HTTPS,本地开发时url_for默认生成HTTP地址,需手动指定HTTPS scheme:
stream_url = url_for('stream_audio', text=text, _external=True, _scheme='https')
这是触发11100错误的最常见原因,Twilio会直接拒绝HTTP请求。
确认ngrok地址有效性
免费版ngrok每次重启会生成新域名,需确保Twilio号码配置的Webhook地址是最新的ngrok地址。同时可通过Twilio控制台的Webhook测试工具直接调用stream_url,验证Twilio服务器能否正常访问该地址。处理URL参数编码问题
若text参数包含空格、标点等特殊字符,未编码的URL会被Twilio判定为无效。需对参数进行URL编码:
from urllib.parse import quote, unquote # 在generate_voice_response中编码参数 encoded_text = quote(text) stream_url = url_for('stream_audio', text=encoded_text, _external=True, _scheme='https') # 在stream_audio中解码参数 text = unquote(request.args.get('text', ""))
- 验证TwiML格式正确性
检查打印的TwiML,确保<Stream>标签的url属性是完整的HTTPS地址,无语法错误。正确的TwiML示例:
<Response> <Start> <Stream url="https://xxxx-xx-xx-xx-xx.ngrok.io/stream_audio?text=Hi%21%20How%20can%20I%20be%20of%20help%3F" /> </Start> </Response>
- 允许端点接受多种请求方法
默认@app.route只接受GET请求,为兼容Twilio的请求方式,修改stream_audio端点:
@app.route("/stream_audio", methods=["GET", "POST"])
内容的提问来源于stack exchange,提问作者user732456
相关产品推荐
相关产品推荐

