文档中心
IM 即时通讯
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 即时通讯
  • 会话相关
  • 标记会话

标记会话

更新时间:2024-08-05 11:26

功能简介

当您遇到需要关注某会话或暂时无法处理某条会话等场景时,您可以标记会话并稍后处理,例如 "会话标星"、"会话折叠"、"会话隐藏"、“会话标记未读”等。为会话设置标记后,即可以标记为过滤项获取会话列表和未读消息总数。

  • 每名用户最多可标记 1000 个会话。
  • 当用户标记了会话,ZIM SDK 只会简单记录会话的标记值,并不会改变会话的底层逻辑。

前提条件

在实现“标记会话”功能之前,请确保:

  • 已在 ZEGO 控制台 创建项目,获取到了接入 ZIM SDK 服务所需的 AppID 和 ServerSecret。ZIM 服务权限不是默认开启的,使用前,请先在 ZEGO 控制台 自助开通 ZIM 服务(详情请参考 项目管理 - 即时通讯),若无法开通 ZIM 服务,请联系 ZEGO 技术支持开通。
  • 已获取登录 SDK 所需的 Token,详情请参考 使用 Token 鉴权。
  • 已集成 ZIM SDK,详情请参考 快速开始 - 实现基本收发消息 的 “3 集成 SDK”。

设置会话标记

ZIM 支持开发者使用客户端 API 或 服务端 API 实现对会话的标记操作。

客户端 API

1 监听 conversationChanged

用户登录 ZIM SDK 后,需要调用 on 监听 conversationChanged 事件,接收会话标记变化通知。

当会话标记变更后,用户的所有在线设备会收到 conversationChanged 事件通知,从其中 conversation 的 marks 字段可以获取到该会话当前的所有标记。

// 注册 SDK 事件通知回调
zim.on('conversationChanged', function (zim, { infoList }) {
    infoList.forEach((info) => {
        console.log(info.conversation.marks);
    });
});

2 设置或取消标记

您只需调用 setConversationMark 接口,即可对至多 100 个会话(仅支持单聊或群聊)设置或取消标记。每个会话至多可以拥有 20 个标记。

// 以对一个单聊会话和一个群聊会话设置标签为 1 为例
var markType = 1;
var enable = true;
var convList = [
    { conversationID: '单聊', conversationType: 0 },
    { conversationID: '群聊', conversationType: 2 },
];

zim.setConversationMark(markType, enable, convList)
    .then((res) => {
        // 操作成功,部分失败的会话通过 res.failedConversationInfos 返回
    })
    .catch((err) => {
        // 操作失败
    });

服务端 API

开发者可以通过调用服务端 API 批量对多名用户设置或取消会话标记,详情请参考服务端 API 文档 设置会话标记。

按标记查询会话列表

调用 queryConversationListWithConfig 接口,通过 ZIMConversationFilterOption.marks 传入会话标记列表,即可将标记作为过滤项查询会话列表。

  • 会话标记列表(ZIMConversationFilterOption.marks)只支持 [1, 20] 的整数:
    • 若列表包含 -1,查询结果为所有已标记会话;
    • 若列表包含 0,查询结果为所有无标记的会话;
    • 若传入多个标记,查询结果为所有传入标记的并集;
    • 若列表为空,则查询结果为所有会话。
  • 仅查询单聊会话和群聊会话。

此外,如果查询时需要考虑会话是否存在未读数,在调用 queryConversationList 接口时,传入 isOnlyUnreadConversation 为 YES 即可。

// 以查询拥有标记为 1 且包含存在未读数的会话列表(包含单聊和群聊)为例
var config = { count: 10 };
var option = {
    marks: [1],
    conversationTypes: [],
    isOnlyUnreadConversation: true,
};

zim.queryConversationList(config, option)
    .then((res) => {
        // 操作成功
    })
    .catch((err) => {
        // 操作失败
    });

按标记查询消息未读总数

调用 queryConversationTotalUnreadMessageCount 接口,通过 ZIMConversationTotalUnreadMessageCountQueryConfig.marks 传入会话标记列表,即可按标记查询相关会话的消息未读总数。

  • 此处计算消息未读总数的规则与 conversationTotalUnreadMessageCountUpdated 事件一致,即如果有符合要求的会话已开启免打扰,那么这个会话的未读数不会被计入这里查询出来的总未读数。
  • 会话标记列表(ZIMConversationTotalUnreadMessageCountQueryConfig.marks)只支持 [1, 20] 的整数:
    • 若列表包含 -1,查询结果为所有已标记会话;
    • 若列表包含 0,查询结果为所有无标记的会话;
    • 若传入多个标记,查询结果为所有传入标记的并集;
    • 若列表为空,则查询结果为所有会话。
  • 仅查询单聊会话和群聊会话。
// 以查询包含标记为 1 的会话总未读数(包含单聊和群聊)为例
var config = {
    marks: [1],
    conversationTypes: [],
};

zim.queryConversationTotalUnreadMessageCount(config)
    .then((res) => {
        // 操作成功
    })
    .catch((err) => {
        // 操作失败
    });
本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