在我的应用程序中,我需要执行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;
}
}
我试着拨打我的手机,接听电话并点击“保持”按钮。我的浏览器中的通话已经结束,手机中的通话没有结束(我可以听到手机中的音乐)。当我再次单击拨号盘中的“保留”按钮时,应该检索该呼叫。我怎样才能做到这一点?
任何人都可以帮我这样做吗?提前谢谢。
答案 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属性,以便可以再次将用户置于保持状态。
让我知道这是否有帮助。