Обнаружение прекращения вызова 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>,

Другие вопросы по тегам