如何将第一条消息设置为接收者未读?

How to set the first message as unread for the receiver?

我与两位参与者进行对话:

var createdConversation = await ConversationResource.CreateAsync(uniqueName: uniqueName);

var sender = await ParticipantResource.CreateAsync(pathConversationSid: createdConversation.Sid, identity: "sender");
var receiver = await ParticipantResource.CreateAsync(pathConversationSid: createdConversation.Sid, identity: "receiver");

我想在这个新创建的对话中发送初始消息:

var message = await MessageResource.CreateAsync(
    pathConversationSid: createdConversation.Sid,
    author: sender.Identity,
    body: intitialMessage);

之后,我希望 senderreadreceiverunread 这似乎是不可能的。
我可以将 senderlastReadMessageIndex 设置为创建的 message.Index,但这不会为 receiver 创建读取范围。只要 receiverlastReadMessageIndexnullunreadMessagesCount 也会是 null,并且看起来像 receiver此对话中没有新消息。

关于如何使用初始消息创建新对话的任何建议,其中一位用户将显示为未读?

目前无法执行此操作。这已在 Twilio 内部作为功能差距提出。

与此同时,您可能需要解决它。我想到的一件事是在您的 UI.

中将任何 lastReadMessageIndexnull 的对话标记为未读

由于没有“简单的方法”来实现这一点,我正在加载对话及其消息来计算 unreadMessagesCount

var conversation = await UserConversationResource.FetchAsync(
    pathUserSid: userSid, 
    pathConversationSid: conversationSid);

var conversationHasNoReadHorizon = conversation.UnreadMessagesCount == null;
if (conversationHasNoReadHorizon)
{
    var messages = await MessageResource.ReadAsync(pathConversationSid: conversationSid);

    return messages.Count(message => message.Author != callerId);
}
else
{
    return conversation.UnreadMessagesCount ?? 0;
}