群组系统

最近更新时间:2019-08-02 15:51:15

群组系统简介

群组系统是一个支持多人聊天的即时通信系统,群组系统所具备的基本能力包括:

  • 完备的 群组管理 能力:创建/解散群组、成员管理、群组资料管理、成员资料管理等。
  • 稳定可靠的消息收发能力,完善的 群组消息 管理机制:权限控制,禁言,脏词过滤,消息回调,消息漫游等。
  • 内置私有群(Private)、公开群(Public)、聊天室(ChatRoom)、音视频聊天室(AVChatRoom)和在线成员广播大群(BChatRoom)五种群组形态, 并支持根据业务需要 自定义群组形态
  • 多种群成员人数上限:
    • 私有群成员人数上限200人,公开群成员人数上限2000人,聊天室成员人数上限6000人,但此三种群组实际的群成员上限还受预付费套餐包的限制,详情请参阅 价格说明
    • 音视频聊天室和在线成员广播大群人数无上限,也不受预付费套餐包的限制,但您可创建的音视频聊天室数量受预付费套餐包限制,详情请参阅 价格说明
  • 在 Web 端,音视频聊天室和在线成员广播大群支持用户以游客身份(即不需要登录)接收消息。

注意:

  1. 音视频聊天室(AVChatRoom)和在线成员广播大群(BChatRoom)成员人数没有上限,但如果预估群成员人数会超过1万人,请提前联系 腾讯云客服 或商务工作人员申请服务资源。
  2. 目前仅私有群(Private)、公开群(Public)和聊天室(ChatRoom)具备消息漫游能力(默认7天)。如需保存更长时间,您可以在 控制台 修改消息漫游时长。延长消息漫游时长是增值服务,具体计费说明请参考 价格说明

除此之外,即时通信 IM 群组系统具备高度可定制性,具体包括:

群成员角色介绍

群组中各成员的角色及其权限如下表:

群组成员角色 描述 管理权限
普通成员 不具备管理权限的群成员
管理员 由群主任命的、协助群主来管理群组的群成员,拥有一定的管理权限
1. 修改群组基本资料
2. 将普通群成员踢出群
3. 将普通群成员禁言(即禁止其在一段时间内发言)
4. 审批其他用户的入群申请
群主 即群组的创建者,在群组中拥有最高的管理权限 群主具备管理员所拥有的各项权限之外,还拥有如下权限:
1. 任命/取消管理员
2. 将管理员踢出群组
3. 将管理员禁言
4. 解散群组
5. 转让群组
App 管理员 具备管理 App 中所有群组权限的一种特殊身份,能力超过群主 App 管理员可以不是群组中的成员,但是拥有群主具备的所有权限

群组形态介绍

群组系统当前提供五种默认群组形态:

群组形态 适用场景
私有群(Private) 适用于较为私密的聊天场景,群组资料不公开,只能通过邀请的方式加入,类似于微信群
公开群(Public) 适用于公开群组,具有较为严格的管理机制、准入机制,类似于 QQ 群
聊天室(ChatRoom) 群成员可以随意进出,组织较为松散
音视频聊天室(AVChatRoom) 适用于互动直播场景,管理上与聊天室相似,但群成员人数无上限;支持以游客身份(不登录)接收消息
在线成员广播大群(BChatRoom) 适用于需要向全体在线用户推送消息的场景,例如在直播系统中的“大喇叭消息”

五种群组形态分别针对不同的应用场景,故而它们支持的管理方式稍有差别, 主要差异如下:

群组操作差异

控制项 私有群 公开群/聊天室 音视频聊天室 在线成员广播大群
是否支持模糊搜索 不支持 不支持 不支持 不支持
是否支持精确搜索 不支持 支持 支持 不支持
修改群基础资料的权限 普通成员 群管理员
群主
App 管理员
群主
App 管理员
App 管理员
获取群成员信息 可获取全部群成员信息 可获取全部成员信息 只能获取最多300个群成员的信息 无法获取任何群成员信息
解散群 只有 App 管理员可以解散群 群主和 App 管理员可以解散群 群主和 App 管理员可以解散群 只有 App 管理员可以解散群

