2017-10-16 43 views
0

私は自分のシステムに保留通話機能を実装しようとしています。私はthis questionといくつかのtwilioドキュメントを見てきました。これを行うには、保留音が自動的に再生されるコールをデキューし、保留が完了したときにキューから取得することをお勧めします。twilioクライアントからの電話を保留中の電話機にする(電話機コールSidを取得する)

携帯電話からtwilioクライアントへの着信があっても、これは問題なく動作し、通話をデキューでき、すべて正常に動作します。

twilioクライアントからモバイルへの発信コールでデキュー命令を発行するようにコールを更新すると、クライアント側で保留音が聞こえて電話が切れます。これは、コールのクライアントレグを保留にしているためです。だから問題は、コールのモバイルレッグのコールIDを取得する方法です。

私はCallResourceをParentCallIdでクエリしようとしましたが、発信呼び出しの場合は何も返しません。何か案は?

var params = { 
     To: num 
    }; 

    console.log('Calling ' + num + '...'); 
    Twilio.Device.connect(params); 

接続APIのコールバックはシンプルなダイヤル動詞を使用しています。

コールして、クライアント上で開始されます。

接続にcallidを保存するためのクライアントコード:

Twilio.Device.connect(function (conn) { 
       if (conn._direction === 'OUTGOING') { 
        $scope.outgoing_call_sid = conn.parameters.CallSid; 
        $scope.number = conn.message.To; 
       } else { 
        $scope.incoming_call_sid = conn.parameters.CallSid; 
        $scope.number = conn.parameters.From; 
       } 

       $scope.message = 'In call with ' + $scope.number; 
       $scope.status = 'InCall'; 
      }); 

ホールドボタンをクリックしたときに、クライアントコード:

$scope.hold = function() { 
    $scope.status = 'Hold'; 
    $scope.message = 'Putting on hold...'; 
    if ($scope.outgoing_call_sid) { 
     return $http.get(serviceBase + 'api/twilio/hold?callid=' + $scope.outgoing_call_sid); 
    } 
}; 

サーバーサイドホールドAPI呼び出し:

public IHttpActionResult Hold(string callid) {/
    //callid = GetLegCallId(callid); //Try to replace with child call 
    CallResource.Update(new UpdateCallOptions(callid) { Url = ConfigurationManager.AppSettings["ngrokUrl"] + "/api/twilio/enqueue", Method = HttpMethod.Get }); 
    return Ok(); 
} 

コードいずれかを取得するための子供の通話:

public string GetLegCallId(string callId) 
{ 
    var calls = CallResource.Read(new ReadCallOptions() { ParentCallSid = callId }); 
    if (calls.GetEnumerator().Current != null) 
     return calls.GetEnumerator().Current.Sid; 
} 
+0

あなたがparentCallIdによって呼び出しリソースを照会しようとしたとしたら、そこではどのコードを使用しましたか?私とそれを共有できますか? – philnash

+0

は元の投稿にコードを追加しました。 PHP/node/etcに慣れていてもOKです。 – Shailesh

+0

うーん、それはうまく見えますが、そのコードをいつ実行するのですか?コールの開始時に正しくですか? – philnash

答えて

0

悪いです。 Twilioは問題ではなかった。問題はcalls.GetEnumerator()の使用にありました。Current!= null。

Currentに値がある前に、列挙子でMoveNextを実行する必要があります。そうすることで解決しました。愚かなこと:(

関連する問題