tencent cloud

即时通信 IM

动态与公告
产品动态
公告
产品简介
产品概述
基本概念
应用场景
功能介绍
账号系统
用户资料与关系链
消息管理
群组相关
公众号系统
音视频通话 Call
使用限制
购买指南
计费概述
价格说明
购买指引
续费指引
停服说明
退费说明
开发指引
Demo 专区
开通服务
体验 Demo
快速跑通
下载中心
SDK & Demo 源码
更新日志
聊天互动(含 UI)
TUIKit 组件介绍
快速开始
全功能接入
单功能接入
AI 集成
构建基础界面
更多特性
定义外观
国际化界面语言
推送服务(Push)
服务概述
名词解释
开通服务
快速跑通
厂商通道
数据统计
排查工具
客户端 API
服务端 API
推送回调
高级功能
更新日志
错误码
常见问题
智能客服
功能概述
快速入门
集成指引
管理员操作手册
客服操作手册
更多实践
直播间搭建
AI 聊天机器人方案
超大娱乐协作社群
Discord 实现指南
游戏内集成 Chat 指南
类 WhatsApp Channel 搭建方案
发送红包
Chat 应对防火墙限制相关
无 UI 集成
快速开始
集成 SDK
初始化
登录登出
消息相关
会话相关
群组相关
社群话题
用户管理
离线推送
云端搜索
本地搜索
公众号
客户端 API
JavaScript
Android
iOS & macOS
Swift
Flutter
Electron
Unity
React Native
C 接口
C++
服务端 API
生成 UserSig
REST API
第三方回调
控制台指南
新版控制台介绍
创建并升级应用
基本配置
功能配置
账号管理
群组管理
公众号管理
回调配置
用量统计
资源包查看指南
实时监控
开发辅助工具
访问管理
高级功能
常见问题
uni-app 常见问题
购买相关问题
SDK 相关问题
账号鉴权相关问题
用户资料与关系链相关问题
消息相关问题
群组相关问题
直播群相关问题
昵称头像相关问题
协议与认证
服务等级协议
安全合规认证
IM 政策
隐私政策
数据隐私和安全协议
平滑迁移方案
平滑迁移完整版
平滑迁移简化版
错误码
联系我们

JavaScript

PDF
聚焦模式
字号
最后更新时间: 2025-03-24 11:08:20

功能描述

消息已读回执指的是,发送端往会话中发送消息,如果他想知道哪些人读过/还没读过这条消息,那么他就需要开启消息已读回执功能。 开启后,发送端发送消息时可以设置消息是否需要已读回执。如果设置为“需要”,接收端查看消息后才会发送自己已读回执给发送端。
群消息已读回执,高效沟通必备功能。作为一种强反馈工具,支持查看已读/未读已发送消息的人数和成员,尤其在商务、办公场景下,可帮助团队构建更加及时、高效的沟通氛围。
说明:
1. 该功能仅对专业版、专业版plus和企业版客户开放,购买专业版、专业版plus或企业版后可使用。
2. 社群和直播群不支持群消息已读回执。


消息已读回执

设置支持已读回执的群类型
如果是群消息已读回执,需要先在 Chat Console > Configuration > Group Configuration > Read receipts for group messages 中设置支持已读回执消息的群类型。
发送端设置消息需要已读回执
发送端创建消息,设置 needReadReceipt: true,然后发送消息。
示例
// 发送 C2C 消息
let message = chat.createTextMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
payload: {
text: 'Hello world!'
},
// 如果您发消息需要已读回执,需购买专业版、专业版Plus或企业版套餐,并且创建消息时将 needReadReceipt 设置为 true
needReadReceipt: true
});
// 2. 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
// 发送群消息
let message = chat.createTextMessage({
to: 'test',
conversationType: TencentCloudChat.TYPES.CONV_GROUP,
payload: {
text: 'Hello world!'
},
// 如果您发消息需要已读回执,需购买专业版、专业版Plus或企业版套餐,并且创建消息时将 needReadReceipt 设置为 true
needReadReceipt: true
});
// 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

接收端发送消息已读回执

接收端收到消息后,可以通过消息对象 MessageneedReadReceipt 字段判断消息是否需要已读回执,如果需要已读回执,当用户查看消息后,调用 sendMessageReadReceipt 接口发送消息已读回执。
说明:
1. messageList 里的消息必须在同一个 C2C 或 Group 会话中。
2. 调用该接口成功后,会话未读数不会变化,消息发送者会收到 TencentCloudChat.TYPES.MESSAGE_READ_RECEIPT_RECEIVED 事件,回调里面会携带消息的最新已读信息。
3. 使用该接口需要您购买专业版、专业版plus或企业版套餐。
4. 社群和直播群不支持群消息已读回执。
5. C2C 消息调用此接口成功后,消息发送方的 message.readReceiptInfo.isPeerRead 属性会更新为 true,此属性可用于 C2C 已读回执消息状态渲染,调用此接口不会更新消息的 isPeerRead 属性。
接口
chat.sendMessageReadReceipt(messageList);
参数
Name
Type
Description
messageList
Array
同一群会话的消息列表,最大长度为30。
返回值
Promise
示例
// 拉取群消息列表
let messageList = null;
chat.getMessageList({conversationID: 'GROUPtest'}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
chat.sendMessageReadReceipt(messageList).then(function() {
// 发送群消息已读回执成功
}).catch(function(imError) {
// 发送群消息已读回执失败
});
});
// 拉取C2C消息列表
let messageList = null;
chat.getMessageList({conversationID: 'C2Ctest'}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
chat.sendMessageReadReceipt(messageList).then(function() {
// 发送群消息已读回执成功
}).catch(function(imError) {
// 发送群消息已读回执失败
});
});

