You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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',
    # 其他参数保持不变
)

二、避免通话自动断开

  1. 确保TwiML包含持续通话指令:
    使用<Pause length="3600"/>设置超长暂停时长,或用<Say>循环播放静音提示(如果需要),让Twilio持续保持通话连接。
  2. 检查语音流稳定性:
    若使用Voice Streams,确保你的流接收服务持续运行,一旦流连接中断,Twilio会自动挂断通话。
  3. 调整静音超时设置:
    在Twilio控制台进入你的号码配置页,找到「静音超时(Silence Timeout)」选项,将时长调至最大值(如300秒),避免因对方长时间静音触发自动断连。

内容的提问来源于stack exchange,提问作者Abhiram V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:42:53