将来自twilio客户端的拨出电话发送到保留的电话(获取电话侧呼叫Sid)

时间:2017-10-16 11:04:59

标签: twilio twilio-api

我正在尝试在我的系统中实现“保持呼叫”功能。我查看了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;
}

1 个答案:

答案 0 :(得分:0)

我的坏。 Twilio不是问题。问题是使用calls.GetEnumerator()。Current!= null。

在Current将有一个值之前,应该在Enumerator上执行MoveNext。通过这样做解决。笨:(