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

如何实现Twilio队列自动化转接:将来电从Enqueue转至Dial

如何自动将来电从Enqueue状态转至Dial状态

你的代码逻辑存在核心问题:Twilio的TwiML是按顺序执行的,<Enqueue>(或对应的Python方法)会将通话阻塞在队列中,后续的<Dial>代码永远不会被执行。要实现从Enqueue到Dial的自动化转接,不能在同一个TwiML响应中串联这两个操作,必须通过异步事件触发或API调用实现。

方案1:监听队列事件+API调用转接(推荐)

这是实现自动转接最可靠的方式,流程如下:

  1. 在Twilio控制台配置队列的member.added事件Webhook,将回调URL指向你的后端接口。当有来电进入队列时,Twilio会向该接口发送事件通知。
  2. 后端收到事件后,调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:01:11