说明:

  1. 模糊搜索,是指非群成员通过群名称等字段查找群组;精确搜索,是指非群成员通过群组 ID 查找群组。
  2. 对于私有群,普通成员只能修改群名称、简介、公告、群头像 URL,不能修改其他群基础资料。
  3. 获取部分群成员的信息,常用于直播大群中只需要展示部分群成员列表的场景。

群成员操作差异

控制项 私有群 公开群/聊天室 音视频聊天室/在线成员广播大群
申请加群 不允许申请加群 申请加群后,公开群需要管理员审批;而聊天室无需管理员审批,直接加入 申请加群后,无需要管理员审批,直接加入
邀请他人入群 1.任何群成员都可邀请他人加群,且无需被邀请人同意,直接将其拉入群组中
2.创建群时,可以直接拉人入群
1.默认只有 App 管理员可以邀请他人入群
2.创建群时,可以直接拉人入群
1.不允许任何人邀请他人入群(包括 App 管理员)
2.创建群时,也不可以直接拉人入群
群主是否可退群 可以。群主退出后,该群将没有群主 不可以。除非通过解散群组的方式 不可以。除非通过解散群组的方式
群主是否可设置管理员 不可以 可以 不可以
移除群成员 群主和 App 管理员可移除群成员 群管理员、群主和 App 管理员可移除群成员 不允许任何人(包括 App 管理员)移除群成员
定期移除不在线的群成员 默认不开启 默认不开启 不支持

注意:

如果需要开启定时清理不在线成员的功能,可以根据 工单模板 提交工单进行申请,但是只会清理普通成员,不会清理群主和管理员。

群组限制差异

控制项 私有群 公开群 聊天室 音视频聊天室 在线成员广播大群
成员人数上限 200 2000 6000 无上限 无上限
每日可净增群组数量上限 10000 10000 10000 10000 5
App 累计可创建群组数量 无上限 无上限 无上限 请参见 价格说明 5

注意:

  1. 累计可创建群组数(包括所有群组类型)是没有限制的,但如超过10万,需支付一定费用,详情请参考 后付费资源(累计群组数)。所以建议及时解散无需继续使用的群组。
  2. 对于私有群、公开群和聊天室,实际群成员人数上限还需结合购买情况,详情请参阅 价格说明。例如,您购买了专业版,那么这三种群组形态的成员人数上限均为200人;如果您额外购买了“扩展群人数上限-6000人”,则三种群组形态的成员人数上限分别为200、2000、6000。
  3. 净增群组数量,是指创建群组数减去解散群组数。
  4. 每日净增群组数量上限10000个,是指所有形态的群组的净增数量总和不能超过10000个。如果对每日创建群组的上限有调高的需求,可以根据 工单模板 提交工单进行申请。

消息管理差异

控制项 私有群 公开群 聊天室 音视频聊天室 在线成员广播大群
消息发送权限 App 管理员和所有群成员 App 管理员和所有群成员 App 管理员和所有群成员 App 内已导入即时通信 IM 的任意帐号 App 管理员
是否支持查看入群前历史消息 不支持 不支持 支持 不支持 不支持
是否支持成员变更通知 支持 支持 不支持 支持 不支持
新创建群组是否需要发一条消息激活 需要 不需要 不需要 不需要 不需要
是否支持管理员对群成员设置禁言 不支持 支持 支持 支持 不支持
默认消息接收选项 接收在线推送消息和离线推送 接收在线推送消息和离线推送 只接收在线推送消息 只接收在线推送消息 只接收在线推送消息
是否支持未读消息计数 支持 支持 不支持 不支持 不支持
是否支持用户以游客身份(即不需要登录)接收群消息 不支持 不支持 不支持 支持 支持
是否支持消息漫游 支持 支持 支持 不支持 不支持