发送端监听消息已读回执通知

接收端发送消息已读回执后,发送端可以通过监听消息已读回执通知,在通知中更新 UI,例如更新为 “2 人已读”。
示例
let onMessageReadReceiptReceived = function(event) {
// event.data - 存储消息已读回执信息的数组
const readReceiptInfoList = event.data;
readReceiptInfoList.forEach((item) => {
const { groupID, userID, messageID, readCount, unreadCount, isPeerRead, timestamp } = item;
// messageID - 消息 ID
// userID - C2C 消息接收方
// isPeerRead - C2C 消息对端是否已读
// timestamp - C2C 消息对端发送已读回执时间,单位:秒
// groupID - 群组 ID
// readCount - 群消息已读人数
// unreadCount - 群消息未读人数
const message = chat.findMessage(messageID);
if (message) {
if (message.conversationType === TencentCloudChat.TYPES.CONV_C2C) {
if (message.readReceiptInfo.isPeerRead === true) {
// 对端已读
}
} else if (message.conversationType === TencentCloudChat.TYPES.CONV_GROUP) {
if (message.readReceiptInfo.unreadCount === 0) {
// 全部已读
} else {
// message.readReceiptInfo.readCount - 消息最新的已读数
// 如果想要查询哪些群成员已读了此消息,请使用 [getGroupMessageReadMemberList] 接口
}
}
}
});
}
chat.on(TencentCloudChat.EVENT.MESSAGE_READ_RECEIPT_RECEIVED, onMessageReadReceiptReceived);

发送端主动拉取消息已读回执信息

发送端从其他界面进入消息列表后,先拉取历史消息,再调用 getMessageReadReceipt 接口拉取消息已读回执信息。
说明:
1. messageList 里的消息必须在同一个 C2C 或 Group 会话中。
2. 社群和直播群不支持群消息已读回执。
接口
chat.getMessageReadReceiptList(messageList);
参数
Name
Type
Description
messageList
Array
同一群会话的消息列表。
返回值
Promise
示例
// 拉取群消息列表
let messageList = null;
chat.getMessageList({conversationID: 'GROUPtest'}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
chat.getMessageReadReceiptList(messageList).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
// 成功后,Message.readReceiptInfo 包含消息的已读回执信息
// Message.readReceiptInfo.readCount -
// 消息的已读数,如果想要查询哪些群成员已读了此消息,请使用 [getGroupMessageReadMemberList] 接口
// Message.readReceiptInfo.unreadCount - 消息的未读数,当为0的时候,表示“全部已读”。
}).catch(function(imError) {
// 拉取已读回执列表失败
});
});
// 拉取 C2C 消息列表
let messageList = null;
chat.getMessageList({conversationID: 'C2Ctest'}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
chat.getMessageReadReceiptList(messageList).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
// 成功后,Message.readReceiptInfo 包含消息的已读回执信息
// Message.readReceiptInfo.isPeerRead - 对端是否已发送已读回执
}).catch(function(imError) {
// 拉取已读回执列表失败
});
});

发送端主动拉取群消息已读或未读成员列表

发送端在需要查看群消息已读或未读成员列表时,可以调用 getGroupMessageReadMemberList 接口分页拉取消息已读或未读群成员列表。
接口
chat.getGroupMessageReadMemberList(options);
参数
参数 optionsObject类型,包含的属性值如下:
名称
类型
描述
message
Message
消息实例。
cursor
String
分页拉取的游标,第一次拉取传''
filter
Number
指定拉取已读或未读群成员列表。
0 - 拉取已读成员列表
1 - 拉取未读成员列表
count
Number
分页拉取的个数,最大支持 100 个。
返回值
Promise
示例
// 拉取群消息已读成员列表
let promise = chat.getGroupMessageReadMemberList({
message,
filter: 0,
cursor: '', // 第一次拉取传''
count: 30,
});
promise.then(function(imResponse) {
const { isCompleted, cursor, messageID, readUserIDList } = imResponse.data;
// isCompleted - true,拉取完成;false 未完成
// cursor - 当 isCompleted 为 false 的时候用于续拉
// messageID - 群消息的 ID
// readUserIDList -
// 已读的群成员 userID 列表。接入侧可调用 getGroupMemberProfile 接口查询群成员的资料,如群名片、头像、昵称等
}).catch(function(imError) {
// 拉取群消息已读群成员列表失败
});
// 拉取群消息未读成员列表
let promise = chat.getGroupMessageReadMemberList({
message,
filter: 1,
cursor: '', // 第一次拉取传''
count: 30,
});
promise.then(function(imResponse) {
const { isCompleted, cursor, messageID, readUserIDList } = imResponse.data;
// isCompleted - true,拉取完成;false 未完成
// cursor - 当 isCompleted 为 false 的时候用于续拉
// messageID - 群消息的 ID
// unreadUserIDList -
// 未读的群成员 userID 列表。接入侧可调用 getGroupMemberProfile 接口查询群成员的资料,如群名片、头像、昵称等
}).catch(function(imError) {
// 拉取群消息未读群成员列表失败
// 10062 - 找不到群消息的已读回执信息
});


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