2015-11-06 71 views
3

我正在尝试创建一个呼叫方入队的电话系统,理想情况下,系统会向代理发出呼叫,然后代理将接听并修改呼叫桥接队列的顶部。Twilio - 将入队呼叫连接到代理

到目前为止,我所完成的工作是拨号循环,用户呼入时按顺序拨打座席,直到有人接听,或者让用户选择留言或留在线路上听到它响。和一个简单的入队音乐。

我似乎无法弄清楚如何组合这两个系统。

我发现的最接近的是this post,它很有帮助,但它掩盖了一旦调用者入队后如何调用。

不幸的是,我迄今为止唯一发现的Twilio文档告诉我如何拨入队列,这不是我想要的这个系统。我希望这个系统能够将一个呼叫者放入一个持有音乐的队列中,然后系统拨打代理号码,直到代理人接听。

任何和所有的帮助,非常感谢。

谢谢。

编辑:

解决方案

的index.php

这是一般的IVR树呼叫者最初命中。

<Say>This hits your general IVR tree</Say> 
<Say>As the last action, since the caller hasn't pressed anything and should be enqueued, redirect the caller to EnqueueCaller.php</Say> 
<Redirect>./EnqueueCaller.php</Redirect> 

由于PHP是一种预处理,有睡觉或超时通话的拨号没有真正的方法。 IVR树中的重定向是必要的,这样当用户仍在IVR树中时,代理不会被拨打。

EnqueueCaller.php

这是一次IVR树已经完成了来电被重定向和用户选择等待的代理。调用实际发生在Enqueue之前,因为PHP在读取TwiML xml之前首先加载(我认为?)。但是由于调用时存在固有的延迟,因此调用者总是会在代理可以拿起之前排队(我希望)。

<Enqueue waitUrl="wait_file.xml">name_of_queue</Enqueue> 
$call = $client->account->calls->create($from, $to, "http://example.com/DialQueueHandler.php", array("StatusCallback" => "DialQueueEventHandler.php"); 

DialQueueHandler.php

这简单地桥接剂和whoevers在队列的顶部。

<Say>Connecting to caller now.</Say> 
<Dial><Queue>name_of_queue</Queue></Dial> 

DialQueueEventHandler.php

此脚本容纳了会发生什么逻辑时从$ _REQUEST [ 'CallStatus']拨打的代理状态变化(回答,完整,发起,振铃)。就我而言,我从入队脚本中拨出了一个代理,并且在这个脚本中,通过设置一个标记继续拨打下一个代理。

switch($_REQUEST['CallStatus'] { 
    case 'answered': 
    case 'completed': 
     $next = false; 
     break; 
    default: 
     $next = true; 
     break; 
} 
if($next) { $call = $client->account->calls->create($from, $nextAgentNumber, "http://example.com/DialQueueHandler.php", array("StatusCallback" => "DialQueueEventHandler.php?agentOffset=$num"); } //same line from EnqueueCaller.php, and track where we are in agent array. 

如果该呼叫未被应答或完成,则拨打下一个座席。否则,当代理人接听电话时,DialQueueHandler.php文件被击中并且呼叫被桥接。

回答

0

杰夫,我是来自Twilio的梅根。

您可以利用<Enqueue>workflowSid属性来配置任务,该任务使用TaskRouter向可用代理启动呼叫流。 PHP中有一个TaskRouter quickstart,我想给你迄今为止的地方,你可以拿起third part

让我知道如果你觉得这是有帮助的。

+1

嗨梅根! 感谢您的链接和回复。 在我大部分时间都把头撞到墙上后,我简单地使用了PHP API,并且将account-> calls-> create_after_response-> enqueue的功能完全按照我需要的那样工作。它连接通话非常好。 这是可行的,因为创建调用不像使用入队那样使用twiml,所以发生入队,然后任何PHP都会像通常那样发生。 我会在下周完成并清理应用程序时发布后续行动。 干杯,再次感谢。 –

+0

非常好,很高兴听到它!周末愉快。 –