diff --git a/src/Tests/ConversationStorageTests.cs b/src/Tests/ConversationStorageTests.cs
index d3aaf8f..342c8ca 100644
--- a/src/Tests/ConversationStorageTests.cs
+++ b/src/Tests/ConversationStorageTests.cs
@@ -60,5 +60,15 @@ await storage.SaveAsync(new ContentMessage(
Assert.NotNull(text.AdditionalProperties);
Assert.Equal("ContentValue", (string)text.AdditionalProperties["ContentProp"]!);
}
+
+ message.AdditionalProperties?["Agent"] = "Calendar";
+
+ await storage.SaveAsync(message);
+
+ var updatedMessage = await storage.GetMessageAsync(user.Number, messageId);
+
+ Assert.NotNull(updatedMessage?.AdditionalProperties);
+ Assert.Equal("Calendar", updatedMessage.AdditionalProperties?["Agent"]);
+ Assert.Equal("MessageValue", (string)updatedMessage.AdditionalProperties!["MessageProp"]!);
}
}
diff --git a/src/Tests/Tests.csproj b/src/Tests/Tests.csproj
index 5e9b940..c41eccb 100644
--- a/src/Tests/Tests.csproj
+++ b/src/Tests/Tests.csproj
@@ -4,6 +4,7 @@
net8.0
enable
enable
+ Preview
false
true
diff --git a/src/WhatsApp/ConversationStorage.cs b/src/WhatsApp/ConversationStorage.cs
index 8f3ad81..4cc24d9 100644
--- a/src/WhatsApp/ConversationStorage.cs
+++ b/src/WhatsApp/ConversationStorage.cs
@@ -38,7 +38,16 @@ public async Task SaveAsync(IMessage message, CancellationToken cancellationToke
var conversation = await conversationsRepository.Value.GetAsync(message.UserNumber, message.ConversationId, cancellationToken) ??
new(message.UserNumber, message.ConversationId, [], message.Timestamp);
- conversation.Messages.Add(message);
+ if (conversation.Messages.FirstOrDefault(x => x.Id == message.Id) is { } existing)
+ {
+ // Message is being updated, so we can just replace it
+ var index = conversation.Messages.IndexOf(existing);
+ conversation.Messages[index] = message;
+ }
+ else
+ {
+ conversation.Messages.Add(message);
+ }
// Save the conversation
await conversationsRepository.Value.PutAsync(conversation, cancellationToken);