2016-12-20 23 views
0

私のアプリケーションでは、Twilioを保持して呼び出しを取り戻す必要があります。私は研究し、このリンクを得た:https://www.twilio.com/docs/api/rest/change-call-stateTwilioは保留中のコールを取得します

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

ここではTwilioの開発者のエバンジェリストです。

ここでの問題は、最初のコールを更新して、他のコールを切断して終了する保留音楽にリダイレクトする場合です。

TwiMLは、最初に2つのコールを接続した<Dial>の後に終了する可能性があります。 TwiMLを追加した後、またはaction attributeを使用して、通話を続けることができます。

代わりに、コールのあなたのTwilio Clientの足は、以下の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クライアントダイヤラの複数のユーザーを持っているならば、彼らはそれぞれ独自の保留キューを持つことになり、その後の呼び出しでユーザーを置く管理者のIDを使用している場合。

最後に、発信者を再接続する必要があります。このためには、管理者をREST APIを使用して保持パターンから再度リダイレクトする必要があります。dial their hold queueのTwiMLに発信者を再接続します。 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 - >コール($ call-> SID) \t \t - >更新( \t \t \t配列( \t \t \t \t "URL"=> "redirect_twiml.xml"、 \t \t \t \t "方法" => "POST" \t \t \t) \t \t); 'それはこのようなものですか? – Jenz

関連する問題