如何实现Twilio队列自动化转接:将来电从Enqueue转至Dial
如何自动将来电从Enqueue状态转至Dial状态
你的代码逻辑存在核心问题:Twilio的TwiML是按顺序执行的,<Enqueue>(或对应的Python方法)会将通话阻塞在队列中,后续的<Dial>代码永远不会被执行。要实现从Enqueue到Dial的自动化转接,不能在同一个TwiML响应中串联这两个操作,必须通过异步事件触发或API调用实现。
方案1:监听队列事件+API调用转接(推荐)
这是实现自动转接最可靠的方式,流程如下:
- 在Twilio控制台配置队列的
member.added事件Webhook,将回调URL指向你的后端接口。当有来电进入队列时,Twilio会向该接口发送事件通知。 - 后端收到事件后,调用Twilio Calls API,将队列中的通话转接到目标号码。
示例Python代码
from twilio.rest import Client from django.http import HttpResponse # 替换为你的Twilio账号信息 ACCOUNT_SID = 'your_account_sid' AUTH_TOKEN = 'your_auth_token' client = Client(ACCOUNT_SID, AUTH_TOKEN) def handle_queue_member_added(request): # 从Webhook请求中获取目标通话的SID call_sid = request.POST.get('CallSid') # 生成转接用的TwiML,将通话转至指定号码 transfer_twiml = '<Response><Dial>+000000000</Dial></Response>' client.calls(call_sid).update(twiml=transfer_twiml) return HttpResponse("Transfer started")
方案2:调整TwiML逻辑(适用于无等待转接场景)
如果不需要让通话在队列中等待,而是直接关联队列并触发转接,可以跳过单独的<Enqueue>步骤,直接用<Dial>包含<Queue>,同时通过url参数处理座席前置逻辑:
修正后的XML代码
<Response> <Say>hello</Say> <Dial url="/ivr/agent/screencall"> <Queue>support</Queue> </Dial> <Redirect>/ivr/welcome/</Redirect> </Response>
修正后的Python代码
from twilio.twiml.voice_response import VoiceResponse, Dial, Queue twiml_response = VoiceResponse() twiml_response.say('hello') # 直接创建Dial节点并关联队列,无需先调用enqueue dial = twiml_response.dial(url=reverse('ivr:agents_screencall')) dial.queue('support')
关键注意点
- 方案1支持复杂场景(如队列超时自动转接),需结合队列事件或定时任务触发API调用。
- 方案2本质是将通话直接转接到队列匹配座席,跳过了单独的入队等待阶段,适合无需等待的转接需求。
内容的提问来源于stack exchange,提问作者zuni
相关产品推荐
相关产品推荐

