Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions src/Plugins/BotSharp.Plugin.Twilio/TwilioStreamMiddleware.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using BotSharp.Abstraction.Realtime;
using BotSharp.Abstraction.Realtime.Models;
using BotSharp.Abstraction.Routing;
using BotSharp.Abstraction.Utilities;
using BotSharp.Plugin.Twilio.Interfaces;
using BotSharp.Plugin.Twilio.Models.Stream;
using Microsoft.AspNetCore.Http;
Expand Down Expand Up @@ -88,10 +89,15 @@ private async Task HandleWebSocket(IServiceProvider services, string agentId, st
continue;
}

var (eventType, data) = MapEvents(conn, receivedText);
var (eventType, data) = MapEvents(conn, receivedText, conversationId);

if (eventType == "user_connected")
{
#if DEBUG
_logger.LogCritical($"Start twilio stream connection for conversation ({conversationId})");
#else
_logger.LogInformation($"Start twilio stream connection for conversation ({conversationId})");
#endif
// Connect to model
await ConnectToModel(hub, webSocket);
}
Expand All @@ -115,6 +121,11 @@ private async Task HandleWebSocket(IServiceProvider services, string agentId, st
}
else if (eventType == "user_disconnected")
{
#if DEBUG
_logger.LogCritical($"Disconnecting twilio stream connection for conversation ({conversationId})");
#else
_logger.LogInformation($"Disconnecting twilio stream connection for conversation ({conversationId})");
#endif
await hub.Completer.Disconnect();
await HandleUserDisconnected();
}
Expand All @@ -131,9 +142,19 @@ await hub.ConnectToModel(async data =>
});
}

private (string, string) MapEvents(RealtimeHubConnection conn, string receivedText)
private (string, string) MapEvents(RealtimeHubConnection conn, string receivedText, string conversationId)
{
var response = JsonSerializer.Deserialize<StreamEventResponse>(receivedText);
StreamEventResponse? response = new();

try
{
response = JsonSerializer.Deserialize<StreamEventResponse>(receivedText);
}
catch (Exception ex)
{
_logger.LogError(ex, $"Error when deserializing twilio stream event response for conversation ({conversationId}) (response: {receivedText?.SubstringMax(30)})");
}

conn.StreamId = response.StreamSid;
string eventType = response.Event;
string data = string.Empty;
Expand Down
Loading