我正在尝试在我的系统中实现“保持呼叫”功能。我查看了this question和一些twilio文档,推荐的方法是将呼叫出列,这将自动播放保持音乐,然后在保持完成时从队列中检索(取消保持)。
当我有一个来自手机的来电,我的twilio客户端,我可以将呼叫出列,并且一切正常。
然而,当我从twilio客户端到移动电话的拨出电话时,如果我更新呼叫以发出出列指令,我会听到客户端本身的保持音乐,并且电话断开连接。我想这是因为我已将呼叫的客户端设置为暂停。所以问题是我如何获得呼叫移动支路的呼叫sid。
我已尝试通过ParentCallId查询CallResource,但在传出调用的情况下不会返回任何内容。有什么想法吗?
通过以下方式在客户端上启动呼叫:
var params = {
To: num
};
console.log('Calling ' + num + '...');
Twilio.Device.connect(params);
connect API回调使用简单的Dial动词。
在connect上保存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);
}
};
服务器端Hold 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 :(得分:0)
我的坏。 Twilio不是问题。问题是使用calls.GetEnumerator()。Current!= null。
在Current将有一个值之前,应该在Enumerator上执行MoveNext。通过这样做解决。笨:(