使用呼叫筛选将来电转接到多个号码而不循环

时间:2013-09-26 20:37:50

标签: python twilio twiml

背景

我正在尝试为我的twilio应用程序实施呼叫筛选 - 即一个人按下一个键接受呼叫。我已经看到了几个这样的例子(例如How to use twilio to guarantee a live answer or voicemail?)但是,对于将呼叫转发到多个号码的情况给出的答案使用循环方法。

问题

有没有办法让所有人同时打电话,第一个接受挑战的人说话,所有其他电话断开连接?

为什么吗

我想这样做是因为如果呼叫仅由循环中的最后一个人应答,则来电呼叫者将需要等待一段时间。

2 个答案:

答案 0 :(得分:9)

Twilio Evangelist在这里,

当您收到初次通话时(让我们称之为客户)请使用<Gather>向他们询问一些信息,或者播放一些持有音乐,无论您认为哪种方式最佳:

<Response>
  <Play loop="0">/my_music.mp3</Play>
</Response>

然后,使用REST API启动对我们称之为代理的3个出站调用。你需要注意Twilio's rate limit。这些调用中的每一个都将沿着这些行使用TwiML:

<Response>
   <Gather numDigits="1" action="/accepted">
     <Say>Incoming call from +X YYY ZZZZ ZZZZ</Say>
   </Gather
<Response>

现在,只要其中一个代理按下某个密钥(您当然可以添加拒绝选项等),它们就会被重定向到action网址。在您的服务器上,您需要使用以下命令响应第一个代理:

<Response>
  <Dial>
    <Conference>some-unique-room-name</Conference>
  </Dial>
</Response>

然后,您需要向REST API和change the customers inbound call(仍在听音乐的人)发出请求,并使用上述TwiML将客户放入与代理相同的会议室。

当任何后续代理决定接受呼叫时,它们将重定向到/accepted URL,但由于您的应用已经知道客户已连接到另一个代理,因此您可以向他们播放一条消息说电话已经响应。

有一些方法可以扩展这个。例如,使用<Queue> TwiML动词可以更轻松地处理多个来电。

您可能还想使用带有url动词的<Number>属性的'whisper'来查看。这允许您添加仅在代理端执行的额外TwiML文档。虽然你只使用多个<Number>动词,但第一个回答的代理人会听到耳语。

<Response>
  <Dial>
    <Number url="/whisper">+AGENTNUMBER</Number>
  </Dial>
</Response>

/whisper TwiML可以包含<Gather>,要求代理接受呼叫。一旦呼叫到达TwimL文档的末尾,它就会将它们连接到呼叫客户。否则,您可以使用<Hangup>拒绝。

在提供的链接上有大部分Python代码。我担心我不是一个Python编码器,但我猜TwiML有帮助吗?

祝你好运!

答案 1 :(得分:3)

这是TwiML:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial>
    <Number>415-123-4567</Number>
    <Number>415-321-7654</Number>
    <Number>415-456-7890</Number>
  </Dial>
</Response>

这将立即拨打所有号码,并在接听时从其他号码中断电话。