当前页

频道会话管理

2026-05-22

功能简介

每个社群频道都对应一个类型为 COMMUNITY_CHANNEL 的会话。通过频道的 conversationID,可以使用 ZIM 标准的会话管理接口来操作频道会话,包括:

  • 获取频道列表(含会话 ID)
  • 清除频道未读消息数
  • 设置/清除频道会话草稿
  • 设置频道会话免打扰
  • 监听频道会话变更

前提条件

  • 请参考 实现基本消息收发 完成 ZIM SDK 获取、初始化和用户登录。
  • 请参考 使用 Token 鉴权 实现用户鉴权登录。
  • 社群功能需要 ZIM SDK 3.0.0 及以上版本。
  • 社群功能为旗舰版功能,使用前请联系 ZEGO 技术支持开通。
  • 社群功能的 Token 生成方式与其他 ZIM 功能一致,无需额外权限声明。
说明
  • 频道会话的 conversationID 与频道的 channelID 不同,发送消息和管理会话时请使用从 ZIMCommunityChannel 对象中获取的 conversationID 字段。
注意

请勿将 channelID 误当作 conversationID 使用。发送消息和进行会话管理操作时,必须使用从频道对象(ZIMCommunityChannel)中获取的 conversationID,而非 channelID

获取频道列表

在进行频道会话管理之前,需要先调用 queryCommunityChannelList 接口获取频道列表,从返回的 ZIMCommunityChannel 对象中取得 conversationID,用于后续的会话操作。

分页规则:首次将 config.nextFlag 设为 0,将返回的 nextFlag 传入下次请求,直到返回 0 为止。

zim::ZIMCommunityChannelListQueryConfig config;
config.nextFlag = 0;

zim_->queryCommunityChannelList(communityID, 100, config,
    [=](const std::string &communityID,
        const std::vector<zim::ZIMCommunityChannel> &channelList,
        long long nextFlag,
        const zim::ZIMError &errorInfo) {
        if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
            for (const auto &channel : channelList) {
                std::string conversationID = channel.conversationID; // 用于后续会话管理
            }
        }
    });

清除未读消息数

调用 clearConversationUnreadMessageCount 接口,将指定频道会话的未读消息数清零。清除成功后,会触发 onConversationChanged 回调,反映最新的会话状态。

std::string conversationID = channel.conversationID;
zim::ZIMConversationType conversationType = zim::ZIM_CONVERSATION_TYPE_COMMUNITY_CHANNEL;

zim_->clearConversationUnreadMessageCount(conversationID, conversationType,
    [=](const zim::ZIMError &errorInfo) {
        if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
            // 未读数已清零
        }
    });

设置会话草稿

调用 setConversationDraft 接口,为指定频道会话保存草稿内容,用于用户退出频道后继续编辑。草稿内容仅存储在本地,不会发送给其他用户。

说明

如需清空草稿,将 draft 传入空字符串即可。

std::string draft = "这是草稿内容";
std::string conversationID = channel.conversationID;
zim::ZIMConversationType conversationType = zim::ZIM_CONVERSATION_TYPE_COMMUNITY_CHANNEL;

zim_->setConversationDraft(draft, conversationID, conversationType,
    [=](const zim::ZIMError &errorInfo) {
        if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
            // 草稿保存成功
        }
    });

设置会话通知状态

调用 setConversationNotificationStatus 接口,设置指定频道会话的消息免打扰状态。设置为免打扰后,该频道的未读消息数将不再累加到社群总未读数中,也不会触发系统推送。

std::string conversationID = channel.conversationID;
zim::ZIMConversationType conversationType = zim::ZIM_CONVERSATION_TYPE_COMMUNITY_CHANNEL;

zim_->setConversationNotificationStatus(
    zim::ZIM_CONVERSATION_NOTIFICATION_STATUS_DO_NOT_DISTURB,
    conversationID, conversationType,
    [=](const zim::ZIMError &errorInfo) {
        if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
            // 设置成功
        }
    });

监听频道列表变更

当社群中频道被创建或解散或列表可见信息变更时,频道列表会随之变化。SDK 会通过 onCommunityChannelListChanged 回调通知开发者,开发者可在该回调中重新获取频道列表,更新本地的 conversationID 映射关系。详见 社群频道管理 — 监听频道列表变更

说明

频道会话的变更(如未读数变化、草稿更新等)同样会触发 onConversationChanged 回调。可参考 获取会话列表 了解会话变更监听的完整用法。

相关参考

上一篇

频道消息管理

下一篇

社群禁言

当前页

返回到顶部