Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }