====== 群组 ======
更新时间:2021-12-31
新版文档见:[[ccim:web:group1|群组管理]]。
环信 Web IM SDK 支持群组功能的集成,集成后可以进行如下操作:
* 群组管理
* 群成员管理
* 加群处理
* 禁言管理
* 黑名单管理
* 群消息管理
通过这些操作,可以组合帮助您完成多种场景下的 IM 需求。
**注意:**
从 Web SDK V1.4.11 开始,群组管理的接口都已更新了 Rest 版本,V1.4.10 (包括V1.4.10)以下版本仍然保留 XMPP 版本,如果需要继续使用XMPP 版本的接口,请参考[[im:400webimintegration:40groupchat|群组管理]]
**SDK从3.3.0版本开始支持promise, 3.3.0版本之前采用回调的方式,如使用promise报错请检查SDK版本。
**
**注意**:''1、群主+管理员 一起一共不超过100个,也就是不超过99个管理员。2、群组成员最大数(包括群主)取决于所选择的版本,不同版本最大数不同。''
----
----
===== 群组管理 =====
群组管理包含以下处理操作:
* 获取用户加入的群组列表
* 分页获取公开群
* 创建群组
* 获取群组信息
* 修改群组信息
* 移除成员
* 解散群组
* 退出群组
所有处理操作的示例下面会一一说明。
==== 获取用户加入的群组列表 ====
调用''getGroup''函数获取当前登录用户加入的群组列表,示例如下:
// 列出当前登录用户加入的所有群组
conn.getGroup().then((res) => {
console.log(res)
})
----
==== 分页获取公开群 ====
调用''listGroups''函数分页获取APP下所有的公开群组列表,示例如下:
let limit = 20,
cursor = globalCursor;
let options = {
limit: limit, // 预期每页获取的记录数
cursor: cursor, // 游标
};
conn.listGroups(options).then((res) => {
console.log(res)
})
**注意:**
* cursor: 如果数据还有下一页,API 返回值会包含此字段,传递此字段可获取下一页的数据,默认为''null'',为''null''时获取第一页数据
----
==== 创建群组 ====
调用''createGroupNew''函数创建群组,示例代码如下
let options = {
data: {
groupname: 'groupName', // 群组名
desc: 'group description', // 群组描述
members: ['user1', 'user2'], // 用户名组成的数组
public: true, // pub等于true时,创建为公开群
approval: true, // approval为true,加群需审批,为false时加群无需审批
allowinvites: allowInvites, // true:允许群成员邀请人加入此群,false:只有群主才可以往群里加人 注意公开群(public:true),则不允许群成员邀请别人加入此群
inviteNeedConfirm: false // 邀请加群,被邀请人是否需要确认。true 为需要被邀请者同意才会进群
},
success(res){},
error(err){},
};
conn.createGroupNew(options).then((res) => {
console.log(res)
})
**注意:**
* 创建群组成功后会在回调函数里调用''onCreateGroup''函数
----
==== 获取群组信息 ====
调用 ''getGroupInfo'' 根据群组 ID 获取群组详情,示例如下:
let options = {
groupId: 'groupId' // 群组id
};
conn.getGroupInfo(options).then((res) => {
console.log(res)
})
----
==== 修改群组信息 ====
只有群组的管理员可以修改群组名称和群组简介,调用''modifyGroup''修改群组信息,示例如下:
// 修改群信息
let option = {
groupId: 'groupId',
groupName: 'ChangeTest', // 群组名称
description: 'Change group information test' // 群组简介
};
conn.modifyGroup(option).then((res) => {
console.log(res)
})
**注意:**
* 在获取群组时候就可以获取群管理员的 ID ,从而前端可决定是否显示修改信息按钮。
----
==== 移除群组成员 ====
只有群组的管理员可以移除群组成员,调用''removeSingleGroupMember''移除群组成员,示例如下:
// 移除群组成员
let option = {
groupId: 'groupId',
username: 'username' // 群组成员名称
};
conn.removeSingleGroupMember(option).then((res) => {
console.log(res)
})
----
==== 解散群组 ====
* 只有群组的管理员有权限将成员踢出群组;
* 群组解散后,所有群成员均退出该群。
调用''dissolveGroup''解散群组,示例如下:
// 解散一个群组
let option = {
groupId: 'groupId'
};
conn.dissolveGroup(option).then((res) => {
console.log(res)
})
**注意:**
* 在获取群组时候就可以获取群管理员的ID,从而前端可决定是否显示解散按钮。
----
==== 退出群组 ====
群成员可以主动退出群组,调用''quitGroup''退出群组,示例如下:
// 成员主动退出群
let option = {
groupId: 'groupId'
};
conn.quitGroup(option).then((res) => {
console.log(res)
})
----
===== 群公告管理 =====
群公告管理包含以下处理操作:
* 上传/修改群公告
* 获取群公告
所有处理操作的示例下面会一一说明。
==== 上传/修改群公告 ====
调用updateGroupAnnouncement函数上传/修改群公告,示例如下:
let options = {
groupId: 'groupId', // 群组id
announcement: 'announcement' // 公告内容
};
conn.updateGroupAnnouncement(options).then((res) => {
console.log(res)
})
----
==== 获取群公告 ====
调用fetchGroupAnnouncement函数获取群公告,示例如下:
let options = {
groupId: 'groupId' // 群组id
};
conn.fetchGroupAnnouncement(options).then((res) => {
console.log(res)
})
----
===== 群文件管理 =====
群文件管理包含以下处理操作:
* 上传群文件
* 下载群文件
* 删除群文件
* 获取群文件列表
所有处理操作的示例下面会一一说明。
==== 上传群文件 ====
调用uploadGroupSharedFile函数上传群文件,示例如下:
let options = {
groupId: 'groupId', // 群组id
file: file, // 获取的file文件对象
onFileUploadProgress: function(resp) {}, // 上传进度的回调
onFileUploadComplete: function(resp) {}, // 上传完成时的回调
onFileUploadError: function(e) {}, // 上传失败的回调
onFileUploadCanceled: function(e) {} // 上传取消的回调
};
conn.uploadGroupSharedFile(options);
----
==== 下载群文件 ====
调用downloadGroupSharedFile函数下载群文件,示例如下:
let options = {
groupId: 'groupId', // 群组id
fileId: 'fileId', // 文件id
onFileDownloadComplete: function(resp) {}, // 下载成功的回调
onFileDownloadError: function(e) {}, // 下载失败的回调
};
conn.downloadGroupSharedFile(options);
----
==== 删除群文件 ====
调用deleteGroupSharedFile函数删除群文件,示例如下:
let options = {
groupId: 'groupId', // 群组id
fileId: 'fileId' // 文件id
};
conn.deleteGroupSharedFile(options).then((res) => {
console.log(res)
})
----
==== 获取群文件列表 ====
调用fetchGroupSharedFileList函数获取群文件列表,示例如下:
let options = {
groupId: 'groupId' // 群组id
};
conn.fetchGroupSharedFileList(options).then((res) => {
console.log(res)
})
----
===== 群成员管理 =====
群成员管理包含以下处理操作:
* 查询群组成员
* 将成员设为管理员
* 将管理员撤销
* 获取群组下所有管理员
所有处理操作的示例下面会一一说明。
==== 查询群组成员 ====
调用''listGroupMember''函数分页获取当前群组的所有成员,示例如下:
let pageNum = 1,
pageSize = 1000;
let options = {
pageNum: pageNum, // 页码
pageSize: pageSize, // 预期每页获取的记录数
groupId: 'groupId'
};
conn.listGroupMember(options).then((res) => {
console.log(res)
})
----
==== 将成员设为管理员 ====
调用''setAdmin''将成员设为管理员,示例如下:
let options = {
groupId: "groupId", // 群组id
username: "user" // 用户名
};
conn.setAdmin(options).then((res) => {
console.log(res)
})
----
==== 将管理员撤销 ====
调用''removeAdmin''将管理员撤销,示例如下:
let options = {
groupId: "groupId", // 群组id
username: "user" // 用户名
};
conn.removeAdmin(options).then((res) => {
console.log(res)
})
----
==== 获取群组所有管理员 ====
调用''getGroupAdmin''获取群组下所有管理员,示例如下:
let options = {
groupId: "groupId" // 群组id
};
conn.getGroupAdmin(options).then((res) => {
console.log(res)
})
----
===== 加群处理 =====
加群包含以下处理操作:
* 将好友加入群组
* 向群组发出入群申请
* 同意用户加入群
* 拒绝用户加入群
所有处理操作的示例下面会一一说明。
==== 将好友加入群组 ====
管理员可以将好友加入群组。调用''inviteToGroup''将好友加入群组,示例如下:
let option = {
users: ['user1', 'user2'],
groupId: 'groupId'
};
conn.inviteToGroup(option).then((res) => {
console.log(res)
})
----
==== 向群组发出入群申请 ====
调用''joinGroup''向群组发出入群申请,示例如下:
let options = {
groupId: "groupId", // 群组ID
message: "I am Tom" // 请求信息
};
conn.joinGroup(options).then((res) => {
console.log(res)
})
----
==== 同意用户加入群 ====
只有管理员才有权限同意用户加入群组的请求。
调用''agreeJoinGroup''同意用户加群请求,示例如下:
let options = {
applicant: 'userId', // 申请加群的用户名
groupId: 'groupId' // 群组ID
};
conn.agreeJoinGroup(options).then((res) => {
console.log(res)
})
----
==== 拒绝用户加入群 ====
只有管理员才有权限拒绝用户加入群组的请求。
调用''rejectJoinGroup''拒绝用户加群请求,示例如下:
let options = {
applicant: 'user', // 申请加群的用户名
groupId: 'groupId' // 群组ID
};
conn.rejectJoinGroup(options).then((res) => {
console.log(res)
})
----
===== 禁言管理 =====
禁言管理包含以下处理操作:
* 将成员禁言
* 将成员解除禁言
* 获取群组下禁言成员
所有处理操作的示例下面会一一说明。
==== 将成员禁言 ====
调用''mute''将成员禁言,示例如下:
let options = {
username: "user", // 成员用户名
muteDuration: 886400000, // 禁言的时长,单位是毫秒
groupId: "groupId"
};
conn.mute(options).then((res) => {
console.log(res)
})
----
==== 将成员解除禁言 ====
调用''removeMute''将成员解除禁言,示例如下:
let options = {
groupId: "groupId", // 群组ID
username: "user" // 成员用户名
};
conn.removeMute(options).then((res) => {
console.log(res)
})
----
==== 获取群组下禁言成员 ====
调用''getMuted''获取群组下所有被禁言的成员,示例如下:
let options = {
groupId: "groupId" // 群组ID
};
conn.getMuted(options).then((res) => {
console.log(res)
})
----
==== 开启和关闭全员禁言 ====
owner和管理员可以开启和关闭全员禁言。
//群组中禁言所有成员
let options = {
groupId: "groupId", //群组id
};
conn.disableSendGroupMsg(options).then((res) => {
console.log(res)
})
//群组中解除所有成员禁言
conn.enableSendGroupMsg(options).then((res) => {
console.log(res)
})
----
==== 白名单管理 ====
可以将用户添加到白名单中,用户白名单在管理员开启了全员禁言时生效,可以运行白名单用户发出消息。 另外可以将用户移出白名单,检查自己是否在白名单中以及获取白名单列表。
//添加用户到白名单
let options = {
groupId: "groupId", // 群组id
users: ["user1", "user2"] // 成员id列表
};
conn.addUsersToGroupWhitelist(options);
//将用户从白名单移除
let options = {
groupId: "groupId", // 群组id
userName: "user" // 要移除的成员
}
conn.rmUsersFromGroupWhitelist(options);
//从服务器获取白名单成员列表
let options = {
groupId: "groupId" // 群组id
}
conn.getGroupWhitelist(options);
//查询群成员是否是白名单用户,操作权限:app admin可查询所有用户;app user可查询自己
let options = {
groupId: "groupId", // 群组id
userName: "user" // 要查询的成员
}
conn.isGroupWhiteUser(options);
----
===== 黑名单管理 =====
黑名单管理包含以下处理操作:
* 将成员加入群黑名单(单个)
* 将成员加入群黑名单(批量)
* 将成员移除群组黑名单(单个)
* 将成员移除群组黑名单(批量)
* 获取群组黑名单
所有处理操作的示例下面会一一说明。
==== 将成员加入群黑名单(单个) ====
调用''groupBlockSingle''将单个成员加入群组黑名单,示例如下:
let options = {
groupId: 'groupId', // 群组ID
username: 'username' // 将要被加入黑名单的用户名
};
conn.groupBlockSingle(options).then((res) => {
console.log(res)
})
----
==== 将成员加入群黑名单(批量) ====
调用''groupBlockMulti''将成员批量加入群组黑名单,示例如下:
let options = {
groupId: 'groupId', // 群组ID
usernames: ['user1', 'user2', ...users] // 将要被加入黑名单的用户名数组
};
conn.groupBlockMulti(options).then((res) => {
console.log(res)
})
----
==== 将成员移除群组黑名单(单个) ====
调用''removeGroupBlockSingle''将单个成员从群组黑名单中移除,示例如下:
let options = {
groupId: "groupId", // 群组ID
username: "user" // 需要移除的用户名
}
conn.removeGroupBlockSingle(options).then((res) => {
console.log(res)
})
----
==== 将成员移除群组黑名单(批量) ====
调用''removeGroupBlockMulti''将成员批量从群组黑名单中移除,示例如下:
let options = {
groupId: "groupId", // 群组ID
username: ["user1", "user2"] // 需要移除的用户名数组
}
conn.removeGroupBlockMulti(options).then((res) => {
console.log(res)
})
----
==== 获取群组黑名单 ====
调用''getGroupBlacklistNew''获取群组黑名单,示例如下:
// 获取群组黑名单
let option = {
groupId: 'groupId',
};
conn.getGroupBlacklistNew(option).then((res) => {
console.log(res)
})
----
===== 群组事件监听 =====
可以在注册的监听事件onPresence里监听群组相关的事件:
conn.listen({
onPresence: function(msg){
switch(msg.type){
case 'rmGroupMute':
// 解除群组一键禁言
break;
case 'muteGroup':
// 群组一键禁言
break;
case 'rmUserFromGroupWhiteList':
// 删除群白名单成员
break;
case 'addUserToGroupWhiteList':
// 增加群白名单成员
break;
case 'deleteFile':
// 删除群文件
break;
case 'uploadFile':
// 上传群文件
break;
case 'deleteAnnouncement':
// 删除群公告
break;
case 'updateAnnouncement':
// 更新群公告
break;
case 'removeMute':
// 解除禁言
break;
case 'addMute':
// 禁言
break;
case 'removeAdmin':
// 移除管理员
break;
case 'addAdmin':
// 添加管理员
break;
case 'changeOwner':
// 转让群组
break;
case 'direct_joined':
// 直接被拉进群
break;
case 'leaveGroup':
// 退出群
break;
case 'memberJoinPublicGroupSuccess':
// 加入公开群成功
break;
case 'removedFromGroup':
// 从群组移除
break;
case 'invite_decline':
// 拒绝加群邀请
break;
case 'invite_accept':
// 接收加群邀请(群含权限情况)
break;
case 'invite':
// 接收加群邀请
break;
case 'joinPublicGroupDeclined':
// 拒绝入群申请
break;
case 'joinPublicGroupSuccess':
// 同意入群申请
break;
case 'joinGroupNotifications':
// 申请入群
break;
case 'leave':
// 退出群
break;
case 'join':
// 加入群
break;
case 'deleteGroupChat':
// 解散群
break;
default:
break;
}}
})
----
===== 群消息 =====
群消息包含以下处理操作:
* 发送消息
* 接收及处理消息
所有处理操作下面会一一说明。
==== 发送消息 ====
见[[im:web:basics:message#发送消息|发送消息]]。
==== 接收及处理消息 ====
* 群聊接收及处理消息同单聊;
* 消息体与单聊消息根据 message 的 type 进行区分;
* 单聊为:chat,群聊为:groupchat,聊天室为:chatroom;
* 根据消息的类型进行不同处理即可。
----
上一页:[[im:web:basics:buddy|好友管理]]
下一页:[[im:web:basics:chatroom|聊天室管理]]