private async Task ProcessRecognizedCall(SpeechRecognitionEventArgs e) { using (var activity = Constants.ActivitySource.StartActivity("ProcessRecognizedCall", ActivityKind.Server)) { Logger.Info($"{_logClientId}| Incoming Transmission: {e.Result.Text}"); var luisJson = Task.Run(() => LuisService.ParseIntent(e.Result.Text)).Result; Logger.Debug($"{_logClientId}| LUIS Response: {luisJson}"); var radioCall = new BaseRadioCall(luisJson); activity?.AddTag("Frequency", _frequency); activity?.AddTag("BotType", _botType); activity?.AddTag("Callsign", _callsign); activity?.AddTag("Sender", radioCall.Sender?.Callsign); activity?.AddTag("Intent", radioCall.Intent); activity?.AddTag("Request", radioCall.Message); var response = Controller.ProcessRadioCall(radioCall); activity?.AddTag("Response Text", response); if (!string.IsNullOrEmpty(response)) { Logger.Info($"{_logClientId}| Outgoing Transmission: {response}"); var audioResponse = await Task.Run(() => Speaker.CreateResponse( $"<speak version=\"1.0\" xmlns=\"https://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name =\"{Controller.Voice}\">{response}</voice></speak>")); if (audioResponse == null) { activity?.AddTag("Response", "Failure"); activity?.AddEvent(new ActivityEvent("Synthesis Failure")); Logger.Error($"{_logClientId}| Synthesis Failure"); using (Constants.ActivitySource.StartActivity("EnqueueResponseAudio", ActivityKind.Producer)) { Logger.Trace($"{_logClientId}| Sending Failure Message"); Controller.Radio.TransmissionQueue.Enqueue(FailureMessage); } } else { activity?.AddTag("Response", "Success"); using (Constants.ActivitySource.StartActivity("EnqueueResponseAudio", ActivityKind.Producer)) { Controller.Radio.TransmissionQueue.Enqueue(audioResponse); } } } else { activity?.AddTag("Response", "Ignored"); Logger.Info($"{_logClientId}| Radio Call Ignored due to null response for Radio Call Processing"); } if (Controller.Radio.discordTransmissionLogChannelId > 0) { LogTransmissionToDiscord(radioCall, response); } } }