BotSharp/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioSessionManager.cs

64 lines
2.4 KiB
C#
Raw Normal View History

2024-08-14 21:44:47 +00:00
using BotSharp.Plugin.Twilio.Models;
2024-08-08 19:54:32 +00:00
using StackExchange.Redis;
using Task = System.Threading.Tasks.Task;
namespace BotSharp.Plugin.Twilio.Services
{
public class TwilioSessionManager : ITwilioSessionManager
{
private readonly ConnectionMultiplexer _redis;
public TwilioSessionManager(ConnectionMultiplexer redis)
{
_redis = redis;
}
2024-08-14 21:44:47 +00:00
public async Task<AssistantMessage> GetAssistantReplyAsync(string conversationId, int seqNum)
2024-08-08 19:54:32 +00:00
{
var db = _redis.GetDatabase();
2024-08-14 21:44:47 +00:00
var key = $"{conversationId}:Assisist:{seqNum}";
var jsonStr = await db.StringGetAsync(key);
return jsonStr.IsNull ? null : JsonSerializer.Deserialize<AssistantMessage>(jsonStr);
2024-08-08 19:54:32 +00:00
}
2024-08-14 21:44:47 +00:00
public async Task<List<string>> RetrieveStagedCallerMessagesAsync(string conversationId, int seqNum)
2024-08-08 19:54:32 +00:00
{
var db = _redis.GetDatabase();
2024-08-14 21:44:47 +00:00
var key = $"{conversationId}:Caller:{seqNum}";
2024-08-08 19:54:32 +00:00
return (await db.ListRangeAsync(key))
.Select(x => (string)x)
.ToList();
}
2024-08-14 21:44:47 +00:00
public async Task SetAssistantReplyAsync(string conversationId, int seqNum, AssistantMessage message)
2024-08-08 19:54:32 +00:00
{
2024-08-14 21:44:47 +00:00
var jsonStr = JsonSerializer.Serialize(message);
2024-08-08 19:54:32 +00:00
var db = _redis.GetDatabase();
2024-08-14 21:44:47 +00:00
var key = $"{conversationId}:Assisist:{seqNum}";
await db.StringSetAsync(key, jsonStr, TimeSpan.FromMinutes(5));
2024-08-08 19:54:32 +00:00
}
2024-08-14 21:44:47 +00:00
public async Task StageCallerMessageAsync(string conversationId, int seqNum, string message)
2024-08-08 19:54:32 +00:00
{
var db = _redis.GetDatabase();
2024-08-14 21:44:47 +00:00
var key = $"{conversationId}:Caller:{seqNum}";
2024-08-08 19:54:32 +00:00
await db.ListRightPushAsync(key, message);
await db.KeyExpireAsync(key, DateTime.UtcNow.AddMinutes(10));
}
2024-08-14 21:44:47 +00:00
public async Task SetReplyIndicationAsync(string conversationId, int seqNum, string indication)
{
var db = _redis.GetDatabase();
var key = $"{conversationId}:Indication:{seqNum}";
await db.StringSetAsync(key, indication, TimeSpan.FromMinutes(5));
}
public async Task<string> GetReplyIndicationAsync(string conversationId, int seqNum)
{
var db = _redis.GetDatabase();
var key = $"{conversationId}:Indication:{seqNum}";
return await db.StringGetAsync(key);
}
2024-08-08 19:54:32 +00:00
}
}