2016-12-20 8 views
0

В моем приложении мне нужно сделать Twilio, удерживая и возвращая вызов. Я исследовал и получил эту ссылку: https://www.twilio.com/docs/api/rest/change-call-state.Twilio возвращает вызов на удержание

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() { 

    } 

}); 
} 

Аякса вызов будет перенаправлен на эту страницу.

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

Twilio разработчик евангелист здесь.

Проблема заключается в том, что при обновлении первого вызова для перенаправления на музыку удержания, которая отключает другой вызов и завершает его.

Это, скорее всего, потому, что ваш TwiML заканчивается после <Dial>, который в первую очередь соединял два вызова. Вы можете продолжить разговор, добавив еще TwiML после или используя action attribute.

Если вместо этого, ваш 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> 

Если вы используете идентификатор администратора, который поставил пользователя на вызов, то если у вас есть несколько пользователей Клиентского дозвона Twilio тогда каждый из них будет иметь свою собственную очередь ожидания.

Наконец, вам необходимо Подключить вызывающих абонентов. Для этого вам нужно перенаправить администратор из своего шаблона удержания с помощью REST API снова и на некоторый TwiML, который будет dial their hold queue, который будет повторно подключать вызывающих абонентов. TwiML будет выглядеть так:

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

Это приведет к задержке вызова вызывающего абонента и его повторному подключению. Обратите внимание, что мы также включаем атрибут action, чтобы пользователь мог снова удерживаться в удержании.

Дайте мне знать, если это вообще поможет.

+0

@ Philnash..Как я могу сделать это с помощью javascript-клиента. Мне действительно нужно TwiML для этого? – Jenz

+0

Ну, если вы ищете музыку для удержания и другие возможности удержать кого-то на удержании, тогда да, поскольку Twilio Client контролирует только одну сторону вызова. Вы можете просто отключить клиент Twilio Client (https://www.twilio.com/docs/api/client/connection#mute), который запретит вызывающему абоненту слышать человека, использующего Клиента, но оставить его в тишине. – philnash

+0

@ Philnash ... Как я могу назвать файл twiML? '$ TwilioCall = $ клиент \t \t -> звонки ($ по призванию> с.и.д.) \t \t -> обновление ( \t \t \t массив ( \t \t \t \t "URL"=> "redirect_twiml.xml", \t \t \t \t "метод" => "POST" \t \t \t) \t \t); 'это как это? – Jenz