Conversation group overview
Understand the WASM SDK conversation-group model, capability boundaries, and state-change events.
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 value | Numeric value | Meaning |
|---|---|---|
ConversationGroupTypeNormal | 0 | A normal custom group that the user can create and maintain. |
ConversationGroupTypeFilter | 1 | A filtered group maintained by SDK or server rules. |
ConversationGroupTypeAll | 2 | Used 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. Use conversationGroupID to identify the same group so that an event updates the correct record.
| Field | Type | Description |
|---|---|---|
conversationGroupID | string | Conversation group ID. |
name | string | Group name. |
serial | number | Group sequence returned by the SDK. |
version | number | Group data version. |
ex | string | Application-defined extension string. |
conversationGroupType | ConversationGroupType | Group type. |
hidden | boolean | Whether the group is hidden. |
unreadCount | number | Total unread count for conversations in the group at query time. |
conversationIDs | string[] | Conversation IDs that currently belong to the group. |
Available operations
- Create a conversation group
- Get conversation groups by type
- Page through conversations in a group
- Get the groups for a conversation
- Update a conversation group
- Reorder conversation groups
- Add conversations to groups
- Remove conversations from groups
- Delete a conversation group
Listen for group changes
Queries return the group data available at call time, while events report later changes. An operation Promise succeeding, a related event arriving, and a later query returning the latest data are three separate stages.
| Event | data type | Handling |
|---|---|---|
OnConversationGroupAdded | ConversationGroup[] | Add groups that are not already present. |
OnConversationGroupChanged | ConversationGroup[] | Update groups by conversationGroupID. |
OnConversationGroupDeleted | ConversationGroup[] | Remove deleted groups. |
OnConversationGroupMemberAdded | ConversationGroupMemberChangedCallbackData | Add newly associated conversations and their details. |
OnConversationGroupMemberDeleted | ConversationGroupMemberChangedCallbackData | Remove the corresponding conversation associations. |
import { SdkEvent } 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(SdkEvent.OnConversationGroupAdded, handleConversationGroupAdded);
openimsdk.on(SdkEvent.OnConversationGroupChanged, handleConversationGroupChanged);
openimsdk.on(SdkEvent.OnConversationGroupDeleted, handleConversationGroupDeleted);
openimsdk.on(SdkEvent.OnConversationGroupMemberAdded, handleConversationGroupMemberAdded);
openimsdk.on(SdkEvent.OnConversationGroupMemberDeleted, handleConversationGroupMemberDeleted);
function disposeConversationGroupEvents() {
openimsdk.off(SdkEvent.OnConversationGroupAdded, handleConversationGroupAdded);
openimsdk.off(SdkEvent.OnConversationGroupChanged, handleConversationGroupChanged);
openimsdk.off(SdkEvent.OnConversationGroupDeleted, handleConversationGroupDeleted);
openimsdk.off(SdkEvent.OnConversationGroupMemberAdded, handleConversationGroupMemberAdded);
openimsdk.off(SdkEvent.OnConversationGroupMemberDeleted, handleConversationGroupMemberDeleted);
}An event may arrive after the operation completes. Before updating state, use the ID to check whether the record already exists so that the same group or conversation is not appended twice.
Was this page helpful?