Skip to content

Commit 1d2f92a

Browse files
authored
Hang-up if waiting AI Response Timeout
Hang-up if waiting AI Response Timeout
2 parents f41820f + c6fc411 commit 1d2f92a

File tree

5 files changed

+171
-152
lines changed

5 files changed

+171
-152
lines changed

src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ public interface IConversationService
3232
/// Send message to LLM
3333
/// </summary>
3434
/// <param name="agentId"></param>
35-
/// <param name="lastDalog"></param>
35+
/// <param name="lastDialog"></param>
36+
/// <param name="replyMessage"></param>
3637
/// <param name="onResponseReceived">Received the response from AI Agent</param>
37-
/// <param name="onFunctionExecuting">This delegate is useful when you want to report progress on UI</param>
38-
/// <param name="onFunctionExecuted">This delegate is useful when you want to report progress on UI</param>
3938
/// <returns></returns>
4039
Task<bool> SendMessage(string agentId,
41-
RoleDialogModel lastDalog,
40+
RoleDialogModel lastDialog,
4241
PostbackMessageModel? replyMessage,
4342
Func<RoleDialogModel, Task> onResponseReceived);
4443

src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>$(TargetFramework)</TargetFramework>
55
<LangVersion>$(LangVersion)</LangVersion>
66
<VersionPrefix>$(BotSharpVersion)</VersionPrefix>
77
<GeneratePackageOnBuild>$(GeneratePackageOnBuild)</GeneratePackageOnBuild>
88
<OutputPath>$(SolutionDir)packages</OutputPath>
9+
<Nullable>enable</Nullable>
910
</PropertyGroup>
1011

1112
<ItemGroup>

src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public async Task<TwiMLResult> ReceiveCallerMessage(ConversationalVoiceRequest r
142142
await messageQueue.EnqueueAsync(callerMessage);
143143

144144
response = new VoiceResponse();
145-
response.Redirect(new Uri($"{_settings.CallbackHost}/twilio/voice/{request.ConversationId}/reply/{request.SeqNum}?{GenerateStatesParameter(request.States)}"), HttpMethod.Post);
145+
response.Redirect(new Uri($"{_settings.CallbackHost}/twilio/voice/{request.ConversationId}/reply/{request.SeqNum}?{GenerateStatesParameter(request.States)}&AIResponseWaitTime=0"), HttpMethod.Post);
146146

147147
await HookEmitter.Emit<ITwilioSessionHook>(_services, async hook =>
148148
{
@@ -217,8 +217,22 @@ public async Task<TwiMLResult> ReplyCallerMessage(ConversationalVoiceRequest req
217217

218218
var reply = await sessionManager.GetAssistantReplyAsync(request.ConversationId, request.SeqNum);
219219
VoiceResponse response;
220+
221+
if (request.AIResponseWaitTime > 5)
222+
{
223+
// Wait AI Response Timeout
224+
await HookEmitter.Emit<ITwilioSessionHook>(_services, async hook =>
225+
{
226+
request.AIResponseErrorMessage = $"AI response timeout: AIResponseWaitTime greater than {request.AIResponseWaitTime}, please check internal error log!";
227+
await hook.OnAgentHangUp(request);
228+
}, new HookEmitOption
229+
{
230+
OnlyOnce = true
231+
});
220232

221-
if (reply == null)
233+
response = twilio.HangUp($"twilio/error.mp3");
234+
}
235+
else if (reply == null)
222236
{
223237
var indication = await sessionManager.GetReplyIndicationAsync(request.ConversationId, request.SeqNum);
224238
if (indication != null)
@@ -262,7 +276,7 @@ public async Task<TwiMLResult> ReplyCallerMessage(ConversationalVoiceRequest req
262276
var instruction = new ConversationalVoiceResponse
263277
{
264278
SpeechPaths = speechPaths,
265-
CallbackPath = $"twilio/voice/{request.ConversationId}/reply/{request.SeqNum}?{GenerateStatesParameter(request.States)}",
279+
CallbackPath = $"twilio/voice/{request.ConversationId}/reply/{request.SeqNum}?{GenerateStatesParameter(request.States)}&AIResponseWaitTime={++request.AIResponseWaitTime}",
266280
ActionOnEmptyResult = true
267281
};
268282

@@ -301,7 +315,7 @@ await HookEmitter.Emit<ITwilioSessionHook>(_services, async hook =>
301315
var instruction = new ConversationalVoiceResponse
302316
{
303317
SpeechPaths = instructions,
304-
CallbackPath = $"twilio/voice/{request.ConversationId}/reply/{request.SeqNum}?{GenerateStatesParameter(request.States)}",
318+
CallbackPath = $"twilio/voice/{request.ConversationId}/reply/{request.SeqNum}?{GenerateStatesParameter(request.States)}&AIResponseWaitTime={++request.AIResponseWaitTime}",
305319
ActionOnEmptyResult = true
306320
};
307321

src/Plugins/BotSharp.Plugin.Twilio/Models/ConversationalVoiceRequest.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@ namespace BotSharp.Plugin.Twilio.Models;
55
public class ConversationalVoiceRequest : VoiceRequest
66
{
77
[FromQuery(Name = "agent-id")]
8-
public string AgentId { get; set; }
8+
public string AgentId { get; set; } = string.Empty;
99

1010
[FromRoute]
11-
public string ConversationId { get; set; }
11+
public string ConversationId { get; set; } = string.Empty;
1212

1313
[FromRoute]
1414
public int SeqNum { get; set; }
1515

1616
public int Attempts { get; set; } = 1;
17+
public int AIResponseWaitTime { get; set; } = 0;
18+
public string? AIResponseErrorMessage { get; set; } = string.Empty;
1719

18-
public string Intent { get; set; }
20+
public string Intent { get; set; } = string.Empty;
1921

2022
public List<string> States { get; set; } = [];
2123
}

0 commit comments

Comments
 (0)