我试图创建一个呼叫者入队的电话系统,理想情况下,系统会呼叫代理,然后代理将接听并修改呼叫以桥接队列的顶部。
到目前为止,我所完成的是拨号循环,用户呼入,并按顺序拨打座席,直到有人接听,或者让用户选择留言或留在线路上听到它响起。还有一个简单的入场音乐。
我似乎无法弄清楚如何将这两个系统结合起来。
我找到的最接近的是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 [&#39; CallStatus&#39;]更改(应答,完成,启动,响铃)时发生的情况的逻辑。在我的例子中,我从enqueue脚本中拨打了一个代理,并在此脚本中,通过设置标志继续拨打下一个代理。
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 :(得分:0)
您可以使用<Enqueue>
的{{1}}属性来配置任务,该任务使用TaskRouter启动对可用代理的呼叫流。在PHP中有一个TaskRouter quickstart,我想如果你到目前为止已经到了,你可以选择third part。
如果您觉得这有用,请告诉我。