超级群场景指南
超级群(UltraGroup)面向大社区、频道化讨论与海量成员场景。rev22 起契约用独立会话类型 SUPER_GROUP(10) 表达超级群(存量 GROUP(2) + groupType=super 可读);rev23 起消息可带 channelId 按频道投递并过滤历史;rev24 收紧 private 频道列表可见性并补齐各端频道 UI 组件。服务端与四端 SDK(Web/Electron/Android/Flutter)已提供频道/用户组操作、频道消息与频道选择组件;频道成员管理页仍未提供。
超级群会话:SUPER_GROUP(10)(rev22);存量 GROUP(2)+groupType=super 继续可读,两者共用同一群会话键。成员上限 100000(普通群 3000)。
已实现:创建/加入/退出/解散、加入策略、频道创建/列表/加入/离开、用户组创建/列表/按用户反查与绑定频道(客户端 SDK 8 个 op + Open API)、频道级消息路由(rev23)、private 列表可见性收紧与频道 UI 组件(rev24:Web ChannelSwitcher / Android ChannelListDialog / Flutter ChannelList·Switcher,Electron 复用 Web)。
未实现:默认频道与默认免打扰、频道级 typing/搜索裁剪、频道消息独立会话/未读拆分、频道成员管理页面(成员增删仍走 Server API)。
与普通群的差异
| 维度 | 普通群 Group | 超级群 SuperGroup | 本项目状态 |
|---|---|---|---|
| 表达方式 | conversationType=GROUP | SUPER_GROUP(10);存量 GROUP(2)+groupType=super | ✅ 已实现(rev22;双表示可读) |
| 成员上限 | 默认 3000 | 100000 | ✅ 已实现 |
| 加入策略 | 邀请制 | invite / open,可服务端设置 | ✅ 已实现(joinPolicy) |
| 频道 | 无 | 公有/私有频道,频道成员列表 | ✅ 频道 CRUD/成员/加入离开 + 频道级消息(rev23) |
| 用户组 | 无 | 按组批量授权私有频道 | 🟡 用户组 CRUD/绑定已实现;不参与消息鉴权 |
| 默认频道 | 无 | RCDefault(不可转私有) | ⛔ 未实现(不自动创建) |
| 默认免打扰 | 无 | 群/频道级默认免打扰 | ⛔ 未实现 |
| 离线/多端 | 支持 | 支持 | ✅ 支持(按群组持久化) |
| 客户端 SDK | IMLib/IMKit | IMLib ChannelClient;IMKit 不支持 | 🟡 IMLib 8 个频道/用户组 op + channelId 消息(四端);频道 UI 组件(Web/Android/Flutter,Electron 复用 Web);成员管理页未提供 |
| 消息频道隔离 | 不适用 | channelId 维度 | ✅ 已实现(rev23:仅频道成员接收、历史按频道过滤) |
核心模型
超级群与频道
超级群本身是成员关系的容器;频道(channel)是消息与成员可见性的细分。融云提供默认频道 RCDefault,所有成员可见且不可转私有;自建频道默认是私有频道,可切换为公有。本项目没有默认频道语义,频道完全由 API 显式创建。
私有频道
私有频道(type=private,joinPolicy 推导为 invite)需要邀请或管理员身份才能加入;公有频道(public → open)对群成员开放。rev23 起频道消息按频道投递:私有频道发送者必须是频道成员(否则 1003),收件人仅频道成员;公有频道群成员可发送并自动加入频道。
用户组
用户组用于批量管理频道成员:一个用户组可绑定多个频道,一个频道可绑定多个用户组。本项目提供用户组的创建/列表/按用户反查与“绑定到频道”(双向索引),单群 100 个频道、100 个用户组上限(超限 1015);绑定用户组成员计入频道有效成员(并需仍是群成员)。
API 入口
| 能力 | 接口 | 说明 |
|---|---|---|
| 创建超级群 | POST /group/create | 请求体带 groupType: "super";需要开通 supergroup 服务 |
| 加入策略 | supergroup.join.policy.set | invite / open |
| 群成员 | group.members.add / group.members.remove | 沿用普通群成员接口 |
| 客户端:创建频道 | createSupergroupChannel | 四端 SDK(rev21);type=public/private,joinPolicy 由 type 推导 |
| 客户端:频道列表/加入/离开 | listSupergroupChannels / joinSupergroupChannel / leaveSupergroupChannel | 仅群成员可读;private 频道需邀请或管理员 |
| 客户端:用户组 | createUserGroup / listUserGroups / getUserGroupsByUser / bindUserGroupToChannel | 用户组 CRUD、按用户反查与双向绑定 |
| 创建频道(Open API) | supergroup.channel.create | type=public / private,缺省 private |
| 频道列表(Open API) | supergroup.channel.list | 返回频道及类型 |
| 频道类型(Open API) | supergroup.channel.type.set | 公有/私有切换 |
| 频道成员(Open API) | channel.members.add/remove/list | 维护频道成员;频道消息按成员收窄(私有频道发送需成员) |
| 删除频道(Open API) | supergroup.channel.delete | 删除频道记录;此后向该频道发送返回 1005,群历史不再返回该频道消息(频道已不存在视为不可见) |
| 创建用户组(Open API) | supergroup.usergroup.create | groupId + userGroupId + name |
| 用户组成员(Open API) | usergroup.members.add/remove | 批量添加/移除 |
| 绑定频道(Open API) | channel.usergroup.bind/unbind/list | 用户组与频道授权关系 |
| 按用户查用户组(Open API) | supergroup.usergroup.byUser | 查询用户所属用户组 |
接入流程
- 确认服务开通
创建
groupType=super的群需要应用开通 supergroup 服务;未开通返回 1021。控制台/服务开通接口见「服务开通」模块。 - 创建超级群
调用 POST /group/create,传
groupId、name、owner、members、groupType: "super"。返回 Group,maxMembers为 100000。 - 设置加入策略
默认 invite;需要公开加入时调用 supergroup.join.policy.set 设为 open。open 时用户可直接调用 group.join。
- 创建频道与授权
先创建频道(type=private 或 public),再按需切换;私有频道通过频道成员或用户组绑定授权。注意:当前授权关系不参与消息投递鉴权。
- 收发消息
rev22 起客户端按超级群会话发送(
conversationType=SUPER_GROUP(10)、targetId=groupId);rev23 起可在 options 带channelId发频道消息(仅频道成员接收,私有频道需成员、公有频道自动加入)。不带 channelId 是群级消息。详见「超级群频道级消息」。
配额与限制
| 项 | 融云口径 | 本项目 |
|---|---|---|
| 群成员上限 | 不设上限(产品口径) | 100000(服务端校验) |
| 单用户可加入超级群数 | 最多 100 个 | 未单独限制(受群成员关系约束) |
| 单群频道数 | 最多 50 个 | 100 个(超限 1015) |
| 单群用户组数 | 最多 50 个 | 100 个(超限 1015) |
| 单频道绑定用户组数 | 最多 10 个 | 未实现配额校验(可绑定) |
| 单用户组用户数 | 最多 100 个 | SDK 本地按 5000 上限拦截(超限 1015) |
| 默认频道 | RCDefault,不可转私有 | 未实现(不自动创建) |
| 默认免打扰 | 群/频道级默认免打扰 | 未实现 |
| 频道消息 | 支持 channelId 维度 | ✅ 已实现(rev23):发送带 channelId,仅频道成员接收,历史可过滤 |
| 客户端 API | ChannelClient 等 | 四端 IMLib 8 个频道/用户组 op + channelId 消息(rev21/rev23) |
| IMKit | 不支持超级群 | 频道 UI 组件已提供(Web ChannelSwitcher / Android ChannelListDialog / Flutter ChannelList·Switcher;Electron 复用 Web);频道成员管理页未提供 |
场景建议
- 只需要大群:创建 super 群后只用一个群会话,不建频道;可直接复用群消息、历史与未读(rev22 起发送传 10)。
- 社区频道:用频道管理接口维护频道目录;rev23 起发送带
channelId即按频道投递,rev24 起各端 IMKit 已带频道切换器(Web/Android/Flutter,Electron 复用 Web)。 - 私有频道权限:服务端强制私有频道发送需频道成员(1003),且 rev24 起列表对非成员隐藏 private 频道;建议业务层先校验再展示发送入口,避免无效请求。
- 默认免打扰:当前只能用会话级 conversation.settings 设置单个用户的免打扰,不能设置群/频道级默认值。
默认频道/默认免打扰、频道级 typing/搜索裁剪、频道消息独立会话与未读拆分、频道成员管理页面仍未提供;频道级消息(rev23)与频道 UI 组件(rev24)已可用。相关页:超级群频道 UI 组件、私有频道列表可见性、C17 收口。
相关文档
- 超级群会话类型:10 的语义、发送/历史/会话列表与限制
- 超级群频道级消息:channelId 路由、权限、历史过滤与限制
- 超级群频道消息迁移:群级 → 频道级迁移与回滚
- 超级群频道 UI 组件:各端组件/事件/主题/平台差异
- 私有频道列表可见性:rev24 过滤规则与 Open API userId
- C17 超级群能力收口
- 超级群类型迁移与兼容 FAQ:2+super 与 10 并存时的判断与回滚
- Web 用法 · Android 用法 · Flutter 用法 · Electron 用法
- Web 频道消息用法 · Android · Flutter · Electron