注意:

  1. 需要激活的群组,在群主发消息前为未激活状态,对群主以外的其他群成员不可见;而不需要激活的群组,创建后即对所有群成员可见。
  2. 被禁言的群成员,在禁言时间内无法发送群聊消息;在线成员广播大群(BChatRoom)中,只有 App 管理员可以发送消息,所以不支持禁言。
  3. 离线推送目前只有 Android(Android 离线推送)和 iOS(APNs 推送)支持。
  4. 目前仅私有群(Private)、公开群(Public)和聊天室(ChatRoom)具备消息漫游能力(默认7天)。如需保存更长时间,您可以在 控制台 修改消息漫游时长。延长消息漫游时长是增值服务,详情请参考 价格说明

批量导入与自动回收差异

控制项 私有群/公开群/聊天室 音视频聊天室/在线成员广播大群
允许导入群、群成员和群消息 允许导入群、群成员和群消息,适用于从第三方平台迁移历史群组到即时通信 IM 时使用 不允许批量导入群、群成员和群消息,只能使用现有的群、群成员和群消息
群组自动回收时间(秒) 后台不会回收群组,除非群主解散,或者所有成员都退出群组 后台不会回收群组,除非群主解散,或者所有成员都退出群组

注意:

如果需要开启群组回收功能,可以根据 工单模板 提交工单进行申请。配置后,将会根据群组类型清理不活跃群组(群组不活跃是指群组中既没人发言,也没有成员变更)。

群组数据结构介绍

群基础资料

字段名称 类型 描述 备注
GroupId String 群组的唯一标识 只读
群组 ID,App 内保证唯一,其格式前缀为 @TGS#。另外,App 亦可自定义群组 ID
Type String 群组形态 只读
默认支持五种产品形态:Private、Public 、ChatRoom、AVChatRoom、BChatRoom, 详情请参阅上文群组形态介绍
Name String 群组名称 可读可写。最长30字节,不可调整
Introduction String 群组简介 可读可写。最长120字节,不可调整
Notification String 群组公告 可读可写。最长150字节,不可调整
FaceUrl String 群组头像 URL 可读可写。最长100字节,不可调整
Owner_Account String 群主 ID 只读
CreateTime Integer 群组的创建时间 只读
InfoSeq Integer 群资料的每次变都会增加该值 只读
LastInfoTime Integer 群组最后一次信息变更时间 只读
LastMsgTime Integer 群组内最后发消息的时间 只读
NextMsgSeq Integer 群内下一条消息的 Seq 只读。
群组内每一条消息都有一条唯一的消息 Seq,且该 Seq 是按照发消息顺序而连续的。从 1 开始,群内每增加一条消息,NextMsgSeq 就会增加 1
MemberNum Integer 当前成员数量 只读
MaxMemberNum Integer 最大成员数量 -
ApplyJoinOption String 申请加群选项 申请加群选项包括如下几种:DisableApply 表示禁止任何人申请加入;NeedPermission 表示需要群主或管理员审批;FreeAccess 表示允许无需审批自由加入群组

注意:

群组名称、群组简介、群组公告和群组头像 URL,这四个字段的修改权限具体是:私有群中,任何群成员都可以修改;公有群和聊天室中,群管理员、群主和 App 管理员可以修改;直播聊天室中,群主和 App 管理员可以修改;在线成员广播大群中,只有 App 管理员可以修改。

群成员资料

字段名称 类型 描述 备注
Member_Account String 群成员 ID 只读
Role String 群内身份 群内身份包括如下几种:Owner 群主,Admin 群管理员,Member 群成员
JoinTime Integer 入群时间 只读
MsgSeq Integer 该成员当前已读消息 Seq 只读
MsgFlag String 消息接收选项 消息接收选项包括如下几种:AcceptAndNotify 表示接收并提示;AcceptNotNotify 表示接收不提示(不会触发 APNs 远程推送);Discard 表示屏蔽群消息(不会向客户端推送消息)
LastSendMsgTime Integer 最后发送消息的时间 只读
NameCard String 群名片 可读可写

自定义群组形态

