私は自分のシステムに保留通話機能を実装しようとしています。私は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;
}
あなたがparentCallIdによって呼び出しリソースを照会しようとしたとしたら、そこではどのコードを使用しましたか?私とそれを共有できますか? – philnash
は元の投稿にコードを追加しました。 PHP/node/etcに慣れていてもOKです。 – Shailesh
うーん、それはうまく見えますが、そのコードをいつ実行するのですか?コールの開始時に正しくですか? – philnash