查询消息

功能描述

接入侧根据 messageID 可以调用 findMessages 查询本地消息。
如果您想搜索全量的云端消息,请使用 searchCloudMessages

findMessage

说明:
1. 该接口查询的是通过 getMessageList 存入本地的消息。
接口
chat.findMessage(messageID);
参数
Name
Type
Description
messageID
String
消息 ID
返回值
Messagenull
示例
let message = chat.findMessage('144115217363870632-1647417469-77069006');
if (message) {
// 读取 message 相关属性,如已读回执信息 readReceiptInfo
}

searchCloudMessages

说明:
1. 此功能属于增值服务,需要您购买云端搜索插件,请点击 购买
2. 此接口本地限频 2 次/秒。
3. 搜索【全部会话】的消息,如果匹配到的消息数量 messageCount > 1,则接口返回的 messageList 为 [],您可以在 UI 上展示 【${messageCount} 条相关记录】。如果您想高亮展示匹配到的消息,请参考【指定搜索】,将接口返回的 messageList 高亮展示。
4. 搜索【全部会话】的消息,如果某个会话中匹配到的消息条数 = 1,则 messageList 为匹配到的那条消息。
5. 社群、topic、直播群,不支持搜索云端消息。
接口
chat.searchCloudMessages(options);
参数
参数 optionsObject类型,包含的属性值如下:
Name
Type
Description
keywordList
Array.<String>
关键字列表,最多支持 5 个。当消息发送者以及消息类型均未指定时,关键字列表必须非空;否则,关键字列表可以为空。
keywordListMatchType
String
关键字列表匹配类型,or: “或”关系搜索(默认); and: “与”关系搜索
senderUserIDList
Array.<String>
指定 userID 发送的消息,最多支持 5 个。
messageTypeList
Array.<String>
指定搜索的消息类型集合,默认搜索全部类型。
不传入时,表示搜索支持的全部类型消息(TencentCloudChat.TYPES.MSG_FACETencentCloudChat.TYPES.MSG_GRP_TIPTencentCloudChat.TYPES.MSG_GRP_SYS_NOTICE 不支持)
传值时,取值详见 TencentCloudChat.TYPES
conversationID
String
搜索“全部会话”还是搜索“指定的会话”,不传入时,表示全部会话,默认:全部会话。会话 ID 组成方式:
C2C${userID}(单聊)
GROUP${groupID}(群聊)
社群、topic、直播群,不支持搜索云端消息

