Twilio取回保留的电话

时间:2016-12-20 07:28:29

标签: javascript twilio twilio-api

在我的应用程序中,我需要执行Twilio控制并检索回来的电话。我研究并得到了这个链接:https://www.twilio.com/docs/api/rest/change-call-state

的javascript

function holdCall() {  // hold a call
var callSid = connection.parameters.CallSid;

$.ajax({
    url: "http://www.domain.com/phone/phone_ajax.php",
    type: 'POST',
    data: {
        callSid: callSid
    },
    success: function(data) {
        console.log(data);
    },
    error: function() {

    }, 
    complete: function() {

    }

});
}

ajax调用将转到此页面。

phone_ajax.php

require_once ( "http://www.domain.com/phone/phone_api/vendor/autoload.php");
use Twilio\Rest\Client;
use Twilio\Jwt\ClientToken;

// initialize

if ( $_POST['callSid'] ) {  // hold a call
    $client = new Client($twilioAccountSID, $twilioAuthenticationToken);
    $calls = $client->calls->read(
        array("ParentCallSid" => $_POST['callSid'])
    );
    // Loop over the list of calls and echo a property for each one
    foreach ($calls as $call) {
        // This will return child call sid e.g CA9ccxxxxxxxxxx
        $twilioCall = $client
        ->calls($call->sid)
        ->update(
            array(
                "url" => "http://demo.twilio.com/docs/voice.xml",
                "method" => "POST"
            )
        );

        echo $twilioCall->to;
    }
} 

我试着拨打我的手机,接听电话并点击“保持”按钮。我的浏览器中的通话已经结束,手机中的通话没有结束(我可以听到手机中的音乐)。当我再次单击拨号盘中的“保留”按钮时,应该检索该呼叫。我怎样才能做到这一点?

任何人都可以帮我这样做吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

Twilio开发者传道者在这里。

这里的问题是,当您更新第一个重定向到保持音乐的呼叫时,会断开另一个呼叫并结束它。

这可能是因为您的TwiML在首先连接两个电话的<Dial>之后结束。您可以通过在action attribute之后添加更多TwiML来保持呼叫。

相反,如果您的Twilio客户端部分有以下TwiML:

<Response>
  <Dial action="/holding">NUMBER_TO_DIAL</Dial>
</Response>

端点/holding看起来像:

<Response>
  <Say>You have a caller on hold.</Say>
  <Redirect>/holding</Redirect>
</Response>

然后你的电话不会结束。它会无休止地说“你有一个呼叫者被搁置”。你可以实现这个,但是你喜欢。

现在,您应该http://demo.twilio.com/docs/voice.xml等待检索,而不是将另一端的来电发送到“place them in a queue”。因此,您需要另一个端点/place-on-hold,您可以在按下保持按钮时更新呼叫。那将需要TwiML:

<Response>
  <Enqueue waitUrl="SOME_HOLD_MUSIC">ADMIN_ID</Enqueue>
</Response>

如果您使用将用户置于通话状态的管理员的ID,那么如果您有Twilio Client拨号程序的多个用户,那么他们将拥有自己的保留队列。

最后,您需要重新连接呼叫者。为此,您需要再次使用REST API将管理员重定向到他们的持有模式,并转移到将dial their hold queue将重新连接调用者的某些TwiML。 TwiML看起来像:

<Response>
  <Dial action="/holding">
    <Queue>ADMIN_ID</Queue>
  </Dial>
</Response>

这会使呼叫者暂停并重新连接。请注意,我们还包含action属性,以便可以再次将用户置于保持状态。

让我知道这是否有帮助。