检测 Twilio REST API 调用何时终止

Detecting when a Twilio REST API call is terminated

使用 Twilio REST APIConference 您可以在呼叫者和代表之间创建呼叫,代表可以离开,并且 re-enter 通过按 * 或 0。

当代表在 Conference 中按下 * 时,代表端的脚本会将他们从 Conference 中删除,并将他们带到后端,在那里他们可以找到客户的需求,留下呼叫者在空 Conference 直到代表 re-joins 按 0.

如果代表在 Conference 内挂断,则会进行回调“$_POST['CallStatus'] = completed”。这让脚本知道结束所有打开的 Conferences,从而将任何等待的呼叫者重定向到主菜单。

然而,如果代表在 Conference 之外挂断(使用后端,而呼叫者仍在等待) 不会进行相同的回调。

哪些变量会指示给代表的 REST API 电话已挂断? 我认为是 $_POST['CallStatus']$_POST['DialCallStatus'] 但我已经听了两者,但无法为代表的结尾生成 on-disconnect 回调。

以下变量通过 REST API 发送到 Calls.xml

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 );

此处为 Twilio 开发人员布道师。

当代表在通话过程中由于 action attribute on the <Dial> 动词的性质挂断时,您会收到状态为 completed 的回调。然而,一旦你在 <Dial> 之外,你就不再拥有那个。

虽然有办法做到这一点!您需要设置以接收呼叫进度事件。您可以注册以接收呼叫经历的各种事件的 webhook,从排队到完成。当从 REST API 生成调用时,您可以使用 StatusCallback and StatusCallbackEvent parameters 注册这些。然后,您可以在通话结束时获得 webhook,即使您不在 <Dial>.