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); } }
public void CaptureDigitIfInValidState(DtmfReceivedEvent e) { if (_call.GetCurrentState() == State.PlayingInterruptiblePrompt || _call.GetCurrentState() == State.CapturingInput) { DigitsReceived += e.Digit; } }
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); }
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); } }
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(); }
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(); }