Browse SDKs · WASM
SDKsWASMEnterprise

Conversation group overview

Understand the WASM SDK conversation-group model, capability boundaries, and incremental events.

Copy

Conversation groups organize the signed-in user's conversation list into categories such as “Work,” “Unread,” or “Later.” They manage relationships between conversationID values and groups. They do not create chat groups, change group membership, or alter message recipients.

Group types

ConversationGroupType exposes three types:

Enum valueNumeric valueMeaning
ConversationGroupTypeNormal0A normal custom group that the user can create and maintain.
ConversationGroupTypeFilter1A filtered group maintained by SDK or server rules.
ConversationGroupTypeAll2Used when querying all types.

Use ConversationGroupTypeNormal for ordinary user-defined categories. The active OpenIMServer deployment determines how filtered groups are generated; do not fabricate system groups in the client from names alone.

Group data

ConversationGroup represents a conversation group. Merge snapshots and event increments by the stable conversationGroupID.

FieldTypeDescription
conversationGroupIDstringConversation group ID.
namestringGroup name.
serialnumberGroup sequence returned by the SDK.
versionnumberGroup data version.
exstringApplication-defined extension string.
conversationGroupTypeConversationGroupTypeGroup type.
hiddenbooleanWhether the group is hidden.
unreadCountnumberSnapshot of the total unread count for conversations in the group.
conversationIDsstring[]Conversation IDs that currently belong to the group.

Available operations

Listen for group changes

Queries establish a snapshot at call time; events merge subsequent increments. An active-call Promise succeeding, a related event arriving, and a reconciliation query are three separate stages.

Eventdata typeHandling
OnConversationGroupAddedConversationGroup[]Merge newly added groups.
OnConversationGroupChangedConversationGroup[]Update groups by conversationGroupID.
OnConversationGroupDeletedConversationGroup[]Remove deleted groups.
OnConversationGroupMemberAddedConversationGroupMemberChangedCallbackDataMerge newly associated conversations and conversation details.
OnConversationGroupMemberDeletedConversationGroupMemberChangedCallbackDataRemove the corresponding conversation associations.
import { CbEvents } from '@openim/wasm-client-sdk';

function handleConversationGroupAdded({ data }) {
  mergeConversationGroups(data);
}

function handleConversationGroupChanged({ data }) {
  mergeConversationGroups(data);
}

function handleConversationGroupDeleted({ data }) {
  for (const group of data) {
    removeConversationGroup(group.conversationGroupID);
  }
}

function handleConversationGroupMemberAdded({ data }) {
  mergeConversationGroupMembers(
    data.group.conversationGroupID,
    data.conversationIDs,
    data.conversations,
  );
}

function handleConversationGroupMemberDeleted({ data }) {
  removeConversationGroupMembers(data.group.conversationGroupID, data.conversationIDs);
}

openimsdk.on(CbEvents.OnConversationGroupAdded, handleConversationGroupAdded);
openimsdk.on(CbEvents.OnConversationGroupChanged, handleConversationGroupChanged);
openimsdk.on(CbEvents.OnConversationGroupDeleted, handleConversationGroupDeleted);
openimsdk.on(CbEvents.OnConversationGroupMemberAdded, handleConversationGroupMemberAdded);
openimsdk.on(CbEvents.OnConversationGroupMemberDeleted, handleConversationGroupMemberDeleted);

function disposeConversationGroupEvents() {
  openimsdk.off(CbEvents.OnConversationGroupAdded, handleConversationGroupAdded);
  openimsdk.off(CbEvents.OnConversationGroupChanged, handleConversationGroupChanged);
  openimsdk.off(CbEvents.OnConversationGroupDeleted, handleConversationGroupDeleted);
  openimsdk.off(CbEvents.OnConversationGroupMemberAdded, handleConversationGroupMemberAdded);
  openimsdk.off(CbEvents.OnConversationGroupMemberDeleted, handleConversationGroupMemberDeleted);
}

An event may arrive after the active call completes. Merge state idempotently by ID instead of simply appending arrays.