超级群会话类型

rev22 起,契约新增会话类型 SUPER_GROUP(数值 10),用于显式表达超级群会话。此前超级群用“普通群类型 GROUP(2) + 群属性 groupType=super”表达:客户端、回调与统计都要先读群对象才能判断。本页说明 10 的语义、与普通群的区别、发送/历史/会话列表规则、频道与用户组、存量兼容与限制。

版本与兼容(additive-only)

契约:IDL v1.0.0 / 修订 35。新增取值不改变既有 1/2/3/4 语义。

存量:GROUP(2) + groupType=super 的会话与消息继续可读;新消息使用 SUPER_GROUP(10)。

会话键按 groupId 聚合:2 与 10 指向同一个群会话(g:{groupId}),不会因为类型不同产生两条会话或两份历史。

取值与语义​

ConversationType值targetId 语义持久化 / 补发说明
PRIVATE1对方 userId持久化、离线补发单聊
GROUP2groupId持久化、离线补发普通群;存量超级群也用 2 + groupType=super 表达
CHATROOM3chatroomId不持久化、不补发在线态会话
SYSTEM4system(固定)按用户隔离持久化系统通知
SUPER_GROUP10groupId持久化、离线补发rev22 新增:显式超级群会话类型

协议语义(protocol.json superGroupSemantics):conversationType=SUPER_GROUP(10);存量 GROUP(2) + groupType=super 仍可读,新消息写 10。超级群成员上限 100000(普通群 3000),加入策略 invite|open(由群属性决定,默认 invite)。

为什么新增 10​

维度2 + groupType=super(存量)SUPER_GROUP(10)(rev22)
会话类型自描述否:会话/消息类型都是 2,需再查群属性是:10 本身即表示超级群
客户端渲染先读 groupType 再决定群样式/入口可直接按 10 选择超级群样式与入口
回调与统计按 conversationType=2 归档后需 join 群表才能区分普通群/超级群按 conversationType=10 即可区分(存量数据仍按 2+群属性归类)
历史/消息消息 conversationType=2新消息 conversationType=10;同一会话历史里两种取值可能并存
兼容策略继续可读,不需要改写存量数据新消息写 10;旧客户端需按 2+groupType 兜底

发送、历史与会话列表​

操作传参契约行为注意事项
发送消息sendMessage(10, groupId, content) / sendTextMessage(10, groupId, text)按群语义校验成员、计算收件人、分配 seq、投递与离线补发非群成员 1003/1006;消息体积与限频同普通消息;rev23 起可带 options.channelId 发频道消息
历史消息getHistoryMessages(10, groupId, {limit, beforeSeq})读取该群会话的历史;传 2 或 10 都指向同一会话键历史中的消息可能同时含 2 与 10(存量 + 新消息),按 seq 排序即可;rev23 起可加 channelId 过滤频道
会话列表getConversationList()返回该用户全部会话;超级群的会话类型可能是 10(新会话)或 2(存量会话)用 groupType === "super" 或 conversationType === 10 判断超级群;频道消息不单独成会话
未读/已读/撤回/扩展/回应/流式/typing/搜索/标签与普通群相同全部按群语义工作(不需要为 10 单独实现分支)客户端不要硬编码“等于 2 才是群”;频道消息的未读/回执按频道成员收窄(rev23)
系统通知—超级群不产生独立的系统通知会话;群事件走系统通知与群事件回调—
频道级消息(rev23)

rev23 起超级群消息可带 channelId:仅频道成员接收、历史按频道过滤、私有频道需成员、公有频道群成员发送自动加入;不带 channelId 仍是群级消息。

发送/历史/回调/限制详见 超级群频道级消息,迁移见 频道消息迁移。

会话对象的 groupType 已可用

会话视图对群类会话(2/10)返回 groupType: "normal"|"super":10 恒为 super;2 按群属性判定(存量超级群仍返回 super)。

因此判断超级群的推荐顺序是:先看会话 groupType,再兜底看 conversationType === 10 或(2 且群 groupType=super)。

频道与用户组​

超级群的频道(channel)与用户组(userGroup)是群内组织与可见性单元:频道保存类型(public/private)、成员与绑定关系;用户组用于批量把成员绑定到频道。客户端 SDK 提供 8 个语义操作,服务端另有 supergroup.channel.* / supergroup.usergroup.* Open API(同一份状态)。

