我正在尝试创建一个呼叫方入队的电话系统,理想情况下,系统会向代理发出呼叫,然后代理将接听并修改呼叫桥接队列的顶部。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文件被击中并且呼叫被桥接。
嗨梅根! 感谢您的链接和回复。 在我大部分时间都把头撞到墙上后,我简单地使用了PHP API,并且将account-> calls-> create_after_response-> enqueue的功能完全按照我需要的那样工作。它连接通话非常好。 这是可行的,因为创建调用不像使用入队那样使用twiml,所以发生入队,然后任何PHP都会像通常那样发生。 我会在下周完成并清理应用程序时发布后续行动。 干杯,再次感谢。 –
非常好,很高兴听到它!周末愉快。 –