超级群场景实践
超级群概述
融云超级群专为超大规模社区打造,支持百万级成员同时在线、亿级消息并发,是构建大型社区应用的理想会话方案。本文基于融云 IMLib 即时通讯能力,围绕超级群社区场景,系统梳理应用接入过程中的常见业务需求,并提供对应的解决方案与实现指引。
| 概念 | 说明 |
|---|---|
| 超级群 | 无人数上限的群组,类似 Discord 的"服务器" |
| 频道(Channel) | 同一超级群内可划分多个频道,通过 channelId 区分不同话题讨论区 |
与普通群、聊天室的区别
| 特性 | 普通群 | 聊天室 | 超级群 |
|---|---|---|---|
| 成员上限 | 3000 人 | 无限制 | 无限制 |
| 离线消息 | 连接后拉取全部离线消息 | 加入后拉取一定数量历史消息 | 同步会话与最后一条消息,用户进入会话后主动拉取 |
| 远程推送 | 离线时每条消息主动推送 | 无推送 | 离线时固定频率推送(可配置) |
| @消息 | 群内成员全量接收 | 无 @ | 支持 @指定成员、@全员 |
| 消息可靠性 | 100% | 高并发时有抛弃策略 | 100% |
| 频道 | 不支持 | 不支持 | 支持多频道(公有/私有) |
技术优势
- 消息可靠性:海量消息高并发场景下,100% 到达,不丢不重不乱序。
- 成员无上限:单个超级群/频道无人数限制,可承载百万级社区成员。
- 消息状态服务端维护:未读数等状态全部由服务端维护,减轻客户端开发压力。
- 高并发不卡顿:用户无论离线或在线,都能正常接收推送或消息。
应用场景
超级群专为 Discord、Telegram 等实时社群运营模式设计,适用于技术开发社区、兴趣社群、私域流量、粉丝管理、出海运营等业务。
以技术开发社区举例
场景示例:
超级群:前端开发者社区(另有服务端开发者社区等超级群,用户可按需加入)
├── 📢 公有频道:公告通知(官方发布重要信息)
├── 💬 公有频道:新人报到(新成员自我介绍)
├── 🔧 公有频道:技术交流(日常技术讨论)
├── 📚 公有频道:资源分享(学习资料、工具推荐)
├── 🎯 公有频道:求职招聘(工作机会分享)
├── 💧 公有频道:闲聊水吧(轻松聊天)
└── 👑 私有频道:VIP 专区(付费会员专属内容)
功能应用:
- 频道分类:按话题划分不同频道,避免信息混杂
- @ 提及:管理员使用 @全员 发布重要通知
- 私有频道:VIP 会员付费后加入私有频道,享受独家内容和深度交流
- 禁言管理:对发广告、违规内容的用户进行禁言处理
- 消息撤回:管理员删除不当言论,维护社区氛围
- 免打扰:用户可屏蔽“闲聊水吧”等高频频道,只关注核心内容
准备工作
在开始之前,请确保已创建应用并完成客户端 SDK 集成。
- 需先按控制台内嵌指南嵌入到管理后台的 IM 服务功能配置页面(page_code: im_service_config)中,进入超级群开通(仅 IM 尊享版支持开通超级群服务)。
- 超级群的会话类型为
ULTRA_GROUP,与普通群GROUP不同。 - 超级群会话没有离线消息,如果想获取用户离线时候的消息需要您根据超级群会话最后一条消息去获取远端的历史消息。
群管理
创建超级群
使用场景: 类似 Discord 中创建一个"服务器"(Server),作为整个社区的容器。例如创建"前端开发者社区""游戏公会""粉丝后援会"等。
功能目的: 超级群是整个社区的基础架构,所有成员、频道、消息都基于超级群进行组织。一个超级群可以容纳百万级用户,支持在其下创建多个频道进行话题分类。
超级群仅支持通过服务端 API 创建超级群创建,客户端不支持直接创建。创建时需指定创建者用户 ID、超级群 ID 和超级群名称。超级群 ID 须由 App 服务器自行生成并维护。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result createUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setUserId("user001")
.setName("ultragroupName");
Result result = ultraGroup.create(ultraGroupModel);
System.out.println("ultragroup create result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
$appKey = '你的 AppKey';
$appSecret = '你的 AppSecret';
$rongSDK = new RongCloud($appKey, $appSecret);
$group = [
'id' => 'super_group_001', // 超级群 ID
'name' => '测试超级群', // 超级群名称
'member' => [
'id' => 'user_001' // 创建人用户 ID
],
];
$result = $rongSDK->getUltragroup()->create($group);
print_r($result);
func TestRongCloud_UGGroupCreate(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
err, requestId := rc.UGGroupCreate(
"u02", // 创建者用户 ID
"rongcloud_group01", // 超级群 ID
"super", // 超级群名称
)
t.Log(err)
t.Log(requestId)
}
接口: POST /ultragroup/create.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
userId | String | 是 | 创建者用户 ID,创建后同时加入超级群 |
groupId | String | 是 | 超级群 ID,最大长度 64 字符,支持大小写英文字母与数字 |
groupName | String | 是 | 超级群名称,用于远程推送通知显示 |
示例代码:
POST /ultragroup/create.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Nonce: 14314
Timestamp: 1408710653491
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
userId=user001&groupId=ultragroup001&groupName=技术交流社区
返回结果:
{"code":200}
解散超级群
使用场景: 当社区不再运营、项目结束或需要彻底关闭社群时(类似 Discord 删除服务器)。
功能目的: 彻底清理超级群相关数据,包括所有频道、成员关系。解散后,原成员无法再接收该群的任何消息。
超级群解散需通过服务端 API 解散超级群完成。解散后,所有用户无法再接收该群消息,群成员关系不复存在。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result dismissUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
String groupId = "ultragroup001";
Result result = ultraGroup.dis(groupId);
System.out.println("ultragroup dismiss result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGGroupDismiss()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->dismiss([
'id' => 'rongcloud_group01',
]);
print_r($result);
}
func TestRongCloud_UGGroupDismiss(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
err, requestId := rc.UGGroupDismiss(
"rongcloud_group01", // 超级群 ID
)
t.Log(err)
t.Log(requestId)
}
接口: POST /ultragroup/dis.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
groupId | String | 是 | 要解散的超级群 ID |
示例代码:
POST /ultragroup/dis.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Timestamp: 1408710653491
Nonce: 14314
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
groupId=ultragroup001
返回结果:
{"code":200}
加入超级群
使用场景: 用户点击邀请链接、搜索发现社区后加 入(类似 Discord 点击邀请链接加入服务器),或由管理员批量导入成员。
功能目的: 将用户添加为超级群成员,加入后可以看到所有公有频道的消息,参与社区讨论。适用于开放式社区招募、内部团队成员管理、粉丝群运营等场景。
将用户加入指定超级群需通过服务端 API 加入超级群完成。加入后,用户将可以收到该群的消息。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result joinUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setUserId("user001");
Result result = ultraGroup.join(ultraGroupModel);
System.out.println("ultragroup join result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGGroupJoin()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->joins([
'id' => 'rongcloud_group01', // 超级群 ID
'member' => [
'id' => 'user01', // 用户 ID
],
]);
print_r($result);
}
func TestRongCloud_UGGroupJoin(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
err, requestId := rc.UGGroupJoin(
"u02", // 用户 ID
"rongcloud_group01", // 超级群 ID
)
t.Log(err)
t.Log(requestId)
}
接口: POST /ultragroup/join.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
userId | String | 是 | 要加入群的用户 ID,单次仅支持 1 个用户 |
groupId | String | 是 | 要加入的超级群 ID |
示例代码:
POST /ultragroup/join.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Timestamp: 1408710653491
Nonce: 14314
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
userId=user002&groupId=ultragroup001
返回结果:
{"code":200}
退出超级群
使用场景: 用户主动退出社区,或管理员踢出违规用户(类似 Discord 的离开服务器或被封禁)。
功能目的: 将用户从超级群中移除,退出后不再接收该群的任何消息和通知,无法访问任何频道内容。适用于用户主动离开、管理员清理不活跃成员、封禁违规用户等场景。
将用户从指定超级群中移除需通过服务端 API 退出超级群完成。退出后,用户不再接收该群组的消息。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result quitUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setUserId("user001");
Result result = ultraGroup.quit(ultraGroupModel);
System.out.println("ultragroup quit result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGGroupQuit()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->quit([
'id' => 'rongcloud_group01', // 超级群 ID
'member' => [
'id' => 'user01', // 用户 ID
],
]);
print_r($result);
}
func TestRongCloud_UGGroupQuit(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
err, requestId := rc.UGGroupQuit(
"u02", // 用户 ID
"rongcloud_group01", // 超级群 ID
)
t.Log(err)
t.Log(requestId)
}
}
接口: POST /ultragroup/quit.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
userId | String | 是 | 要退出群的用户 ID |
groupId | String | 是 | 要退出的超级群 ID |
示例代码:
POST /ultragroup/quit.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Timestamp: 1408710653491
Nonce: 14314
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
userId=user002&groupId=ultragroup001
返回结果:
{"code":200}
频道管理
概述
频道是超级群内的话题分区,通过 channelId(客户端)或 busChannel(服务端)区分。超级群支持创建多个频道,按话题、场景划分不同的讨论区。
2022.10.13 日后开通的超级群服务,创建时会自动创建一个 RCDefault 默认频道。
频道类型:
| 类型 | 说明 | 适用场景 |
|---|---|---|
| 公有频道 | 所有超级群成员自动接收该频道下的消息 | 公告、通用话题讨论 |
| 私有频道 | 仅频道成员可收发消息,无频道人数限制 | VIP 频道、管理员频道、付费内容区 |
| 默认频道 | ID 为 RCDefault,超级群创建时自动创建,不可转为私有频 道 | 新人引导、欢迎频道 |
频道特性:
- 单个超级群可创建多个频道,具体数量限制请参考超级群频道文档。
- 频道类型支持动态切换(公有 ↔ 私有)。
创建频道
使用场景: 在社区内按话题创建不同的讨论区,例如"技术交流""求职招聘""闲聊水吧"等(类似 Discord 的 #general、#tech-talk 等文字频道)。
功能目的: 将不同主题的讨论分隔开来,避免信息混杂。用户可以只关注感兴趣的频道,减少信息过载。支持创建公有频道(所有成员可见)和私有频道(仅特定成员可见)。 频道创建需通过服务端 API 创建频道完成。创建时需指定超级群 ID、频道 ID、频道名称和频道类型。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result createUltraGroupChannel() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001");
Result result = ultraGroup.busChannel.add(ultraGroupModel);
System.out.println("ultragroup channel create result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGChannelCreate()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->BusChannel()->add([
'id' => 'rongcloud_group01', // 超级群 ID
'busChannel' => 'channel01', // 超级群频道 ID
'type' => 0, // 0 公开频道,1 私有频道
]);
print_r($result);
}
func TestRongCloud_UGGroupChannelCreate(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
res, err := rc.UGGroupChannelCreate(
"rongcloud_group01", // 超级群 ID
"channel001", // 频道 ID
"0", // 频道类型:0 公开,1 私有
)
t.Log(err)
t.Log(string(res))
}
接口: POST /ultragroup/channel/create.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
groupId | String | 是 | 超级群 ID |
busChannel | String | 是 | 频道 ID |
type | Int | 是 | 频道类型,0: 公有频道,1: 私有频道 |
示例代码:
POST /ultragroup/channel/create.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Nonce: 14314
Timestamp: 1408710653491
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
groupId=ultragroup001&busChannel=channel_tech&type=0
返回结果:
{"code":200}
说明:
- 创建后,公有频道消息会自动推送给所有超级群成员。
- 私有频道需单独添加成员才能收发消息。
删除频道
使用场景: 话题讨论结束、活动结束后清理临时频道,或合并重复频道优化社区结构(类似 Discord 删除不再需要的频道)。
功能目的: 清理不再使用的频道,保持社区结构清晰。删除后该频道的所有消息和成员关系被清理,用户无法再在该频道发送或查看消息。
频道删除需通过服务端 API 删除频道完成。删除后,该频道下的消息、成员关系将被清理。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result deleteUltraGroupChannel() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001");
Result result = ultraGroup.busChannel.remove(ultraGroupModel);
System.out.println("ultragroup channel delete result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGChannelDelete()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->BusChannel()->remove([
'id' => 'rongcloud_group01', // 超级群 ID
'busChannel' => 'channel01', // 超级群频道 ID
]);
print_r($result);
}
func TestRongCloud_UGChannelDelete(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
err, requestId := rc.UGChannelDelete(
"rongcloud_group01", // 超级群 ID
"channel001", // 频道 ID
)
t.Log(err)
t.Log(requestId)
}
接口: POST /ultragroup/channel/del.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
groupId | String | 是 | 超级群 ID |
busChannel | String | 是 | 要删除的频道 ID |
示例代码:
POST /ultragroup/channel/del.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Nonce: 14314
Timestamp: 1408710653491
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
groupId=ultragroup001&busChannel=channel_tech
返回结果:
{"code":200}
说明:
- 删除操作不可逆,请谨慎操作。
- 删除后无法在该频道中发送消息。
变更频道类型
使用场景: 将原本开放的公告频道转为管理员专属,或将 VIP 专属频道开放给所有成员(类似 Discord 锁定/解锁频道,或调整频道权限)。
功能目的: 灵活控制频道的访问权限。公有频道所有成员都能看到消息,私有频道仅特定成员可见。通过切换频道类型,可以实现权益升级、内容分级、临时限制访问等业务场景。
支持将公有频道切换为私有频道,或将私有频道切换为公有频道,需通过服务端 API 变更频道类型完成。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result changeUltraGroupChannelType() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001")
.setType(1);
Result result = ultraGroup.busChannel.change(ultraGroupModel);
System.out.println("ultragroup channel type change result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGChannelChangeType()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->BusChannel()->change([
'id' => 'rongcloud_group01', // 超级群 ID
'busChannel' => 'channel01', // 超级群频道 ID
'type' => 1, // 0 公开频道,1 私有频道
]);
print_r($result);
}
func TestRongCloud_UGGroupChannelChange(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
res, err := rc.UGGroupChannelChange(
"rongcloud_group01", // 超级群 ID
"channel001", // 频道 ID
"1", // 频道类型:0 公开,1 私有
)
t.Log(err)
t.Log(string(res))
}
接口: POST /ultragroup/channel/type/change.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
groupId | String | 是 | 超级群 ID |
busChannel | String | 是 | 频道 ID |
type | Int | 是 | 频道类型,0: 公有频道,1: 私有频道 |
示例代码:
POST /ultragroup/channel/type/change.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Nonce: 14314
Timestamp: 1408710653491
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
groupId=ultragroup001&busChannel=channel_vip&type=1
返回结果:
{"code":200}
说明:
- 公有→私有:非频道成员将无法收到该频道消息。
- 私有→公有:所有超级群成员自动接收消息,但私有频道成员列表不会被删除。
添加私有频道成员
使用场景: 将付费会员加入 VIP 专属频道,将管理员加入管理频道,或为特定用户开通专属内容访问权限(类似 Discord 为角色分配频道查看权限)。
功能目的: 精细化控制私有频道的成员列表,实现分层运营。只有被添加的成员才能看到并参与私有频道的讨论,适用于付费内容、内部管理、小范围讨论等场景。
私有频道成员添加需通过服务端 API 添加私有频道成员完成。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result addPrivateChannelMembers() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupMember[] members = {
new UltraGroupMember().setId("user001"),
new UltraGroupMember().setId("user002")
};
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001")
.setMembers(members);
Result result = ultraGroup.busChannel.privateUserAdd(ultraGroupModel);
System.out.println("ultragroup private channel member add result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGChannelPrivateUserAdd()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->BusChannel()->addPrivateUsers([
'id' => 'rongcloud_group01', // 超级群 ID
'busChannel' => 'channel01', // 私有频道 ID
'members' => [
['id' => 'user01'], // 用户 ID
['id' => 'user02'],
],
]);
print_r($result);
}
func TestRongCloud_UGChannelPrivateUserAdd(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
res, err := rc.UGChannelPrivateUserAdd(
"rongcloud_group01", // 超级群 ID
"channel001", // 私有频道 ID
"u01,u02", // 用户 ID,多个用英文逗号分隔
)
t.Log(err)
t.Log(string(res))
}
接口: POST /ultragroup/channel/user/add.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
groupId | String | 是 | 超级群 ID |
busChannel | String | 是 | 私有频道 ID |
users | String[] | 是 | 要添加的用户 ID 列表 |
示例代码:
POST /ultragroup/channel/user/add.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Nonce: 14314
Timestamp: 1408710653491
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
groupId=ultragroup001&busChannel=channel_vip&users=user003&users=user004
返回结果:
{"code":200}
说明:
- 支持批量添加,添加后成员立即获得该频道的收发权限。
移除私有频道成员
使用场景: 会员到期后移出 VIP 频道,撤销管理员权限时移出管理频道,或清理不活跃的私有频道成员(类似 Discord 移除成员的频道访问权限)。
功能目的: 动态管理私有频道的成员访问权限。移除后,成员将无法再看到该频道的消息和参与讨论,适用于权益到期、权限变更、违规处理等场景。
私有频道成员移除需通过服务端 API 删除私有频道成员完成。
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
- Server API
public Result removePrivateChannelMembers() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;
UltraGroupMember[] members = {
new UltraGroupMember().setId("user001"),
new UltraGroupMember().setId("user002")
};
UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001")
.setMembers(members);
Result result = ultraGroup.busChannel.privateUserRemove(ultraGroupModel);
System.out.println("ultragroup private channel member remove result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGChannelPrivateUserRemove()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getUltragroup()->BusChannel()->removePrivateUsers([
'id' => 'rongcloud_group01', // 超级群 ID
'busChannel' => 'channel01', // 私有频道 ID
'members' => [
['id' => 'user01'], // 用户 ID
['id' => 'user02'],
],
]);
print_r($result);
}
func TestRongCloud_UGChannelPrivateUserDel(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
res, err := rc.UGChannelPrivateUserDel(
"rongcloud_group01", // 超级群 ID
"channel001", // 私有频道 ID
"u01,u02", // 用户 ID,多个用英文逗号分隔
)
t.Log(err)
t.Log(string(res))
}
接口: POST /ultragroup/channel/user/del.json
参数说明:
| 参数 | 类型 | 必传 | 说明 |
|---|---|---|---|
groupId | String | 是 | 超级群 ID |
busChannel | String | 是 | 私有频道 ID |
users | String[] | 是 | 要移除的用户 ID 列表 |
示例代码:
POST /ultragroup/channel/user/del.json HTTP/1.1
Host: api-cn.ronghub.com
App-Key: uwd1c0sxdlx2
Nonce: 14314
Timestamp: 1408710653491
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
groupId=ultragroup001&busChannel=channel_vip&users=user003
返回结果:
{"code":200}
说明:
- 移除后成员将不再接收该频道消息。
消息相关
发送超级群消息
使用场景: 用户在频道内发送文字、图片、表情、文件等内容进行交流(类似 Discord 在频道内发消息)。
功能目的: 实现社区成员之间的实时沟通。支持多种消息类型(文本、图片、语音、视频、文件),支持 @ 提及特定成员,支持自定义离线推送内容。消息发送到指定频道,只有该频道的成员能看到。
客户端发送超级群消息时,需设置 conversationType = ULTRA_GROUP,并指定 targetId(超级群 ID)+ channelId(频道 ID)。
发送普通消息:
- Android
- iOS
- Web
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
String targetId = "ultragroup001"; // 超级群 ID
ConversationType conversationType = Conversation.ConversationType.ULTRA_GROUP;
String channelId = "channel_tech"; // 频道 ID
TextMessage messageContent = TextMessage.obtain("这是一条超级群消息");
Message message = Message.obtain(targetId, conversationType, channelId, messageContent);
RongCoreClient.getInstance().sendMessage(message, null, null, new IRongCoreCallback.ISendMessageCallback() {
@Override
public void onAttached(Message message) {
// 消息已存入本地数据库
}
@Override
public void onSuccess(Message message) {
// 消息发送成功
}
@Override
public void onError(Message message, IRongCoreEnum.CoreErrorCode errorCode) {
// 消息发送失败
}
});
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"测试文本消息"];
RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_ULTRAGROUP
targetId:@"targetId"
channelId:@"channelId"
direction:MessageDirection_SEND
content:messageContent];
[[RCCoreClient sharedCoreClient]
sendMessage:message
pushContent:nil
pushData:nil
attached:^(RCMessage *successMessage) {
//入库成功
}
successBlock:^(RCMessage *successMessage) {
//成功
}
errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
//失败
}];
// 定义消息投送目标会话
const conversation = {
conversationType: RongIMLib.ConversationType.ULTRA_GROUP,
targetId: '<目标 Id>',
channelId: '<频道ID>',
}
// 实例化待发送消息,RongIMLib.TextMessage 为内置文 本型消息
const message = new RongIMLib.TextMessage({ content: '' })
// 发送
RongIMLib.sendMessage(conversation, message).then((res) => {})
public Result sendUltraGroupMessage() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
TxtMessage txtMessage = new TxtMessage("这是一条超级群消息", "");
UltraGroupMessage message = new UltraGroupMessage()
.setSenderId("user001")
.setTargetId(new String[]{"ultragroup001"})
.setObjectName(txtMessage.getType())
.setContent(txtMessage);
Result result = rongCloud.message.ultraGroup.send(message);
System.out.println("ultragroup message send result: " + result);
return result;
}
<?php
require './RongCloud/RongCloud.php';
use RongCloud\RongCloud;
define('REGION_BJ', ['http://api.rong-api.com/', 'http://api-b.rong-api.com/']);
function TestRongCloud_UGMessageSend()
{
$rc = new RongCloud(
getenv('APP_KEY'),
getenv('APP_SECRET'),
REGION_BJ
);
$result = $rc->getMessage()->Ultragroup()->send([
'senderId' => 'user01', // 发送人用户 ID
'targetId' => ['rongcloud_group01'], // 超级群 ID,数组
'objectName' => 'RC:TxtMsg', // 消息类型
'content' => [
'content' => 'hello super group',
],
]);
print_r($result);
}
func TestRongCloud_UGGroupSend(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
REGION_BJ,
)
msg := TXTMsg{
Content: "hello",
Extra: "helloExtra",
}
content, err := msg.ToString()
if err != nil {
t.Log(err)
return
}
ugmsg := UGMessage{
FromUserId: "u01",
ToGroupIds: []string{
"rongcloud_group01",
},
ObjectName: "RC:TxtMsg",
Content: content,
StoreFlag: true,
BusChannel: "channel001",
}
err, requestId := rc.UGGroupSend(ugmsg)
t.Log(err)
t.Log(requestId)
}
说明:
- 支持发送文本、图片、语音、视频、文件等多种消息类型。
- 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
- 服务端也可通过 API 代发超级群消息(系统通知、运营消息等)。
接收超级群消息
使用场景: 用户打开 App 查看频道消息,滚动查看历史聊天记录(类似 Discord 进入频道查看消息历史)。
功能目的 : 让用户能够接收和查看频道内的实时消息及历史记录。超级群消息存储在云端,支持按需拉取历史消息,避免本地存储压力。用户可以随时回溯查看之前的讨论内容。
客户端通过监听消息接收回调获取超级群消息,接收方式与单群聊消息一致。
设置消息接收监听:
- Android
- iOS
- Web
// 接收消息示例:设置接收消息监听器,接收消息时会自动回调
RongCoreClient.addOnReceiveMessageListener(
new io.rong.imlib.listener.OnReceiveMessageWrapperListener() {
@Override
public boolean onReceivedMessage(Message message, ReceivedProfile profile) {
// 接收到消息
if (message.getConversationType() == Conversation.ConversationType.ULTRA_GROUP) {
String targetId = message.getTargetId(); // 超级群 ID
String channelId = message.getChannelId(); // 频道 ID
MessageContent content = message.getContent();
// 处理超级群消息
}
}
});
// 接收方设置消息接收代理并实现对应代理方法,在代理方法中通过 message.content 或者 objectName 判断不同消息类型
- (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object offline:(BOOL)offline hasPackage:(BOOL)hasPackage {
if ([message.content isMemberOfClass:[CustomMessage class]]) {
CustomMessage *msg = (CustomMessage *)message.content;
NSString *giftName = msg.giftName;
int giftCount = msg.giftCount;
}
}
// 设置消息监听
const Events = RongIMLib.Events
RongIMLib.addEventListener(Events.MESSAGES, (evt) => {
console.log(evt.messages)
})
拉取历史消息
超级群消息默认存储在云端,用户进入会话后需主动拉取远端历史消息。
- Android
- iOS
- Web
Conversation.ConversationType conversationType= Conversation.ConversationType.ULTRA_GROUP;//会话类型
String targetId="会话 Id";
String channelId="频道 Id";
HistoryMessageOption historyMessageOption=new HistoryMessageOption();
historyMessageOption.setDataTime(1662542712112L);//2022-09-07 17:25:12:112
historyMessageOption.setOrder(HistoryMessageOption.PullOrder.DESCEND);
historyMessageOption.setCount(20);
ChannelClient.getInstance().getMessages(conversationType, targetId, channelId, historyMessageOption, new IRongCoreCallback.IGetMessageCallbackEx() {
@Override
public void onComplete(List<Message> messageList, long syncTimestamp, boolean hasMoreMsg, IRongCoreEnum.CoreErrorCode errorCode) {
}
@Override
public void onFail(IRongCoreEnum.CoreErrorCode errorCode) {
}
});
RCHistoryMessageOption *option = [[RCHistoryMessageOption alloc] init];
option.order = RCHistoryMessageOrderDesc;
option.count = 20;
option.recordTime = message.sentTime; // 如果获取最新的 20 条消息,可以传 0。
[[RCChannelClient sharedChannelManager] getMessages:ConversationType_ULTRAGROUP targetId:@"targetId" channelId:@"channelId" option:option complete:^(NSArray *messages, RCErrorCode code) {
if (code == 0) {
// 成功
} else {
// 失败
}
}];
const conversation = {
conversationType: RongIMLib.ConversationType.ULTRA_GROUP,
targetId: '<目标用户Id>',
channelId: '',
}
RongIMLib.getHistoryMessages(conversation).then((res) => {
if (res.code === 0) {
console.log(res.data.list)
console.log(res.data.hasMore)
} else {
console.log(res.code, res.msg)
}
})
说明:
- 超级群没有离线消息推送机制(除非配置了离线推送)。
- 用户上线后根据会话最后一条消息拉取增量消息。
超级群消息变更同步
使用场景: 用户 A 修改了消息内容、撤回了消息、或给消息添加了表情回复,其他在线用户 B、C 需要实时看到这些变化(类似 Discord 中看到消息被编辑、被删除、或表情数量更新)。
功能目的: 保持所有用户看到的消息状态一致。当消息发生修改、撤回、扩展更新等变更时,融云服务端会自动推送变更通知给所有相关用户,客户端监听变更事件并刷新 UI,确保用户看到的都是最新状态。适用于消息编辑、消息撤回、表情回复、投票结果更新、订单状态变更等场景。
您可以通过设置消息变更监听器,来监听远端用户对消息的修改操作。
- Android
- iOS
- Web
//设置超级群消息变化监听
ChannelClient.getInstance().setUltraGroupMessageChangeListener(new IRongCoreListener.UltraGroupMessageChangeListener() {
@Override
public void onUltraGroupMessageModified(List<Message> messages) {
//消息内容发生变更
for (Message message : messages) {
if (message.isHasChanged()) {
// 刷新 UI
}
}
}
@Override
public void onUltraGroupMessageExpansionUpdated(List<Message> messages) {
//消息扩展更新,删除
}
@Override
public void onUltraGroupMessageRecalled(List<Message> messages) {
// 消息被撤回
}
});
设置 setRCUltraGroupMessageChangeDelegate: 代理:
[[RCChannelClient sharedChannelManager] setRCUltraGroupMessageChangeDelegate:self];
实现相关代理方法:
/*!
消息内容发生变更
@param messages 消息集合
*/
- (void)onUltraGroupMessageModified:(NSArray<RCMessage*>*)messages {
}
/*!
消息撤回
@param messages 消息集合
*/
- (void)onUltraGroupMessageRecalled:(NSArray<RCMessage*>*)messages {
}
/*!
消息扩展更新,删除
@param messages 消息集合
*/
- (void)onUltraGroupMessageExpansionUpdated:(NSArray<RCMessage*>*)messages {
}
// 监听消息修改通知
RongIMLib.addEventListener(RongIMLib.Events.ULTRA_GROUP_MESSAGE_MODIFIED, (messageList) => {
console.log(messageList)
})
// 监听超级群撤回通知
RongIMLib.addEventListener(RongIMLib.Events.ULTRA_GROUP_MESSAGE_RECALLED, (messageList) => {
console.log(messageList)
})
// 监听消息扩展通知
RongIMLib.addEventListener(RongIMLib.Events.ULTRA_GROUP_MESSAGE_EXPANSION_UPDATED, (messageList) => {
console.log(messageList)
})