logo
On this page

Mark conversations


Introduction

When users need to focus on a conversation or can not deal with a conversation at the moment, you can mark the conversation for later processing, such as "starring a conversation," "collapsing a conversation," "hiding a conversation," "marking a conversation as unread," etc. You can achieve this by calling the setConversationMark interface.

Note

When a user marks a conversation, the SDK simply records the mark value of the conversation without changing the underlying logic of the conversation.

Set conversation marks

ZIM supports you in implementing conversation marking operations using either client API or server API.

Client API

1 Listen for conversationChanged

After a user logs into the ZIM SDK, they can register to listen for the conversationChanged callback interface via on, to receive notifications of changes in conversation markings.

When the conversation marks are changed, all of the user's online devices will receive a conversationChanged event notification. From this, the current marks of the conversation can be obtained from the conversation.marks field.

Untitled
// Register the SDK event notification callback
zim.on('conversationChanged', function (zim, { infoList }) {
    infoList.forEach((info) => {
        console.log(info.conversation.marks);
    });
});
1
Copied!

2 Set or cancel marks

You simply need to call the setConversationMark interface to set or cancel marks for up to 100 conversations (only supports one-on-one chats or group chats). Each conversation can have up to 20 marks.

Untitled
// Taking setting a mark with 1 for a one-on-one conversation and a group chat conversation as an example
var markType = 1;
var enable = true;
var convList = [
    { conversationID: 'One-to-one conversation', conversationType: 0 },
    { conversationID: 'Group conversation', conversationType: 2 },
];

zim.setConversationMark(markType, enable, convList)
    .then((res) => {
        // Operation successful. The conversations that failed are returned through res.failedConversationInfos.
    })
    .catch((err) => {
        // Operation failed
    });
1
Copied!

Server API

Developers can set or cancel conversation marks for multiple users in batches by calling the server-side API. For details, please refer to the server API documentation Mark Conversations.

Query conversation list by marks

When calling the queryConversationList interface, pass in a mark list by ZIMConversationFilterOption.marks, and you can use the marks as filters to get a conversation list.

Note
  • The conversation mark list ZIMConversationFilterOption.marks only supports integers in the range [1, 20]:
    • If the list contains -1, the query result will be all marked conversations;
    • If the list contains 0, the query result will be all conversations without any marks;
    • If multiple marks are passed, the query result will be the union of all the passed marks;
    • If the list is empty, the query result will be all conversations.
  • Only one-on-one conversations and group conversations are queried.

Additionally, if you need to consider whether there are unread messages in the conversation during the query, simply pass isOnlyUnreadConversation as YES when calling the queryConversationList interface.

Untitled
// For example, querying the list of group and one-to-one conversations that have a mark of 1 and contain unread messages
var config = { count: 10 };
var option = {
    marks: [1],
    conversationTypes: [],
    isOnlyUnreadConversation: true,
};

zim.queryConversationList(config, option)
    .then((res) => {
        // Operation successful
    })
    .catch((err) => {
        // Operation failed
    });
1
Copied!

Query total unread Message count by marks

Call the queryConversationTotalUnreadMessageCount interface and pass in the conversation mark list through ZIMConversationTotalUnreadMessageCountQueryConfig.marks to query the total number of unread messages for conversations marked accordingly.

Note
  • The rule for calculating the total number of unread messages here is consistent with the conversationTotalUnreadMessageCountUpdated event, which means that if there is a conversation which meets the requirements and has been muted, the unread count of this conversation will not be included in the total unread count queried here.
  • The conversation mark list (ZIMConversationTotalUnreadMessageCountQueryConfig.marks) only supports integers in the range [1, 20]:
    • If the list contains -1, the query result will be for all marked conversations;
    • If the list contains 0, the query result will be for all conversations without any marks;
    • If multiple marks are passed, the query result will be the union of all the passed marks;
    • If the list is empty, the query result will be for all conversations.
  • Only one-on-one conversations and group conversations are queried.
Untitled
// For example, querying the total number of unread messages for one-to-one and group conversations marked with 1
var config = {
    marks: [1],
    conversationTypes: [],
};

zim.queryConversationTotalUnreadMessageCount(config)
    .then((res) => {
        // Operation successful
    })
    .catch((err) => {
        // Operation failed
    });
1
Copied!

Previous

Set conversation draft

Next

Overview