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().

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('group-receipt-handler', MessageHandler(
onMessageReceiptResponse: (event) {
print('Read receipts received: ${event.responses}');
},
));

Get read receipt info

Query how many group members have read specific messages:

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}');
}
});

Get read receipt info by message identifiers

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

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}');
}
},
);