即时通信 IM 默认提供私有群、公开群、聊天室、音视频聊天室和在线成员广播大群五种群组形态,每种群组形态的具体特性参见上文群组形态介绍。五种默认形态可以满足大多数群组类型的通信需求。但是,如果 App 存在较为特殊的群组通信需求,可对现有群组形态的某些特性进行修改,或者组装新的群组形态。
例如:对于在办公场景下使用的群组,它有可能需要群内任意成员都具有最高级别的管理权限,此时 App 便可自定义一种新的群组类型:OAGroup,并打开“是否允许普通成员踢人”选项;再如,公开群默认情况下不允许用户查看自己入群之前的历史消息,但只要 App 需要,便可打开这一选项。

不论是增加新的群组形态还是修改默认群组形态都需要根据 工单模板 提交工单申请配置。

注意:

新增群组形态时,需要指定一种参考的默认群组形态。其中,在线成员广播大群(BChatRoom)不能作为参考形态。
成功配置后,除了在申请工单中指定要修改的特性外,新群组形态具有的特性与参考的默认形态是相同的。

自定义群组 ID

默认情况下,App 创建群时,即时通信 IM 会为新创建的群组分配一个默认的群组 ID。该 ID 将以 @TGS# 开头,且保证在 App 中唯一。
为了使得群组 ID 更加简单,便于记忆传播,即时通信 IM 支持 App 在通过 REST API 创建群组时自定义群组 ID。自定义群组 ID 必须为可打印 ASCII 字符(0x20-0x7e),最长48个字节,且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)。

自定义字段

即时通信 IM 支持 App 根据业务需求,在群组和群成员两个维度上设置自定义字段。群组维度最多支持20个字段,群成员维度最多支持5个字段。利用自定义字段,App 可以将一些额外数据附加到群组之上,并可以通过现有接口进行读写操作。但请注意自定义字段设置并使用后,就无法删除。

介绍

每个自定义字段有以下特性:

  1. 为 Key-Value 形式。
  2. Key 为 String 类型,长度不超过16字节,其命名仅支持英文大小写字母、数字、下划线。
  3. Value 为用户自定义 Buffer,可以为二进制数据,群维度的 Value 长度不超过512字节,群成员维度的 Value 长度不超过64字节。
  4. 支持配置每个 Key 的最小读权限、最小写权限。

每个自定义字段的读写权限从高到低分别是:

  1. App 管理员可读/可写。
  2. 群主可读/可写。
  3. 群管理员可读/可写。
  4. 群成员可读/可写。
  5. 任何人(包括非成员)可读/可写。

例如,假设 App 需要在群组中扩展一个字段:GroupLevel,其 Value 为一个数字,用于记录该群的等级信息。假设等级信息需要 App 后台计算得出,那么该字段的最小写权限应当为“App 管理员可写”。该字段应当为群的公开资料,故而其最小读权限应当为“任何人(包括非成员)可读”。

对于 C/C++ 开发者,如果需要存储的 Value 是数字,建议将其存储为数字的字符串形式,而非其二进制形式(例如,当存储的数字是1时,建议存储字符串“1”,而非二进制数据 0x01)。对于自定义字段,即时通信 IM 后续会扩展出更多操作方式,例如对 Value 进行特定数学操作等,这些运算未来都会以基于字符串形式表示的数字来进行操作。

配置方法

这两个维度的自定义字段,都可以通过即时通信 IM 控制台进行配置。
配置群成员维度的自定义字段,需要说明要为哪种群组形态新增自定义字段。但对于 AVChatRoom、BChatRoom 以及参考这两种群组形态设置的自定义群组形态,因为不存储所有群成员的资料,所以不支持群成员维度的自定义字段。
“自己的读写权限”是指对于自己本人的群成员维度自定义字段值,自己是否有读写权限。例如,某一个群成员维度的自定义字段是“MemberLevel”(表示成员在群组中的等级),成员一般可以读取但却无权修改自己的等级,因此自己的权限是“可读&不可写”。

自定义回调

第三方回调是 App 实现特殊需求的重要方式之一,为用户提供了自定义行为的能力。
即时通信 IM 群组系统支持多种回调,具体参见 第三方回调简介以及 回调命令列表