timePosition
Number
搜索的起始时间点。默认为 0 即代表从现在开始搜索。单位:秒
timePeriod
Number
从起始时间点开始的过去时间范围,单位秒。默认为 0 即代表不限制时间范围,传 24 * 60 * 60 代表过去一天。
cursor
String
每次云端搜索的起始位置。第一次搜索时不要传入 cursor,继续搜索时填入上次调用 searchCloudMessages 接口返回的 cursor 的值
注意:全量搜索时,cursor 的有效期为 2 分钟。
返回值
Promise
示例
// 全量搜索,指定关键字
// - 搜索消息里出现 ‘你好’ 或 ‘在哪里’
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
});
// 全量搜索,指定关键字和匹配类型搜索
// - 搜索消息里出现了 ‘你好’ 与 ‘在哪里’ 的消息
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
keywordListMatchType: 'and',
});
// 全量搜索,指定关键字列表和消息发送者搜索
// - 搜索消息发送者为 ‘user1’ 或 ‘user2’,且消息里出现了 ‘你好’ 或 ‘在哪里’ 的消息
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
senderUserIDList: ['user1', 'user2'],
});
// 全量搜索,指定关键字和消息类型搜索
// - 搜索消息类型为 ‘文本消息’ 或 ‘自定义消息’,且消息里出现了 ‘你好’ 或 ‘在哪里’ 的消息
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
messageTypeList: [TencentCloudChat.TYPES.MSG_TEXT, TencentCloudChat.TYPES.MSG_CUSTOM],
});
// 全量搜索,搜索所有图片消息(当指定发送者或消息类型时,关键字列表可以为空)
let promise = chat.searchCloudMessages({
messageTypeList: [TencentCloudChat.TYPES.MSG_IMAGE],
});
// 全量搜索,只指定消息发送者和消息类型搜索(当指定发送者或消息类型时,关键字列表可以为空)
// - 搜索消息发送者为 ‘user1’ 或 ‘user2’,且消息类型为 ‘文本消息’ 或 ‘自定义消息’ 的消息
let promise = chat.searchCloudMessages({
senderUserIDList: ['user1', 'user2'],
messageTypeList: [TencentCloudChat.TYPES.MSG_TEXT, TencentCloudChat.TYPES.MSG_CUSTOM],
});
// 全量搜索,指定关键字和时间(过去一天)搜索
// - 搜索过去一天,消息里出现了 ‘你好’ 或 ‘在哪里’的消息
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
timePosition: Number((new Date().getTime()/1000).toFixed(0)),
timePeriod: 24 * 60 * 60,
});
promise.then(function(imResponse) {
// 搜索消息成功
const { totalCount, cursor, searchResultList } = imResponse.data;
console.log(totalCount); // 满足搜索条件的消息所在的所有会话总数量
console.log(cursor); // 下一次云端搜索的起始位置, 如果没有表示搜索结果拉取完成
console.log(searchResultList); // 满足搜索条件的消息根据会话 ID 分组,分页返回分组结果
for (let i = 0; i < searchResultList.length; i++) {
const searchResultItem = searchResultList[i];
const { conversationID, messageCount, messageList } = searchResultItem;
console.log(conversationID); // 会话 ID
console.log(messageCount); // 当前会话一共搜索到了多少条符合要求的消息
// 本次搜索【全部会话】,那么 messageList 中装载的消息条数会有如下两种可能:
// - 如果某个会话中匹配到的消息条数 > 1,则 messageList 为空,您可以在 UI 上显示“ messageCount 条相关记录”。
// - 如果某个会话中匹配到的消息条数 = 1,则 messageList 为匹配到的那条消息,您可以在 UI 上显示之,并高亮匹配关键词。
console.log(messageList);
}
}).catch(function(imError) {
console.error(imError); // 搜索消息失败
});
// 指定会话,指定关键字搜索
// - 搜索在 'GROUPPublic001' 会话中,消息里出现 ‘你好’ 或 ‘在哪里’ 的消息。
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
conversationID: 'GROUPPublic001'
});
// 指定会话,指定消息类型搜索(当指定发送者或消息类型时,关键字列表可以为空)
// - 在 'GROUPPublic001' 会话中,搜索图片消息。
let promise = chat.searchCloudMessages({
conversationID: 'GROUPPublic001',
messageTypeList: [TencentCloudChat.TYPES.MSG_IMAGE],
});
// 指定会话,指定关键字和消息类型搜索
// - 搜索在 'GROUPPublic001' 会话中,消息里出现 ‘你好’ 或 ‘在哪里’,且消息类型为 ‘文本消息’ 或 ’自定义消息’ 的消息。
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
conversationID: 'GROUPPublic001',
messageTypeList: [TencentCloudChat.TYPES.MSG_TEXT, TencentCloudChat.TYPES.MSG_CUSTOM],
});
// 指定会话,指定关键字和时间(过去一天)搜索
// - 搜索过去一天,在 'GROUPPublic001' 会话中,消息里出现 ‘你好’ 或 ‘在哪里’ 的消息。
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
conversationID: 'GROUPPublic001',
timePosition: Number((new Date().getTime()/1000).toFixed(0)),
timePeriod: 24 * 60 * 60,
});
promise.then(function(imResponse) {
// 搜索消息成功
const { totalCount, cursor, searchResultList } = imResponse.data;
console.log(totalCount); // 满足搜索条件的消息总数量
console.log(cursor); // 下一次云端搜索的起始位置, 如果没有表示搜索结果拉取完成
console.log(searchResultList); // 当前会话搜索的消息结果
const { conversationID, messageCount, messageList } = searchResultList[0];
console.log(conversationID); // 会话ID
console.log(messageCount); // 当前会话一共搜索到了多少条符合要求的消息
console.log(messageList); // 本会话中所有满足搜索条件的消息列表
}).catch(function(imError); {
console.error(imError); // 搜索消息失败
});