检测Twilio REST API调用何时终止

时间:2016-08-16 08:49:34

标签: rest twilio twilio-php twilio-api

使用Twilio REST APIConference,您可以在呼叫者和代表之间创建一个呼叫,代表可以离开并按*或0重新输入。

当代表在Conference内按*时,代表端的脚本将其从Conference中移除并将它们带到后端,在那里他们可以找到客户需要的内容,让调用者进入一个空的Conference,直到代表重新加入,按0。

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

但是,如果代表在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 个答案:

答案 0 :(得分:1)

Twilio开发者传道者在这里。

由于action attribute on the <Dial>动词的性质,当呼叫在呼叫期间挂起时,您将获得具有completed状态的回叫。但是,一旦你不在<Dial>之内,那么你就不再拥有它了。

虽然有办法做到这一点!您需要设置接收呼叫进度事件。您可以注册接收呼叫所经历的各种事件的Webhook,从排队到完成。在从REST API生成调用时,您可以使用StatusCallback and StatusCallbackEvent parameters注册这些内容。然后,即使您在<Dial>之外,也可以在通话结束后获取网络链接。