Пример #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);
            }
        }
Пример #2
0
 public void CaptureDigitIfInValidState(DtmfReceivedEvent e)
 {
     if (_call.GetCurrentState() == State.PlayingInterruptiblePrompt ||
         _call.GetCurrentState() == State.CapturingInput)
     {
         DigitsReceived += e.Digit;
     }
 }
Пример #3
0
        private void LogDtmfValue(DtmfReceivedEvent e)
        {
            if (_call.LogData.ContainsKey("LastDTMF"))
            {
                _call.LogData["LastDTMF"] = e.Digit;
            }
            else
            {
                _call.LogData.Add("LastDTMF", e.Digit);
            }

            _call.Logger.Debug("DTMF Received", _call.LogData);
        }
Пример #4
0
        private bool ShouldProcessDigit(DtmfReceivedEvent dtmfReceivedEvent)
        {
            switch (Direction)
            {
            case Direction.Incoming:
                return(dtmfReceivedEvent.LineId == _call.CallState.GetIncomingLineId());

            case Direction.Outgoing:
                return(dtmfReceivedEvent.LineId == _call.CallState.GetOutgoingLineId());

            case Direction.Both:
                return(dtmfReceivedEvent.LineId == _call.CallState.GetIncomingLineId() ||
                       dtmfReceivedEvent.LineId == _call.CallState.GetOutgoingLineId());

            default:
                return(false);
            }
        }
Пример #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();
        }
Пример #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();
        }