diff --git a/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs b/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs index 34807ad9e..4f91b81b9 100644 --- a/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs +++ b/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs @@ -43,14 +43,10 @@ public async Task InitiateConversation(ConversationalVoiceRequest r } VoiceResponse response = null; - request.ConversationId = $"TwilioVoice_{request.CallSid}"; - var instruction = new ConversationalVoiceResponse { SpeechPaths = ["twilio/welcome.mp3"], - CallbackPath = $"twilio/voice/{request.ConversationId}/receive/0", - ActionOnEmptyResult = true, - Timeout = 2 + ActionOnEmptyResult = true }; await HookEmitter.Emit(_services, async hook => { @@ -60,7 +56,8 @@ await HookEmitter.Emit(_services, async hook => OnlyOnce = true }); - instruction.CallbackPath = $"{instruction.CallbackPath}?{GenerateStatesParameter(request.States)}"; + request.ConversationId = $"TwilioVoice_{request.CallSid}"; + instruction.CallbackPath = $"twilio/voice/{request.ConversationId}/receive/0?{GenerateStatesParameter(request.States)}"; var twilio = _services.GetRequiredService(); if (string.IsNullOrWhiteSpace(request.Intent)) @@ -109,7 +106,6 @@ public async Task ReceiveCallerMessage(ConversationalVoiceRequest r var twilio = _services.GetRequiredService(); var messageQueue = _services.GetRequiredService(); var sessionManager = _services.GetRequiredService(); - var messages = await sessionManager.RetrieveStagedCallerMessagesAsync(request.ConversationId, request.SeqNum); string text = (request.SpeechResult + "\r\n" + request.Digits).Trim(); @@ -148,7 +144,7 @@ await HookEmitter.Emit(_services, async hook => else { // keep waiting for user response - if (request.Attempts > 2) + if (request.Attempts > 3) { var instruction = new ConversationalVoiceResponse { @@ -187,7 +183,7 @@ await HookEmitter.Emit(_services, async hook => ActionOnEmptyResult = true }; - if (request.Attempts == 2) + if (request.Attempts == 3) { instruction.SpeechPaths.Add($"twilio/say-it-again-{Random.Shared.Next(1, 5)}.mp3"); } @@ -220,7 +216,6 @@ public async Task ReplyCallerMessage(ConversationalVoiceRequest req var sessionManager = _services.GetRequiredService(); var twilio = _services.GetRequiredService(); var fileStorage = _services.GetRequiredService(); - if (request.SpeechResult != null) { await sessionManager.StageCallerMessageAsync(request.ConversationId, nextSeqNum, request.SpeechResult); diff --git a/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs b/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs index ebb592290..8acbc9f4a 100644 --- a/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs +++ b/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs @@ -115,7 +115,7 @@ public VoiceResponse ReturnNoninterruptedInstructions(ConversationalVoiceRespons }, Action = new Uri($"{_settings.CallbackHost}/{conversationalVoiceResponse.CallbackPath}"), SpeechModel = Gather.SpeechModelEnum.PhoneCall, - SpeechTimeout = conversationalVoiceResponse.Timeout > 0 ? conversationalVoiceResponse.Timeout.ToString() : "3", + SpeechTimeout = "auto", // conversationalVoiceResponse.Timeout > 0 ? conversationalVoiceResponse.Timeout.ToString() : "3", Timeout = conversationalVoiceResponse.Timeout > 0 ? conversationalVoiceResponse.Timeout : 3, ActionOnEmptyResult = conversationalVoiceResponse.ActionOnEmptyResult };