Обнаружение прекращения вызова Twilio REST API
Использование Twilio REST API
а также Conference
Вы можете создать вызов между вызывающим абонентом и представителем, который представитель может покинуть и повторно ввести, нажав * или 0.
Когда представитель нажимает * в течение Conference
сценарий в конце повторяет удаляет их из Conference
и берет их в бэкэнд, где они могут узнать, что нужно клиенту, оставив звонящего пустым Conference
пока представитель не присоединится, нажав 0.
Если представитель зависает в пределах Conference
Обратный звонок $_POST['CallStatus'] = completed
"сделано. Это позволяет сценарию знать, чтобы закончить все открытые Conference
s, таким образом перенаправляя любых ожидающих абонентов в главное меню.
Однако, если представитель зависает за пределами Conference
(используя бэкэнд, пока вызывающий абонент ожидает), такой же обратный вызов не выполняется.
Какие переменные будут указывать, что REST API
позвонить представителю повесил трубку? Я думал, что это было $_POST['CallStatus']
или же $_POST['DialCallStatus']
но я слушал оба, но не смог произвести обратный вызов при отключении для конца представителя.
Следующие переменные отправляются в Calls.xml
через REST API
:
From => $from
To => $to
Url => $script_url
StatusCallback => $callback_url
StatusCallbackEvent => array( "initiated", "ringing", "answered", "completed" )
$callback_url
работает и обнаруживает $_POST['CallStatus'] = in-progress
но нет completed
, (если представитель не зависает в конференции, он работает как задумано)
ФУНКЦИЯ ВЫЗОВА
class Call
{
var $url = 'https://api.twilio.com/2010-04-01/Accounts/XXXXXX/Calls.xml';
var $from = '+1XXXXXX';
function dial( $number, $script, $callback = false )
{
$switch = 'http://XXXXXX.com/' . $script . '.php';
$post = array( 'From' => $this->from, 'To' => $number, 'Url' => $switch );
if ( $callback )
{
$post['StatusCallback'] = $callback;
$post['StatusCallbackEvent'] = array( "initiated", "ringing", "answered", "completed" );
}
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $this->url );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_VERBOSE, 1 );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
curl_setopt( $curl, CURLOPT_USERPWD, 'XXXXXX:XXXXXX' );
if ( $post )
{
$data = array();
foreach ( $post as $property => $value )
{
array_push( $data, $property . '=' . $value );
}
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, implode( '&', $data ) );
}
$page = curl_exec( $curl );
curl_close( $curl );
return $page;
}
}
ВЫЗОВ
$call = new Call;
$call->dial( $number, $script, $callback );
1 ответ
Twilio разработчик евангелист здесь.
Вы получаете этот обратный вызов с completed
статус, когда представитель зависает во время разговора из-за характера action
атрибут на <Dial>
глагол. Однако, когда вы находитесь за пределами <Dial>
тогда у тебя его больше нет.
Хотя есть способ сделать это! Вам необходимо настроить прием событий вызова. Вы можете зарегистрироваться, чтобы получать веб-крюки для различных событий, которые проходит вызов, от очереди до завершения. Вы можете зарегистрироваться для них, используя StatusCallback
а также StatusCallbackEvent
параметры при генерации вызова из REST API. После завершения вызова вы можете получить веб-крючок, даже если вы вне <Dial>
,