配置Twilio TwiML Bin:呼叫转接带耳语、无人接听转Studio及主叫挂断同步挂断
解决Twilio TwiML Bin主叫挂断后仍进入Studio语音信箱的问题
核心问题分析
主叫挂断后仍触发语音信箱流程,是因为默认情况下<Dial>指令执行完毕后,无论主叫状态如何,Twilio都会继续执行后续TwiML逻辑。要解决这个问题,需要通过Dial回调状态判断来分支处理不同的通话结局。
解决方案步骤
1. 调整主TwiML Bin的<Dial>配置
给<Dial>添加action属性,指定一个回调TwiML Bin来处理通话结束后的状态判断,同时保留耳语和超时设置:
<Response> <!-- 配置转接:带耳语、30秒超时,结束后触发回调 --> <Dial action="https://your-twilio-domain/handle-dial-status" method="POST" timeout="30" > <Number whisper="https://your-twiml-bin-url/whisper-twiml">+1234567890</Number> </Dial> </Response>
2. 创建回调处理的TwiML Bin
在这个Bin里,通过Twilio的模板变量CallStatus判断通话状态,只在被叫真正无人接听时才跳转Studio:
<Response> {% if CallStatus == "completed" %} <!-- 主叫主动挂断,直接终止通话 --> <Hangup/> {% elif CallStatus == "no-answer" %} <!-- 被叫无人接听,跳转Studio语音信箱流程 --> <Redirect method="POST">https://studio.twilio.com/v2/Flows/YOUR_STUDIO_FLOW_SID/Executions</Redirect> {% else %} <!-- 其他状态(如被叫拒接)直接挂断 --> <Hangup/> {% endif %} </Response>
3. Studio流程添加前置校验(可选但更稳妥)
在Studio流程的起始节点后,添加Split Based On节点,检查通话状态:
- 条件:
widgets.incoming_call.CallStatus等于completed - 满足条件时,直接连接Hangup节点结束流程
- 不满足条件时,继续执行语音信箱录制逻辑
为什么之前的超时设置无效?
你设置的超时是针对被叫无人接听的等待时长,但主叫挂断属于completed状态,和超时触发的no-answer状态是完全不同的事件。只有通过回调状态判断,才能区分这两种场景,避免误触发语音信箱。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

