JavaScript

功能描述

搜索云端消息,帮助用户根据关键词快速定位并索引相关消息。通过此接口,用户可以高效地查找特定的消息内容,提升信息获取的速度和准确性。
说明:
此功能属于增值服务,需要您购买云端搜索插件,请点击 购买
云端搜索消息功能 v3.1.0 起支持。
此接口本地限频 2 次/秒。
社群、topic、直播群,不支持搜索云端消息。
搜索全部会话的消息:
如果匹配到的消息数量 messageCount > 1,则接口返回的 messageList 为 [],您可以在 UI 上展示 【${messageCount} 条相关记录】。如果您想高亮展示匹配到的消息,请参考 指定会话搜索,将接口返回的 messageList 高亮展示。
如果某个会话中匹配到的消息条数 = 1,则 messageList 为匹配到的那条消息。

搜索云端消息

接口
chat.searchCloudMessages(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
Name
Type
Description
keywordList
Array | undefined
关键字列表,最多支持 5 个。
说明:
当消息发送者 senderUserIDList 以及消息类型 messageTypeList 均未指定时,关键字列表必须非空;否则,关键字列表可以为空。
keywordListMatchType
String | undefined
关键字列表匹配类型
or:“或”关系搜索(默认)
and:“与”关系搜索
senderUserIDList
Array | undefined
指定 userID 发送的消息,最多支持 5 个。
messageTypeList
Array | undefined
指定搜索的消息类型集合,默认搜索全部类型。
不传入时,表示搜索支持的全部类型消息(TencentCloudChat.TYPES.MSG_FACETencentCloudChat.TYPES.MSG_GRP_TIPTencentCloudChat.TYPES.MSG_GRP_SYS_NOTICE 不支持)。
传值时,取值详见 TencentCloudChat.TYPES
conversationID
String | undefined
搜索“全部会话”还是搜索“指定的会话”,不传入时,表示全部会话,默认:全部会话。
会话 ID 组成方式:
C2C${userID}(单聊)
GROUP${groupID}(群聊)
社群、topic、直播群,不支持搜索云端消息
timePosition
Number | undefined
搜索的起始时间点。默认为 0 即代表从现在开始搜索,单位:秒。
timePeriod
Number | undefined
从起始时间点开始的过去时间范围,单位秒。默认为 0 即代表不限制时间范围,传 24 * 60 * 60 代表过去一天。
cursor
String | undefined
每次云端搜索的起始位置。第一次搜索时不要传入 cursor,继续搜索时填入上次调用 searchCloudMessages 接口返回的 cursor 的值。
说明:
全量搜索时,cursor 的有效期为 2 分钟。
返回值
Promise
Name
Type
Description
totalCount
Number
如果搜索指定会话,返回满足搜索条件的消息总数。
如果搜索全部会话,返回满足搜索条件的消息所在的所有会话总数量。
searchResultList
Array
满足搜索条件的消息根据会话 ID 分组。
cursor
String
调用搜索接口续拉时需要填的游标。
其中 searchResultList 是个列表,内含搜索结果对象,参数说明如下:
Name
Type
Description
conversationID
String
会话 ID。
messageCount
Number
当前会话一共搜索到了多少条符合要求的消息。
messageList
Array
当前会话中所有满足搜索条件的消息列表。
说明:
1. 如果搜索指定会话,messageList 是本会话中所有满足搜索条件的消息列表。
2. 如果搜索全部会话,messageList 中装载的消息条数会有如下两种可能:
如果匹配到的消息数量 messageCount > 1,则接口返回的 messageList 为 [],您可以在 UI 上展示 【${messageCount} 条相关记录】。如果您想高亮展示匹配到的消息,请参考 指定会话搜索,将接口返回的 messageList 高亮展示。
如果某个会话中匹配到的消息条数 = 1,则 messageList 为匹配到的那条消息。

搜索全部会话的消息

不指定 conversationID ,指定关键字搜索。
示例
// 全量搜索,指定关键字
// - 搜索消息里出现 ‘你好’ 或 ‘在哪里’
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里']
});
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); // 搜索消息失败
});

搜索指定会话的消息

