2016-12-20 3 views
0

In meiner Anwendung muss ich Twilio halten und einen Anruf zurückholen. Ich recherchierte und bekam diesen Link: https://www.twilio.com/docs/api/rest/change-call-state.Twilio Anruf zurückrufen zurück

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

    } 

}); 
} 

Der Ajax-Aufruf wird auf dieser Seite gehen.

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

ich mein Handy versucht, rufen, nahm den Anruf und Hold-Taste angeklickt. Der Anruf in meinem Browser wurde beendet und der Anruf in meinem Telefon wurde nicht beendet (ich kann Musik in meinem Telefon hören). Wenn ich erneut auf den Halten-Knopf in den Dialpas klicke, sollte der Anruf zurückgeholt werden. Wie kann ich das erreichen?

Kann mir jemand helfen, dies zu tun? Danke im Voraus.

Antwort

1

Twilio Entwickler Evangelist hier.

Das Problem hier ist, dass, wenn Sie den ersten Anruf zum Umleiten auf die Hold-Musik aktualisieren, die den anderen Anruf trennt und beendet.

Dies ist wahrscheinlich, weil Ihre TwiML endet nach der <Dial>, die die beiden Anrufe in erster Linie verbunden ist. Sie können einen Anruf aufrechterhalten, indem Sie entweder TwiML nach dem Hinzufügen hinzufügen oder action attribute verwenden.

Wenn stattdessen Ihre Twilio Client-Bein des Anrufs hatte folgende TwiML:

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

Und den Endpunkt /holding ausgesehen:

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

Dann wird Ihr Anruf nicht beenden. Es wird stattdessen endlos sagen: "Sie haben einen Anrufer in der Warteschleife". Sie können dies jedoch wie immer Sie möchten implementieren.

Jetzt, anstatt den Anrufer am anderen Ende aus zu senden "http://demo.twilio.com/docs/voice.xml" sollten Sie warten, bis place them in a queue abgerufen werden. Sie benötigen also einen anderen Endpunkt, z. B. /place-on-hold, auf den Sie den Anruf aktualisieren möchten, wenn Sie die Halten-Taste drücken. Das müsste die TwiML:

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

Wenn Sie die ID des Admin verwenden, die den Benutzer auf Abruf setzen dann, wenn Sie mehrere Benutzer des Twilio Client-Dialer haben, dann werden sie haben jeweils ihre eigenen Betrieb Warteschlange.

Schließlich müssen Sie die Anrufer erneut verbinden. Dazu müssen Sie Ihren Admin erneut aus der Warteschleife umleiten, indem Sie die REST-API erneut verwenden und auf TwiML, das die Anrufer erneut verbindet, dial their hold queue. Der TwiML würde wie folgt aussehen:

Dadurch wird der Anrufer aus der Warteschleife genommen und erneut verbunden. Beachten Sie, dass wir auch das Aktionsattribut einschließen, damit der Benutzer wieder in die Warteschleife gesetzt werden kann.

Lassen Sie mich wissen, ob dies überhaupt hilft.

+0

@ Philnash..Wie kann ich das mit Javascript-Client..Do brauche ich wirklich TwiML, um dies zu tun? – Jenz

+0

Nun, wenn Sie nach Hold-Musik und anderen Funktionen suchen, jemanden in die Warteschleife zu setzen, dann ja, da Twilio Client nur die Kontrolle über eine Seite des Anrufs hat. Sie könnten einfach [den Twilio Client deaktivieren] (https://www.twilio.com/docs/api/client/connection#mute) beenden, was den Anrufer davon abhält, die Person zu hören, die den Client verwendet, aber sie in Ruhe lassen. – philnash

+0

@ Philnash..Wie kann ich die TwiML-Datei aufrufen? '$ TwilioCall = $ client \t \t -> Anrufe ($ Call-> sid) \t \t -> update ( \t \t \t Array ( \t \t \t \t "url"=> "redirect_twiml.xml", \t \t \t \t "Methode" => "POST" \t \t \t) \t \t); 'Ist es so? – Jenz

Verwandte Themen