搁置从 twilio 客户端到 phone 的传出呼叫(获取 phone 侧呼叫 Sid)

putting an outgoing call from a twilio client to a phone on hold(Get phone side call Sid)

我正在尝试在我的系统中实现 'hold call' 功能。我看过 this question 和一些 twilio 文档,推荐的方法是使呼叫出队,这将自动播放保持音乐,然后在保持完成(取消保持)时从队列中检索。

当我收到来自手机的来电到我的 twilio 客户端时,这工作得很好,我可以使呼叫出队,一切正常。

然而,当我使用从 twilio 客户端到手机的传出呼叫时,如果我更新呼叫以发出出队指令,我会听到客户端本身的等待音乐,并且 phone 断开连接。我想这是因为我已将呼叫的客户端部分设置为保持状态。所以问题是我如何获得呼叫的移动段的呼叫 sid。

我已经尝试通过 ParentCallId 查询 CallResource,但是在拨出电话的情况下,这不会 return 任何事情。有什么想法吗?

在客户端发起调用:

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

我的错。 Twilio 不是问题所在。问题在于 calls.GetEnumerator().Current != null 的使用。

应该在 Enumerator 上执行 MoveNext,然后 Current 才会有值。这样做就解决了。笨:(