public async Task DoStepAsync(Step step, ICall call) { _call = call; if (!string.IsNullOrEmpty(call.CallState.GetBridgeId())) { await call.StopHoldingBridgeAsync().ConfigureAwait(false); } _callBridge = await call.CreateBridgeAsync(BridgeType.NoDTMF).ConfigureAwait(false); call.CallState.CalledPartyAcceptTime = DateTimeOffset.Now; call.CallState.SetBridge(_callBridge); call.InputProcessor.ChangeInputSettings(null); if (!await AreBothLinesStillConnected()) { await call.FireStateChange(Trigger.FailedCallFlow); return; } await call.AddLineToBridgeAsync(call.CallState.GetIncomingLineId(), _callBridge.Id).ConfigureAwait(false); //await call.SipBridgingApi.MuteLineAsync(call.CallState.GetIncomingLineId()); await call.AddLineToBridgeAsync(call.CallState.GetOutgoingLineId(), _callBridge.Id).ConfigureAwait(false); //await call.SipBridgingApi.MuteLineAsync(call.CallState.GetOutgoingLineId()); call.CallState.AddStepToIncomingQueue(step.GetStepFromConnector(NextStep)); await call.FireStateChange(Trigger.NextCallFlowStep); }
public async Task DoStepAsync(Step step, ICall call) { _call = call; _step = step; var transferSettings = step.NodeData.Properties as TransferSettings; call.CallState.CallCanBeAbandoned = false; var transferLine = await call.SipLineApi.CreateOutboundCallAsync(transferSettings.DialString, transferSettings.Endpoint); transferChannel = call.CallState.CreateTransferLine(transferLine); await Task.Delay(500); call.SipApiClient.OnLineHangupAsyncEvent += SipApiClientOnOnLineHangupEvent; switch (transferSettings.Direction) { case Direction.Outgoing: { var transferBridge = await call.CreateBridgeAsync(BridgeType.WithDTMF); outboundLineId = call.CallState.GetOutgoingLineId(); await Task.Delay(500); await call.AddLineToBridgeAsync(call.CallState.GetOutgoingLineId(), transferBridge.Id); await Task.Delay(500); await call.AddLineToBridgeAsync(transferChannel.Id.ToString(), transferBridge.Id); break; } case Direction.Incoming: { var transferBridge = await call.CreateBridgeAsync(BridgeType.WithDTMF); await call.AddLineToBridgeAsync(call.CallState.GetIncomingLineId(), transferBridge.Id); await call.AddLineToBridgeAsync(transferChannel.Id.ToString(), transferBridge.Id); break; } case Direction.Both: // bad config here? break; default: throw new ArgumentOutOfRangeException(); } }