指定 conversationID ,指定关键字搜索。
示例
// 指定会话,指定关键字搜索
// - 搜索在 'GROUPPublic001' 会话中,消息里出现 ‘你好’ 或 ‘在哪里’ 的消息。
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
conversationID: 'GROUPPublic001'
});
promise.then(function(imResponse) {
// 搜索消息成功
const { totalCount, cursor, searchResultList } = imResponse.data;
console.log(totalCount); // 满足搜索条件的消息总数量
console.log(cursor); // 下一次云端搜索的起始位置, 如果没有表示搜索结果拉取完成
console.log(searchResultList); // 当前会话搜索的消息结果
if(searchResultList.length){
const { conversationID, messageCount, messageList } = searchResultList[0];
console.log(conversationID); // 会话ID
console.log(messageCount); // 当前会话一共搜索到了多少条符合要求的消息
console.log(messageList); // 本会话中所有满足搜索条件的消息列表
}
}).catch(function(imError){
console.error(imError); // 搜索消息失败
});

搜索自定义消息

1. 使用接口 createCustomMessage 来创建自定义消息时,需要把搜索的文本放到 description 参数中。支持关键词与 description 进行匹配。
2. 指定 messageTypeListTencentCloudChat.TYPES.MSG_CUSTOM 做分类搜索,此时会搜索出所有自定义消息。
示例
// 全量搜索,指定关键字和消息类型搜索
// - 搜索消息类型为 ‘自定义消息’,且消息的 description 里出现了 ‘你好’ 或 ‘在哪里’ 的消息
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
messageTypeList: [TencentCloudChat.TYPES.MSG_CUSTOM],
});
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); // 搜索消息失败
});

搜索富媒体消息

富媒体消息包含文件、图片、语音、视频消息。
1. 对于文件消息,界面通常显示文件名。如果调用 createFileMessage 创建文件消息时传入 fileName 参数,fileName 会作为文件消息被搜索的内容,与搜索关键词进行匹配。
2. 对于图片、语音、视频消息,并没有类似 fileName 这种名称,界面通常显示缩略图或时长,此时指定 keywordList 搜索无效。
3. 可以指定 messageTypeListTencentCloudChat.TYPES.MSG_IMAGE/TencentCloudChat.TYPES.MSG_AUDIO/TencentCloudChat.TYPES.MSG_VIDEO做分类搜索,此时会搜索出所有指定类型的消息。
示例
// 全量搜索,只指定消息发送者和消息类型搜索(当指定发送者和消息类型时,关键字列表可以为空)
// - 搜索消息发送者为 ‘user1’ 或 ‘user2’,且消息类型为 ‘图片消息’ 、‘语音消息’ 或 ‘文件消息’ 的消息
let promise = chat.searchCloudMessages({
senderUserIDList: ['user1', 'user2'],
messageTypeList: [
TencentCloudChat.TYPES.MSG_IMAGE,
TencentCloudChat.TYPES.MSG_AUDIO,
TencentCloudChat.TYPES.MSG_FILE
],
});
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); // 搜索消息失败
});


搜索地理位置消息

1. 支持对 latitudelongitudedescription与关键词进行匹配。
2. 指定 messageTypeListTencentCloudChat.TYPES.MSG_LOCATION 做分类搜索,此时会搜索出所有地理位置消息。
示例
// 全量搜索,指定关键字和消息类型搜索
// - 搜索消息类型为 ‘地理位置’,且消息的 latitude、longitude、description 里出现了 ‘你好’ 或 ‘在哪里’ 的消息
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
messageTypeList: [TencentCloudChat.TYPES.MSG_LOCATION],
});
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); // 搜索消息失败
});

搜索合并消息

1. 使用接口 createMergerMessage 来创建合并消息时,需要把需要被搜索的文本放到 titleabstractList 参数中,支持 titleabstractList 与关键词进行匹配。
2. 指定 messageTypeListTencentCloudChat.TYPES.MSG_MERGER 做分类搜索,此时会搜索出所有合并消息。
示例
// 全量搜索,指定关键字和消息类型搜索
// - 搜索消息类型为 ‘合并消息’,且消息的 title 或 abstractList 里出现了 ‘你好’ 或 ‘在哪里’ 的消息
let promise = chat.searchCloudMessages({
keywordList: ['你好', '在哪里'],
messageTypeList: [TencentCloudChat.TYPES.MSG_MERGER],
});
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); // 搜索消息失败
});