2017-10-16 128 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值。通过这样解决。愚蠢的:(