2017-10-16 109 views
0

我正試圖在系統中實現「保持呼叫」功能。我查看了this question和一些twilio文檔,推薦這樣做的方法是將呼叫出列,這將自動播放保留音樂,然後在保持完成(取消保留)時從隊列中檢索。將來自twilio客戶端的撥出電話置於保留的電話(獲取電話端呼叫Sid)

當我有來自移動電話的來電時,這對我的twilio客戶端來說非常好,我可以將電話出列,並且所有工作都正常。

但是,當我從twilio客戶端向移動設備發出呼叫時,如果我更新呼叫以發出出隊指令,我會聽到客戶端本身持有音樂,並且手機會斷開連接。我想這是因爲我已將呼叫的客戶端設置爲保留。所以問題是如何獲得呼叫的移動分支的呼叫sid。

我試着通過ParentCallId查詢CallResource,但是在傳出調用時不會返回任何東西。有任何想法嗎?

調用客戶端上發起了:

var params = { 
     To: num 
    }; 

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

的連接API回調使用一個簡單的撥號動詞。對連接節省CallId的

客戶端代碼:

$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(); 
} 

代碼得到任何暫停按鈕點擊

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

客戶端代碼兒童電話:

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

增加了原始文章的代碼。我正在使用C#.net,但認爲應該即使你已經習慣了PHP/node/etc。 – Shailesh

+0

嗯,那看起來很好。你什麼時候運行這個代碼?在調用開始時是否正確? – philnash

回答

0

我的不好。 Twilio不是問題。問題是使用了call.GetEnumerator()。當前!= null。

應該在枚舉器上執行MoveNext,然後纔會有Current值。通過這樣解決。愚蠢的:(