群组消息

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

应用场景

群内收发消息

群成员在群内收发消息,类似 QQ 群、微信群的聊天方式。

App 管理员发送消息

群聊消息可以由 App 管理员在后台发送消息,也可以模拟其他用户身份发送消息(即使 App 管理员或发送者不是群成员,消息依然会下发)。

App 管理员模拟系统消息

通过 App 管理员在后台发送消息,可以模拟系统消息,以系统消息的形式给指定的群内在线成员,App 端收到 App 管理员的自定义消息可做特殊处理。

群消息的 SEQ 机制

即时通信 IM 会为每个群维护一个消息 SEQ。SEQ 的初始值为 1。群内每产生一条普通消息,即时通信 IM 后台会将当前 SEQ 的值作为该消息的 SEQ,并且将该 SEQ 自增 1。
群组 ID + SEQ,相当于是一条消息的唯一标识。

注意:

即时通信 IM 只会为普通消息产生 SEQ,不会为系统消息产生 SEQ;

群聊消息类型

功能类型 功能描述
文本消息 消息内容是普通文本
图片消息 消息内容为图片 URL 地址、尺寸、图片大小等信息
表情消息 表情消息是由开发者自定义
语音消息 语音数据需要提供时长信息,以秒为单位
地理位置消息 消息内容为地理位置标题、经度、纬度信息
文件消息 消息内容为文件的 URL 地址、大小、格式等信息,格式不限,最大支持28M
短视频消息 消息内容为语音文件的 URL 地址、时长、大小、格式等信息,最大支持28M
自定义消息 开发者自定义的消息类型,例如红包消息、石头剪刀布等形式的消息
系统通知消息 包含内置的系统通知消息和开发者自定义系统通知消息

群聊消息能力

群聊消息能力 功能描述 应用场景
发送群普通消息 群成员可以通过 IM SDK 接口发送消息。App 管理员无需加入群组,即可调用 REST API 在任意群组中发送消息。 群成员在群内发送消息,App 管理员向任意群组发送消息
发送群系统消息 App 管理员无需加入群组,即可调用 REST API 在群组中发送系统通知。该系统通知,只有群内在线成员才会收到该消息,不具备漫游能力。 App 管理员群内部分或者全部在线成员推送一条时效性较高的提醒
群消息离线推送 支持 Apple、华为、小米、OPPO、vivo、魅族等品牌手机离线推送 群聊消息离线推送
接收群在线消息 群成员可以通过 IM SDK 接收群聊在线消息 在线群成员实时接收群消息
群成员获取离线/历史消息 群成员通过 IM SDK 接口查询历史消息 群成员上线接收离线消息,群成员查看群聊天记录
App 后台获取群消息 App 管理员可通过 REST API 下载 App 在某一段时间内产生所有的消息;App 管理员亦可通过 REST API,获取任意群的聊天记录;App 后台可以通过群内发言之后回调,实时获取群消息。 App 定期备份消息记录的场景;App 需要快速获取指定群组历史消息的场景;App 需要实时获取群消息的场景
消息删除 可通过 REST API 将历史消息删除,确保该消息不被传播 群内恶意信息删除
群聊消息中携带发送者资料 在群消息中携带发送者的昵称、头像、群名片、用户维度的自定义字段、群维度的自定义字段、群成员维度的自定义字段 展示消息发送人昵称、头像等信息
脏字过滤 即时通信 IM 后台在用户发送的消息中检测到是否包含脏字,如包含则拒绝下发该消息,并向发送者返回错误码 80001;
即时通信 IM 已经默认配置了政治类、色情类的脏字,能够满足这两方面的大多数过滤需求。同时也支持 App 配置自定义的脏字。
消息安全打击
群消息发送控制 禁言和群消息发送前回调,是控制群消息发送的两种方式。 禁止群内某个成员发送消息,禁止群内所有成员发消息,App 后台过滤或修改消息
群消息接收控制 用户针对单个群组设置不同的消息接收选项:接收并提示,接收不提示,屏蔽消息。设置“接收不提示”后,iOS 终端会去掉 APNs 推送功能 用户屏蔽某个群组的消息
群消息频率控制 控制群普通消息的发送频率,默认值为 40条/秒。频控对象不包括 App 管理员用 REST API 发送的群系统消息。详细请参考下文消息优先级与频率控制。 避免消息刷屏

注意:

如需携带发送者昵称和头像,则必须把这两个字段的信息导入到即时通信 IM 的用户资料中。
如果需要携带自定义资料,则需要先在控制台配置自定义字段,然后再提工单申请在消息携带相应的字段。

群消息发送控制

可以通过以下方式控制群消息的发送:

控制方式 详细描述
群组内禁言 禁止某一用户一段时间内在群内发言,只针对单个群组有效。如果用户退群再重新入群,只要禁言时间没有过期,禁言依旧有效
群消息发送前回调 在把群消息下发给群成员之前,即时通信 IM 后台先去 App 后台询问是否允许下发消息,如果不允许,则拒绝下发消息;
App 后台在收到回调后,也可对消息内容进行修改并返回给即时通信 IM,即时通信 IM 将使用修改之后的信息进行下发,详情请参考 群内发言之前回调
但是即时通信 IM 在发起该回调后,最多只会等待2秒。如2秒内未收到应答,直接将消息下发给群成员,不会进行重试

消息优先级与频率控制

群消息优先级

群消息分为 4 个优先级,如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息。因此用户应根据消息的重要程度,来选择合适的优先级。
4个优先级从高到低,分别如下:

优先级 建议选择该优先级的消息类型
High 红包消息和礼物消息
Normal 普通文本消息
Low 点赞消息
Lowest 最不重要的消息

群消息频控

总消息数频控

总消息数频控是指单个群每秒最多能发送的消息数限制,默认值为 40条/秒。消息数量超过限制后,后台优先下发优先级相对较高的消息,同等优先级的消息随机排序。

被频控限制的消息,不会下发,不会存入历史消息,但会给发送人返回成功;会触发 群内发言之前回调,但不会触发 群内发言之后回调

优先级频控

优先级频控是指单个群每秒最多能发送多少条某优先级的消息,发消息请求只有在通过总消息数频控之后,才会进入优先级频控。
App 管理员/群主/群管理员发送的消息不受优先级频控限制;High 优先级的消息不受优先级频控限制,其余 3 个优先级可以独立配置,默认都为 40 条/秒。
一个 SDKAppID 下的每个 群组形态 都有自己的总消息数频控和优先级频控配置。如果需要修改默认值,请 提交工单 进行申请。

群组离线消息处理流程

群组离线消息处理流程:

  1. 用户 A 调用sendMessage给群组 C 发送消息,用户 B 处于下线状态;
    1.1 把群组 C 添加进用户 B 的最近联系人,缓存大小为 100 条;
    1.2 用户更新群组的消息信息,包括群组最新消息 seq;
    1.3 把消息存入漫游服务器中,时间限制 7 天。
  2. 用户B调用login接口登录即时通信 IM;
  3. SDK 自动拉取所有群组的消息 seq 信息,包括最新消息 seq 和未读计数;
  4. SDK 自动拉取最近联系人,通过OnNewMessage接口抛出;
  5. 同步消息过程完成,通过OnRefresh接口通知用户已完成群组数据同步;
  6. 用户调用getMessage,SDK 自动拉取漫游服务器。