Twilio - 将已排队的呼叫连接到座席

时间:2015-11-06 20:18:17

标签: twilio twilio-php

我试图创建一个呼叫者入队的电话系统,理想情况下,系统会呼叫代理,然后代理将接听并修改呼叫以桥接队列的顶部。

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

我似乎无法弄清楚如何将这两个系统结合起来。

我找到的最接近的是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文件将被命中,呼叫将被桥接。

1 个答案:

答案 0 :(得分:0)

杰夫,我是来自Twilio的Megan。

您可以使用<Enqueue>的{​​{1}}属性来配置任务,该任务使用TaskRouter启动对可用代理的呼叫流。在PHP中有一个TaskRouter quickstart,我想如果你到目前为止已经到了,你可以选择third part

如果您觉得这有用,请告诉我。

相关问题