我想使用它的REST API修改twilio的live callStatus。我已经列出了所有可用的队列电话号码,并且想要从排队中调用callStatus来调用正在进行中或响铃。我怎么得到这个?
答案 0 :(得分:1)
Twilio传道者在这里。
您可以使用REST API将队列中等待的特定呼叫出列。要执行此操作make a POST request to the CallSid you want to redirect,但您必须通过Members资源执行此操作。作为该HTTP请求的一部分,您传入Url参数。这样做会告诉Twilio将该调用重定向到队列之外,向该Url发出请求,然后开始执行返回的TwiML。
$member = $client->account->queues->get('QU5ef8732a3c49700934481addd5ce1659')->members->get("CA5ef8732a3c49700934481addd5ce1659");
$member->update(array(
"Url" => "http://demo.twilio.com/docs/voice.xml",
"Method" => "POST"
));
现在,要发出此请求,您需要知道要使用的队列的SID以及要重定向的队列成员的CallSid。
让我们逐步了解这两个值。
查找队列SID
有多种方法可以获取队列SID。如果您使用REST API创建队列,那么您的应用可以在每次creates a new Queue时保存队列SID:
$queue = $client->account->queues->create("newqueue", array());
echo $queue->sid; //save the sid in a db or some other store
或者您可以使用REST API至list all of your Queues。例如,我在这里使用REST API来获取Queue resources的列表,循环它们并打印当前的平均等待时间:
// Loop over the list of queues and echo a property for each one
foreach ($client->account->queues as $queue) {
echo $queue->average_wait_time;
}
如果您想使用其友好名称查找特定队列,可以将其修改为循环以查看每个队列的*friendly_name* parameter。
// Loop over the list of queues and echo a property for each one
foreach ($client->account->queues as $queue) {
echo $queue->friendly_name;
}
在这种情况下,我只是打印出每个队列的友好名称。
找到CallSid
获得队列SID后,接下来需要获取要重定向的呼叫的CallSid。有不同的方法可以做到这一点。
您可以使用Members资源列出在该队列中等待的所有呼叫:
foreach ($client->account->queues->get('QU5ef8732a3c49700934481addd5ce1659')->members as $member) {
echo $member->CallSid;
}
每个成员资源都会为您提供有关该成员的一些信息,包括CallSid。
如果您不知道具体的呼叫CallSid并希望根据呼叫者电话号码找到呼叫,您可以使用呼叫资源:
$call = $client->account->calls->getIterator(0, 50, array(
"Status" => "in-progress",
"From" => "+15555555555"));
$callsid = $call->CallSid;
在这里,我要求Twilio返回一个呼叫资源,其From电话号码为+15555555555“,其状态为”正在进行中“,然后抓取该呼叫CallSid。
重定向排队的来电者
既然我有Queue SID和CallSid,我可以将调用者重定向到队列之外,并转到另一种体验:
$member = $client->account->queues->get('QU5ef8732a3c49700934481addd5ce1659')->members->get("CA5ef8732a3c49700934481addd5ce1659");
$member->update(array(
"Url" => "http://demo.twilio.com/docs/voice.xml",
"Method" => "POST"
));
希望有所帮助。