操作入参返回错误码
createSupergroupChannelparams:{groupId:string, name:string, type:ChannelType, joinPolicy?:JoinPolicy}SupergroupChannel1001 1002 1003 1005 1015
listSupergroupChannelsgroupId:string{groupId:string, channels:SupergroupChannel[], total:uint32}1001 1002 1003 1005
joinSupergroupChannelchannelId:string, options:{groupId?:string}?{groupId:string, channelId:string, userId:string, joined:bool, alreadyJoined:bool}1001 1002 1003 1005
leaveSupergroupChannelchannelId:string, options:{groupId?:string}?{groupId:string, channelId:string, userId:string, left:bool, wasMember:bool}1001 1002 1003 1005
bindUserGroupToChannelchannelId:string, userGroupId:string, options:{groupId?:string}?{groupId:string, channelId:string, userGroupId:string, bound:bool, reverseIndexed:bool}1001 1002 1003 1005
createUserGroupparams:{groupId:string, name:string, members?:string[]}UserGroup1001 1002 1003 1004 1015
listUserGroupsgroupId:string{groupId:string, userGroups:UserGroup[], total:uint32}1001 1002 1003 1005
getUserGroupsByUseruserId:string, options:{groupId?:string}?{userId:string, userGroups:UserGroup[], total:uint32}1001 1002 1003
规则事实
频道类型与加入策略type=public → joinPolicy=open;type=private → joinPolicy=invite;显式传入矛盾值返回 1001
权限创建频道 / 创建用户组 / 绑定用户组仅群主或管理员(1003);频道列表与用户组列表仅群成员可读
配额单群 100 个频道、100 个用户组(超限 1015);频道/用户组数量与命名限制在接口内校验
绑定关系绑定同时维护频道侧 userGroupIds 与用户组侧 channelIds(双向索引),可用 listUserGroups / getUserGroupsByUser 反查
消息隔离已实现(rev23):消息带 channelId 时按频道投递(仅频道成员接收、历史可过滤);不带 channelId 为群级消息。私有频道发送需成员(1003),公有频道群成员可发并自动加入
默认频道不自动创建 RCDefault 默认频道;频道必须显式创建

事件与回调​

通道字段10 的取值/映射
客户端长连接事件MESSAGES / CONVERSATION 载荷中的 conversationType新消息为 10;存量消息为 2
服务端回调(22 类事件)载荷中的 conversationType(rev23 起频道消息另带 channelId)随消息/会话:10 或存量 2;回调载荷没有 channelType 字段,不要读取不存在的字段
机器人 / 集成回调channelTypePERSON=单聊、GROUP=普通群、ULTRAGROUP=超级群(10 与存量 2+super 都映射 ULTRAGROUP)、TEMP_GROUP=聊天室
控制台消息追踪 / 统计conversationType 数值与标签2=群聊(含存量超级群)、10=超级群;控制台版本未升级时 10 可能显示原值

存量迁移(摘要)​

  1. 客户端先做读兼容:判断超级群时同时接受 conversationType===10 与 conversationType===2 && groupType==="super"。
  2. 升级服务端与各端 SDK 到包含 rev22 的版本(服务端把 10 当群语义处理;SDK 提供 10 的常量与序列化)。
  3. 新消息写 10:发送时传 SUPER_GROUP;存量会话/消息保持原样,不做批量改写。
  4. 统计与回调按“10 或(2 且 groupType=super)”双口径汇总,避免迁移期数据断层。
  5. 灰度:按应用或按用户分批升级;回滚时旧版本客户端仍能读 2+super 的存量数据。

判断函数、双表示并存的展示口径、回调/控制台映射与常见问题见 超级群类型迁移与兼容 FAQ。

错误处理​

错误码名称含义可重试
1001INVALID_PARAMETER参数错误否
1002INVALID_TOKENToken 无效或已过期否
1003FORBIDDEN无权限否
1005GROUP_NOT_FOUND群组不存在否
1006NOT_GROUP_MEMBER未加入群组否
1009GROUP_MUTED你已被禁言否
1015MEMBERSHIP_LIMIT成员数量超出上限否
1016USER_BANNED账号已被封禁否
1021SERVICE_NOT_ACTIVATED服务未开通否

若调用发送/历史返回 1001 invalid conversationType,说明该端 SDK 或服务端尚未升级到包含 rev22 的版本:此时继续用 GROUP(2) + groupType=super 兼容写法(见迁移 FAQ)。

限制​

  • 频道级消息已实现(rev23):消息可带 channelId 按频道投递/过滤;但 typing 未按频道收窄、客户端 searchMessages 未按频道裁剪、频道消息不单独成会话(未读/回执按群会话聚合)。
  • IMKit 只提供单频道会话视图:10 的会话需 IMKit 升级到识别 rev22/rev23 的版本;频道列表/成员管理页需宿主实现。
  • 默认频道与默认免打扰未实现:不自动创建默认频道,也不支持群/频道级默认免打扰(只能用会话级提醒级别)。
  • iOS / HarmonyOS 为契约预留:声明同构,无运行时代码。
  • 存量数据不改写:2+super 的历史会话与消息保持原样;若业务需要“全部 10”,只能在新消息上逐步生效或自行迁移展示层。

相关链接​