Twilio Dial verb未按星号触发action及状态异常问题排查求助
解决Twilio Dial Verb非星号触发Action的问题
咱们先把你的核心问题拆解清楚:你设置了hangupOnStar="true",期望只有用户按下星号时才触发<Dial>的action回调,但实际不管按不按星号,都会收到in-progress状态的请求,还遇到Twilio间歇性不响应TwiML的情况。结合你提供的TwiML,我来给你分析下原因和解决办法:
核心原因分析
首先要明确Twilio <Dial>的action触发逻辑:
hangupOnStar="true"是允许用户主动按星号终止Dial并触发action,但它不会阻止Dial因其他原因结束时触发action(比如会议内所有参与者挂断、通话超时等)。- 你当前场景中通话处于
in-progress却触发action,大概率是因为<Conference>的状态变化(比如会议启动后无其他参与者,Twilio可能会发送状态通知),而你之前误以为只有回调请求才会获取额外状态,实际上Twilio会在Dial生命周期的多个节点发送action请求。
解决方案:精准过滤星号触发的请求
要实现仅在按下星号时执行action逻辑,你需要在action回调接口(http://ourserver/handler)中判断Twilio发送的请求参数:
- 当用户按下星号触发
hangupOnStar时,Twilio会在请求中携带Digits=*参数; - 其他场景触发的action请求(比如会议正常结束)不会包含这个参数。
所以在你的handler逻辑里,只需要先检查是否存在Digits=*,再执行后续业务逻辑即可,忽略其他所有请求。
针对间歇性不响应TwiML的建议
- 确认你的服务器返回TwiML的响应速度,Twilio对TwiML响应有超时限制(默认15秒),如果服务器响应过慢,可能导致Twilio等待或异常;
- 你的
<Conference>使用了官方的waitUrl,这个是稳定的,但可以测试下如果自定义waitUrl是否会有改善(不过官方音乐URL一般没问题); - 检查会议的
startConferenceOnEnter="true"配置,确保用户进入后会议正常启动,避免因会议状态异常导致Twilio逻辑卡顿。
附上你提供的TwiML代码(格式化后):
<Response> <Say language="en-GB" voice="woman">Welcome person....</Say> <Dial callerId="record-from-answer" record="record-from-answer" hangupOnStar="true" action="http://ourserver/handler"> <Conference beep="false" startConferenceOnEnter="true" muted="false" waitUrl="http://com.twilio.music.classical.s3.amazonaws.com/ClockworkWaltz.mp3" waitMethod="GET">57354</Conference> </Dial> </Response>
内容的提问来源于stack exchange,提问作者JMWC2019
相关产品推荐
相关产品推荐

