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); } }
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); }
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); } }
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); }
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(); }