超大群管理
更新时间: 2024/03/14 19:21:10
网易云信 NIM SDK 提供超大群功能,支持用户加入、退出、转让、修改、查询超大群。
超大群无法在客户端侧创建和解散,只能通过服务端 API 处理,具体请参见创建超大群和解散超大群。
技术原理
网易云信 IM Web Elite SDK 的 SuperTeamServiceInterface
提供管理超大群的相关方法,帮助您快速实现和使用超大群的管理功能。
在进行超大群管理的过程中,往往会收到相关的系统通知,主要通过触发 IMEventInterface
的sysMsg
事件来实现。
超大群相关 API 都挂载在 superTeam
模块中,使用 nim.superTeam
进行访问,具体请参见 SuperTeamServiceInterface
。
超大群相关事件监听
在进行超大群操作前,您可以提前注册监听超大群相关事件。监听后,在进行超大群管理相关操作时,会收到对应的通知。
超大群可能会触发以下事件,具体事件类型请参见IMEventInterface
。
superTeams
:初始化同步超大群mySuperTeamMembers
:初始化同步自己在所有超大群中的用户信息;在线或多端登录时修改自己在超大群中的用户信息,也会收到该事件通知updateSuperTeamMember
更新超大群成员的多端同步updateSuperTeam
超大群更新addSuperTeamMembers
超大群成员添加updateSuperTeamManagers
超大群管理员更新transferSuperTeam
转让超大群removeSuperTeamMembers
移除超大群成员dismissSuperTeam
超大群解散updateSuperTeamMembersMute
超大群成员禁言
示例代码如下:
// 事件声明
const eventList = [
'superTeams',// 初始化同步超大群
'mySuperTeamMembers',//初始化同步自己在所有超大群的用户信息
'updateSuperTeamMember', // 更新超大群成员的多端同步
'updateSuperTeam', 'addSuperTeamMembers', 'updateSuperTeamManagers', 'transferSuperTeam', 'removeSuperTeamMembers', 'dismissSuperTeam', 'updateSuperTeamMembersMute',
]
// 注册监听
eventList.forEach((key: any) => {
nim.on(key, (res) => {
console.log(`收到 ${key} 事件:`, res ? JSON.parse(JSON.stringify(res)) : res);
});
})
实现流程
本章节通过群主、管理员、普通成员之间的交互为例,介绍超大群管理的实现流程。
超大群的创建和解散需要用户调用服务端 API 实现:
- 创建超大群:
superteam/create.action
- 解散超大群:
superteam/dismiss.action
加入超大群
加入超大群可以通过以下两种方式:
- 用户接受邀请入群。
- 用户主动申请入群。
邀请入群
邀请入群的权限可以通过 inviteMode
来定义,设为 manager
,那么仅限群主和管理员可以邀请人进群;设为 all
,那么超大群内的所有人都可以邀请人进群。
通过调用 addSuperTeamMembers
方法邀请其他用户进入超大群。
- 若超大群的被邀请模式
beInviteMode
为noVerify
,那么无需验证,其他用户可直接加入超大群。 - 若超大群的被邀请模式
beInviteMode
为needVerify
,那么需要被邀请用户同意才能加入超大群。
接口原型
jsaddSuperTeamMembers(options: AddSuperTeamMembersOptions): Promise<void>
AddSuperTeamMembersOptions
参数说明
参数 | 类型 | 说明 |
---|---|---|
teamId | String | 群ID |
accounts | Array | 邀请入群的用户 |
ext | String | 第三方扩展字段, 开发者可以自行扩展, 建议封装成 JSON 格式字符串 |
ps | String | 附言,长度不得大于 5000,开发者可以使用 JSON 格式字符串填充 |
- 发起邀请后,被邀请用户会收到系统通知,其通知类型为
superTeamInvite
。 - 被邀请用户可以调用
acceptSuperTeamInvite
方法接受入群邀请。接受后,该群的所有群成员会收到超大群通知消息addSuperTeamMembers
。 - 也可以调用
rejectSuperTeamInvite
方法拒绝入群邀请。拒绝后,邀请者会收到系统通知,其通知类型为rejectSuperTeamInvite
。
示例代码:
jsawait nim.superTeam.addSuperTeamMembers({
accounts: ['cs1', 'cs2'],
teamId: '{{TARGET_SUPERTEAM_ID}}',
ps: '我邀请了xx 加入',
ext: '附加字段,推荐使用 JSON 格式字符串',
});
申请入群
通过调用 applySuperTeam
方法申请加入超大群。
- 若超大群的加入模式
joinMode
为noVerify
,那么无需验证,其他用户可直接加入超大群。 - 若超大群的加入模式
joinMode
为needVerify
,那么需要群主或者群管理员同意才能加入超大群。
接口原型:
jsapplySuperTeam(options: ApplySuperTeamOptions): Promise<SuperTeam>
参数 | 类型 | 说明 |
---|---|---|
teamId | String | 群ID |
ps | String | 附言,长度不得大于 5000,开发者可以使用 JSON 格式字符串填充 |
- 当用户发起入群申请后,该群群主和管理员会收到系统通知,其通知类型为
applySuperTeam
。 - 群主和群管理员可以调用
passSuperTeamApply
方法接受入群申请。接受后,该群的所有群成员会收到超大群通知消息,其类型为addSuperTeamMembers
。 - 也可以调用
rejectSuperTeamApply
方法拒绝入群申请。拒绝后,申请者会收到系统通知,其通知类型为rejectSuperTeamApply
。
示例代码:
jsawait nim.superTeam.applySuperTeam({
teamId: '{{TARGET_SUPERTEAM_ID}}',
ps: '我申请加入 xx 超大群',
});
转让超大群
只有超大群群主才有转让超大群的权限。
通过调用 transferSuperTeam
方法将超大群转让给其他成员。
- 转让群后, 群主身份转移,所有群成员会收到超大群通知消息,其类型为
transferSuperTeam
。 - 如果转让群的同时离开群, 那么相当于同时调用
leaveSuperTeam
主动退群,所有群成员会再收到超大群通知消息,其类型为removeSuperTeamMembers
。
接口原型:
jstransferSuperTeam(options: TransferSuperTeamOptions): Promise<void>
示例代码:
jsawait nim.superTeam.transferSuperTeam({
account: 'cs1'
teamId: '{{TARGET_SUPERTEAM_ID}}',
leave: 'false',
});
退出超大群
退出超大群可以通过以下两种方式:
- 群主或管理员将用户踢出超大群。
- 用户主动退群。
踢人出群
- 只有超大群群主和管理员才能将成员踢出超大群。
- 管理员不能踢群主和其他管理员。
通过调用 removeSuperTeamMembers
方法将成员移出超大群。
移除成员后,所有群成员会收到超大群通知消息,其类型为 removeSuperTeamMembers
。
接口原型:
jsremoveSuperTeamMembers(options: RemoveSuperTeamMembersOptions): Promise<void>
示例代码:
jsawait nim.superTeam.removeSuperTeamMembers({
accounts: ['cs1', 'cs2'],
teamId: '{{TARGET_SUPERTEAM_ID}}',
});
主动退群
通过调用 leaveSuperTeam
方法主动退出超大群。
除群主(需先转让群主)外,其他用户均可以直接主动退群。主动退群后,,所有群成员会收到超大群通知消息,其类型为 removeSuperTeamMembers
。
接口原型:
jsleaveSuperTeam(options: { teamId: string }): Promise<void>
示例代码:
jsawait nim.superTeam.leaveSuperTeam({
teamId: '{{TARGET_SUPERTEAM_ID}}',
});
修改超大群信息
修改超大群信息需要权限。若超大群的群信息修改权限 TeamUpdateTeamMode
为 manager
,那么只有群主和管理员才能修超大群信息;若为 all
,则超大群内的所有人都可以修改超大群信息。若没有该权限,可以联系超大群群主或管理员修改群信息修改权限 TeamUpdateTeamMode
。
通过调用 updateSuperTeamInfo
方法修改并更新超大群信息。
主要更新以下信息:
- 群加入方式
TeamJoinMode
- 群被邀请模式
TeamBeInviteMode
- 群邀请模式
TeamInviteMode
- 群信息修改权限
TeamUpdateTeamMode
- 群信息自定义字段修改权限
TeamUpdateExtMode
当用户更新超大群信息后,所有群成员会收到超大群通知消息,其类型为 updateSuperTeam
。
接口原型:
jsupdateSuperTeamInfo(options: UpdateSuperTeamInfoOptions): Promise<SuperTeam>
其中,UpdateSuperTeamInfoOptions
是更新超大群信息的入参。UpdateSuperTeamInfoOptions
中的参数可参考超大群对象。
示例代码:
jsawait nim.superTeam.updateSuperTeamInfo({
teamId: '{{TARGET_SUPERTEAM_ID}}',
name: '超大群',
avatar: 'avatar',
intro: '群简介',
announcement: '群公告',
joinMode: 'needVerify',
beInviteMode: 'nodVerify',
inviteMode: 'all',
updateTeamMode: 'all',
updateCustomMode: 'all',
ext: '群扩展字段, 建议封装成 JSON 格式字符串',
});
查询超大群信息
- SDK 通过调用
getSuperTeamInfo
方法根据群 ID 查询单个超大群的详细信息。
接口原型:
jsgetSuperTeamInfo(options: { teamId: string }): Promise<SuperTeam>
- SDK 通过分页获取超大群列表,参见
getSuperTeams
。
接口原型:
jsgetSuperTeams(): Promise<SuperTeam[]>
示例代码:
jsconst SuperTeam = await nim.superTeam.getSuperTeamInfo({
teamId: '{{TARGET_SUPERTEAM_ID}}'
});
const SuperTeams = await nim.superTeam.getSuperTeams();
API 参考
API |
说明 |
---|---|
addSuperTeamMembers |
将某人加入超大群 |
acceptSuperTeamInvite |
接受入群邀请 |
rejectSuperTeamInvite |
拒绝入群邀请 |
applySuperTeam |
申请加入超大群 |
passSuperTeamApply |
接受入群申请 |
rejectSuperTeamApply |
拒绝入群申请 |
removeSuperTeamMembers |
将某人移出超大群 |
leaveSuperTeam |
主动退出超大群 |
transferSuperTeam |
转让超大群 |
updateSuperTeamInfo |
修改并更新超大群信息 |
getSuperTeamInfo |
查询超大群信息 |
getSuperTeams |
查询超大群列表 |