public async Task DoStep(Step step, ICall call) { _call = call; _call.OnWorkflowStep += OnWorkflowStep; _call.Logger.Info("Hold processor start"); _settings = (HoldStepSettings)step.NodeData.Properties; var holdingBridge = await call.CreateBridge(BridgeType.Holding); _call.CallState.SetBridge(holdingBridge); await _call.SipBridgingApi.AddLineToBridge(_call.CallState.GetIncomingLineId(), _call.CallState.GetBridgeId()); if (_settings.HoldMusic) { await _call.SipBridgingApi.PlayMusicOnHoldToBridge(_call.CallState.GetBridgeId()); } else { HoldPrompt = _settings.WaitPrompt; _call.SipApiClient.OnPromptPlaybackFinishedEvent += AriClient_OnPlaybackFinishedEvent; _currentPlaybackId = await _call.SipBridgingApi.PlayPromptToBridge(_call.CallState.GetBridgeId(), _settings.WaitPrompt, call.CallState.LanguageCode); } _call.FireStateChange(Trigger.PlaceOnHold); _call.Logger.Info("Hold processor fired"); _call.ProcessCallLogic(); }
public async Task DoStep(ISettings settings, ICall call) { await call.StopHoldingBridge(); _callBridge = await call.CreateBridge(BridgeType.NoDTMF); call.CallState.SetBridge(_callBridge); await call.AddLineToBridge(call.CallState.GetIncomingLineId(), _callBridge.Id); await call.AddLineToBridge(call.CallState.GetOutgoingLineId(), _callBridge.Id); var stepSettings = (BridgeCallStepSettings)settings; call.AddStepToProcessQueue(stepSettings.NextStep); call.FireStateChange(Trigger.NextCallFlowStep); }
public async Task DoStep(Step step, ICall call) { if (!string.IsNullOrEmpty(call.CallState.GetBridgeId())) { await call.StopHoldingBridge().ConfigureAwait(false); } _callBridge = await call.CreateBridge(BridgeType.NoDTMF).ConfigureAwait(false); call.CallState.SetBridge(_callBridge); await call.AddLineToBridge(call.CallState.GetIncomingLineId(), _callBridge.Id).ConfigureAwait(false); await call.AddLineToBridge(call.CallState.GetOutgoingLineId(), _callBridge.Id).ConfigureAwait(false); call.AddStepToProcessQueue(step.GetStepFromConnector(NextStep)); call.FireStateChange(Trigger.NextCallFlowStep); }
public async Task CallOutbound(string dialingId) { _call.Logger.Info("Outbound start " + dialingId); _call.CallState.CreateOutgoingLine( await _call.SipLineApi.CreateOutboundCall(dialingId)); try { var outgoingLineId = _call.CallState.GetOutgoingLineId(); var currentCallState = await _call.SipLineApi.GetLineState(outgoingLineId); while (currentCallState != "Up") { await Task.Delay(100); currentCallState = await _call.SipLineApi.GetLineState(outgoingLineId); } } catch (Exception ex) { _call.Logger.Error(ex, "Outbound call can't get through "); _call.AddStepToProcessQueue(_settings.FailedStep); _call.FireStateChange(Trigger.NextCallFlowStep); return; } var bridge = await _call.CreateBridge(BridgeType.WithDTMF); await _call.SipBridgingApi.AddLineToBridge( _call.CallState.GetIncomingLineId(), bridge.Id); await _call.SipBridgingApi.AddLineToBridge( _call.CallState.GetOutgoingLineId(), bridge.Id); GoToNextStep(); _call.Logger.Info("Outbound end, go to next step " + dialingId); }