Ejemplo n.º 1
0
        private void DTMF_ReceivedEvent(ISipApiClient sipApiClient, DtmfReceivedEvent e)
        {
            if (!LogData.ContainsKey(e.LineId))
            {
                LogData.Add(e.LineId, _call.CallState.GetIncomingLineId());
            }

            if (_call.CallState != null && e.LineId != _call.CallState.GetIncomingLineId())
            {
                return;
            }

            try
            {
                if (_call.GetCurrentState() != State.LanguageInput && _call.GetCurrentState() != State.LanguagePrompts)
                {
                    return;
                }
                if (_call.GetCurrentState() == State.LanguagePrompts)
                {
                    _call.FireStateChange(Trigger.GetLanguageInput);
                }
                GetLanguageChoiceForDigit(e.Digit);
                _inputTimeout.Stop();
                _call.Logger.Info("DTMF Event", LogData);
                GoToNextStep();
            }
            catch (Exception ex)
            {
                _call.Logger.Error(ex, "DTMF Received event ", LogData);
            }
        }
Ejemplo n.º 2
0
        private async Task AriClient_OnPlaybackFinishedAsyncEvent(ISipApiClient sipApiClient, PromptPlaybackFinishedEvent e)
        {
            _call.Logger.Information("Playback finished {PlaybackId} {@Call}", e.PlaybackId, _call.CallState);
            AddPlaybackIdToLogData(e.PlaybackId);

            if (e.PlaybackId != _currentPlaybackId)
            {
                return;
            }
            if (_call.GetCurrentState() == State.InCall)
            {
                return;
            }
            await Task.Delay(TimeSpan.FromSeconds(5));

            if (_call.CallState.Bridge.Id != _holdingBridge.Id)
            {
                return;
            }

            try
            {
                _currentPlaybackId = await _call.SipBridgingApi.PlayPromptToBridgeAsync(_call.CallState.Bridge.Id, _call.CallState.HoldPrompt, _call.CallState.LanguageCode);
            }
            catch (Exception exception)
            {
                _call.Logger.Warning(exception, "Think the call has probably hungup");
                RemoveEventSubscriptions();
            }

            _call.Logger.Information("Playback started {currentPlaybackId}, of prompt {HoldPrompt}, to bridge {BridgeName} {@Call}", _currentPlaybackId, _call.CallState.HoldPrompt, _call.CallState.Bridge.Name, _call.CallState);
        }
Ejemplo n.º 3
0
 public async Task PlayNextPromptInQueue()
 {
     if (_asteriskCall.GetCurrentState() == State.StoppingPlayback || _promptQueue.Count == 0)
     {
         return;
     }
     _asteriskCall.Logger.Debug($"Playing next prompt in queue, queue size: {_promptQueue.Count}", _asteriskCall.LogData);
     try
     {
         var prompt = _promptQueue.Dequeue();
         if (prompt != null)
         {
             await PlayPromptFile(prompt.PromptFile);
         }
     }
     catch (Exception e)
     {
         _asteriskCall.Logger.Error(e, "Error playing prompt in queue.");
         _asteriskCall.FireStateChange(Trigger.FinishCall);
     }
 }
Ejemplo n.º 4
0
        private async Task AriClient_OnPlaybackFinishedEvent(ISipApiClient sipApiClient, PromptPlaybackFinishedEvent e)
        {
            LogData.Add("PlaybackId", e.PlaybackId);
            if (e.PlaybackId != _currentPlaybackId)
            {
                return;
            }

            await Task.Delay(TimeSpan.FromSeconds(5));

            if (_call.GetCurrentState() != State.OnHold)
            {
                return;
            }

            _currentPlaybackId = await _call.SipBridgingApi.PlayPromptToBridge(_call.CallState.GetBridgeId(), HoldPrompt, "en");

            _call.Logger.Info("Playback finished", LogData);
        }
Ejemplo n.º 5
0
        public void AriClient_OnChannelDtmfReceivedEvent(ISipApiClient sipApiClient, DtmfReceivedEvent dtmfReceivedEvent)
        {
            DigitTimeoutTimer.Stop();
            _call.Logger.Debug($"OnChannel Dtmf Received Event {dtmfReceivedEvent.LineId}");
            if (_call.GetCurrentState() == State.LanguagePrompts)
            {
                return;
            }
            if (dtmfReceivedEvent.LineId != _call.CallState.GetIncomingLineId())
            {
                return;
            }

            LogDtmfValue(dtmfReceivedEvent);

            CaptureDigitIfInValidState(dtmfReceivedEvent);

            if (_call.GetCurrentState() == State.PlayingInterruptiblePrompt)
            {
                _promptPlayer.StopPrompt();
            }

            ProcessDigitsReceived();
        }
Ejemplo n.º 6
0
        public async void AriClient_OnChannelDtmfReceivedEvent(ISipApiClient sipApiClient, DtmfReceivedEvent dtmfReceivedEvent)
        {
            DigitTimeoutTimer.Stop();
            if (_call.GetCurrentState() == State.LanguagePrompts)
            {
                return;
            }
            if (!ShouldProcessDigit(dtmfReceivedEvent))
            {
                return;
            }
            _call.Logger.Debug($"OnChannel Dtmf Received Event {dtmfReceivedEvent.LineId}");

            LogDtmfValue(dtmfReceivedEvent);

            CaptureDigitIfInValidState(dtmfReceivedEvent);

            if (_call.GetCurrentState() == State.PlayingInterruptiblePrompt)
            {
                await _promptPlayer.StopPromptAsync();
            }

            await ProcessDigitsReceived();
        }