Twilio外呼自定义消息移除及通话防断连问题咨询
解决Twilio外呼提示语与自动断连问题
一、移除默认提示语
你的代码中url参数使用了Twilio官方Demo地址https://demo.twilio.com/welcome/voice/,这个地址返回的TwiML逻辑就是播放那段提示语后立即挂断通话。要移除提示语,必须替换这个URL为自定义的TwiML配置:
方案1:使用内联TwiML(快速实现)
直接通过twiml参数传入自定义的TwiML字符串,无需额外HTTP服务:
def make_a_call(): call_status_url = f'https://{ngrok_domain}/call-status' # 自定义TwiML:开启语音流并保持通话3600秒 custom_twiml = '''<Response> <Stream url="你的语音流接收地址"/> <Pause length="3600"/> </Response>''' call = client.calls.create( twiml=custom_twiml, to=to_number, from_=from_number, status_callback=call_status_url, status_callback_event=['initiated','answered','completed'], status_callback_method='POST', timeout=600 )
方案2:搭建自定义TwiML服务(适合复杂逻辑)
如果需要动态调整通话逻辑,用Flask等框架搭建HTTP端点返回TwiML:
# 本地Flask服务示例 from flask import Flask, Response app = Flask(__name__) @app.route('/custom-twiml', methods=['POST']) def twiml_handler(): # 根据业务需求生成TwiML,这里开启流并保持通话 twiml_content = '''<Response> <Stream url="你的语音流接收地址"/> <Pause length="3600"/> </Response>''' return Response(twiml_content, mimetype='application/xml') if __name__ == '__main__': app.run(port=5000)
然后将呼叫代码中的url替换为你的ngrok域名加端点路径:
call = client.calls.create( url=f'https://{ngrok_domain}/custom-twiml', # 其他参数保持不变 )
二、避免通话自动断开
- 确保TwiML包含持续通话指令:
使用<Pause length="3600"/>设置超长暂停时长,或用<Say>循环播放静音提示(如果需要),让Twilio持续保持通话连接。 - 检查语音流稳定性:
若使用Voice Streams,确保你的流接收服务持续运行,一旦流连接中断,Twilio会自动挂断通话。 - 调整静音超时设置:
在Twilio控制台进入你的号码配置页,找到「静音超时(Silence Timeout)」选项,将时长调至最大值(如300秒),避免因对方长时间静音触发自动断连。
内容的提问来源于stack exchange,提问作者Abhiram V
相关产品推荐
相关产品推荐

