【发布时间】:2015-11-06 20:18:17
【问题描述】:
我正在尝试创建一个电话系统,让呼叫者排队,理想情况下,系统将呼叫代理,然后代理接听并修改呼叫以桥接队列顶部。
到目前为止,我已经完成的是拨号循环,用户拨打电话,然后按顺序拨打座席,直到有人接听,或者让用户可以选择留言或在听到时保持在线它响了。还有一个带有等待音乐的简单队列。
我似乎无法弄清楚如何将这两个系统结合起来。
我找到的最接近的是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
这只是将代理和队列顶部的任何人连接起来。
<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 文件会被命中并且呼叫会被桥接。
【问题讨论】:
标签: twilio twilio-php