Skip to main content

Group channel read receipt

Users can request read receipts for messages they send. After sending a request, the sender can see how many recipients have read the message.

Send a read receipt response

When a group message is received, respond with a read receipt by calling channel.sendReadReceiptResponse().

Method

Dart
Future<int> sendReadReceiptResponse(List<String> messageIds, ErrorHandler handler)

Parameters

ParameterTypeDescription
messageIdsList<String>Server-assigned unique IDs of the messages to acknowledge.
handlerErrorHandlerEvent callback.

Code example

Dart
final channel = GroupChannel('<group-id>');
await channel.sendReadReceiptResponse(
['<message-uid-1>', '<message-uid-2>'],
(error) {
if (error?.isSuccess == true) {
print('Read receipt sent');
}
},
);

Listen for read receipt responses

Register a MessageHandler to receive read receipt events:

Dart
NCEngine.addMessageHandler('read-receipt-handler', MessageHandler(
onMessageReceiptResponse: (event) {
print('Read receipts received: ${event.responses}');
},
));

Get read receipt info

Query how many group members have read a specific message:

Dart
final channel = GroupChannel('<group-id>');
await channel.getMessageReadReceiptInfo(
['<message-uid-1>'],
(receiptInfoList, error) {
if (error == null) {
print('Read receipt info: $receiptInfoList');
}
},
);

Get read receipt users by page

Use BaseChannel.createMessagesReadReceiptUsersQuery() to page through users who have read or not read a specific message.

Dart
final query = BaseChannel.createMessagesReadReceiptUsersQuery(
MessagesReadReceiptUsersQueryParams(
channelIdentifier: ChannelIdentifier(
channelType: ChannelType.group,
channelId: '<group-id>',
),
messageId: '<message-uid-1>',
pageSize: 20,
isAscending: true,
status: MessageReadReceiptStatus.read,
),
);

await query.loadNextPage((result, error) {
if (error == null) {
print('Users: ${result?.data.length}');
print('Total matched: ${result?.totalCount}');
}
});

MessagesReadReceiptUsersQueryParams

ParameterTypeDefaultDescription
channelIdentifierChannelIdentifierRequiredTarget group channel identifier.
messageIdStringRequiredServer-assigned message ID to query.
pageSizeint20Number of users per page.
isAscendingbool?nullSort order. true for ascending, false for descending, null for the SDK default order.
statusMessageReadReceiptStatus?nullOptional filter for read or unread users.

Get read receipt info by message identifiers

Use BaseChannel.getMessageReadReceiptInfoByIdentifiers() when you need to query messages across channels by MessageIdentifier.

Dart
await BaseChannel.getMessageReadReceiptInfoByIdentifiers(
[
MessageIdentifier(
channelType: ChannelType.group,
channelId: '<group-id>',
messageId: '<message-uid-1>',
),
],
(receiptInfoList, error) {
if (error == null) {
print('Read receipt info: $receiptInfoList');
}
},
);

Get read receipt details for specific users

Use channel.getMessagesReadReceiptByUsers() to query the read status of specific users for a single message.

Dart
final channel = GroupChannel('<group-id>');
await channel.getMessagesReadReceiptByUsers(
'<message-uid-1>',
['user1', 'user2'],
(result, error) {
if (error == null) {
print('Total matched: ${result?.totalCount}');
print('Users: ${result?.users}');
}
},
);