群组功能

功能概述

容联云通讯SDK 提供了群组和讨论组两种形式的群聊功能。群组拥有更多的权限操作,两种群聊形式在共有操作上保持了接口一致。
讨论组类似当前IM聊天应用内的快速多人会话,没有群组的权限操作,适用于快速创建多人会话的场景。每个讨论组只有一个管理员。管理员可以对讨论组进行增减员操作,普通成员也能对群进行增员操作。在添加新成员的时候,并不需要经过对方同意。
群组的功能更加完整和丰富,在权限上也拥有更多的限制(权限分为群主管理员、以及群成员)。可以设定被邀请模式(是否需要对方同意)群组可以拥有讨论组的全部功能,推荐使用群组进行开发。
 注意事项:
 1、创建的群组的时候注意传入的scope参数,基础版默认可传TEMP,专业版可传NORMAL,若需更大人数群组,请联系专有云商务或在控制台吗管理页面进行拓展。 
 2、群组中有三种成员角色,分别是群主、管理员(默认10个,群人数超过10人),普通成员。
 3、群主可以修改,群组信息,群名片,邀请人加入,踢人,解散群组,设置管理员,转让群主,设置群内禁言等。
 4、管理员可以修改群组公告,群名片,邀请人加入,设置群内禁言。
群组和讨论组的详细功能差异对比如下:
功能讨论组群组
群容量IM 专业版 300人/群,最大可扩展至 500 人/群(增值功能)IM 专业版 300人/群,最大可扩展至 2000 人/群(增值功能)                                                                             
创建创建时指定群组类型创建时指定群组类型
群资料属性                                                  讨论组名,讨论组类型,讨论组公告,讨论组扩展字段,讨论组资料修改,讨论组扩展字段修改群名,群公告,群扩展字段,
申请加入群组的验证模式,群邀请模式, 群资料修改,群资料扩展字段修改模式
邀请入群创建时邀请群主和管理员可以邀请
被邀请人同意模式                                                              不需要被邀请人同意支持配置: 需要被邀请人同意 不需要被邀请人同意
申请入群不支持支持
群成员类型群主、普通成员群主、管理员、普通成员
管理员设置不支持设置管理员群主可以增减管理员
群组资料修改权限群主可以修改群主,管理员可以设置
修改群成员昵称管理修改任何人群昵称,普通群成员只能修改自己的昵称群主、管理员可以修改所有人的群昵称。
普通成员只能修改普通群成员的群昵称。
修改自己的群昵称支持支持
消息类型支持文本,图片,附件,语音等文本,图片,附件,语音等
踢人不支持群主和管理员可以踢人,且管理员不能踢群主和其他管理员
主动退群普通群所有人都可以退群;
若群主退群,该群第一个加入的人是群主
除群主外,其他用户均可以主动退群。
群主需先将群转让给其他群成员才可以进行退群操作
禁言不支持管理员对普通成员禁言、解除禁言
转让群不支持群主可以将群的拥有者权限转给群内的其他成员,转移后,
被转让者变为新的群主,原群主变为普通成员。
群主还可以选择在转让的同时,直接退出该群。
解散群不支持群主可以解散群

群组消息

群组聊天和单人聊天是相同的,请参考消息收发文档。

群组管理

创建群组

创建群包含创建群组和创建讨论组两种形式。二者的接口接口相同,传入不同的类型参数即可(Target)。
API介绍:
方法名:RL_YTX. createGroup(CreateGroupBuilder, callback, onError) 查看API
对象:CreateGroupBuilder           
代码示例
我们假设Tony要创建一个名为"出彩中国人"(参考Demo中IM. EV_createGroup)
  • //新建创建群组对象
  • var obj = new RL_YTX.CreateGroupBuilder();
  • //设置群组名称
  • obj.setGroupName(“出彩中国人”);
  • //设置群组公告
  • obj. setDeclared(“欢迎体验云通讯群组功能”);
  • //设置群组类型,如:1临时群组(100人)
  • obj. setScope(1);
  • //设置群组验证权限,如:需要身份验证2
  • obj. setPermission(2);
  • //设置为讨论组,该字段默认为2,表示群组,创建讨论组时设置为1
  • obj.setTarget(1);
  • RL_YTX.createGroup(obj, function(obj){
  • //获取新建群组id
  • var groupId = obj.data;
  • //更新页面
  • }, function(obj){
  • //创建群组失败
  • });                                       

主动加入群组 

只要知道群组id,就可以主动加入群组,讨论组不可以主动加入。             
关于几种群组的解释:
公开群组:用户可以直接被允许加入群组,不需要群主或管理员进行验证;
验证群组:用户加入群组的时候需要群主或管理员同意才可以加入;
私有群组:只能群主或管理员邀请加入。       
API介绍
方法名:RL_YTX. joinGroup(JoinGroupBuilder, callback, onError)查看API
对象:JoinGroupBuilder
代码示例
我们假设"出彩中国人"群组已经有Tony和John两位成员,现在Smith要加入"出彩中国人"群组。
  • //新建加入群组对象
  • var builder= new RL_YTX.JoinGroupBuilder();
  • //设置申请群组id
  • builder.setGroupId(“出彩中国人群组id”);
  • //设置申请理由
  • builder.setDeclared(“申请理由”);
  • //发送请求
  • RL_YTX.joinGroup(builder, function(){
  • //操作成功
  • },function(obj){
  • //操作失败 
  • });    

申请加入群组请求通知          

注意:                
如果群组"出彩中国人"是公开群组,则smith直接被允许加入。如果群组"出彩中国人"是私有群组,则smith加入需要群主Tony的的同意。
接收他人加入操作时,需要设置回调监听,参考文档:
代码示例
Tony首先收到Smith加入的请求(参考DEMO中IM. EV_noticeReceiveListener)             
  • //获取群组id
  • var groupId = obj.groupId;
  • //获取群组名称
  • var groupName = obj.groupName;
  • //获取申请者id 
  • var peopleId = obj.member;
  • //获取申请者名称
  • var people = (!!obj.memberName)?obj.memberName:obj.member;
  • //1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片
  • var auditType = obj.auditType;
  • if(1 == auditType){
  • //处理申请加入通知
  • }

同意加入群组

群主或者管理员,可以进行同意他人进群的操作。
API介绍
方法名:RL_YTX. confirmJoinGroup(ConfirmJoinGroupBuilder, callback, onError)查看API
对象:ConfirmJoinGroupBuilder
代码示例
Tony同意Smith加入的请求(参考IM. EV_confirmJoinGroup)
  • //新建同意加入请求对象
  • var builder = new RL_YTX.ConfirmJoinGroupBuilder();
  • //设置群组id
  • builder.setGroupId(“出彩中国人群组id”);
  • //设置申请者账号
  • builder.setMemberId(“Smith账号”);
  • //设置同意或拒绝 1拒绝 2同意
  • builder.setConfirm(2);
  • //发送请求
  • RL_YTX.confirmJoinGroup(builder, function(){
  •     //处理成功
  •     }, function(obj){
  •     //处理失败
  •     });

成员加入通知

Smith加入成功后,群组中成员John收到的通知回调。(参考DEMO中IM. EV_noticeReceiveListener)
设置回调方法,参考文档:
  • //获取群组id
  • var groupId = obj.groupId;
  • //获取群组名称
  • var groupName = obj.groupName;
  • //获取加入者id
  • var peopleId = obj.member;
  • //获取加入者名称
  • var people = (!!obj.memberName)?obj.memberName:obj.member;
  • //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
  • var auditType = obj.auditType;
  • if(7 == auditType){
  •     //处理某人加入群组通知
  •     }

邀请加入群组 

群组里只能由群主或管理员邀请别人加入,讨论组里任意用户都可以邀请别人加入,且讨论组邀请时无需对方同意。
API介绍
方法名:RL_YTX. inviteJoinGroup(InviteJoinGroupBuilder, callback, onError)查看API
对象:InviteJoinGroupBuilder
代码示例
我们假设"出彩中国人"群组的创建者Tony邀请Smith加入群组(参考Demo中IM.  EV_inviteGroupMember)
  • //新建邀请加入请求对象
  • var builder = new RL_YTX.InviteJoinGroupBuilder();
  • //设置群组id
  • builder. setGroupId(“出彩中国人群组id”);
  • //设置邀请成员账号
  • builder. setMembers([“Smith的账号”]);
  • //是否需要对方确认(1不需要直接加入,2需要)
  • var confirm = 2;
  • builder.setConfirm(confirm);
  • //发送邀请
  • RL_YTX.inviteJoinGroup(builder,function(){
  • //邀请成功
  • if(confirm == 1){
  • //更新页面群组成员列表
  • },function(obj){
  • //邀请成员失败
  • })                  

用户验证管理员邀请加入群组            

注意:                
如果Tony邀请Smith加入的时候,接口参数指定不加入需要Smith确认,则Smith直接被邀请加入。如果指定需要Smith同意才能加入,则Smith收到如下通知回调,并在回调里面回复"同意"或"拒绝"加入。设置回调的方法,参考文档:
(参考DEMO中IM.   EV_noticeReceiveListener)
  • //获取群组id
  • var groupId = obj.groupId;
  • //获取群组名称
  • var groupName = obj.groupName;
  • //获取邀请者id
  • var peopleId = obj.member;
  • //获取邀请者名称
  • var people = (!!obj.memberName)?obj.memberName:obj.member;
  • //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
  • var auditType = obj.auditType;
  • if(2 == auditType){
  •     if(1 == obj.confirm){
  •         //直接加入群组,更新成员列表
  •     }else{
  •         //处理邀请加入群组请求通知
  •          var builder = new RL_YTX.ConfirmInviteJoinGroupBuilder();
  •             //设置邀请者id
  •             builder.setInvitor("邀请者id");
  •             //设置群组id
  •             builder.setGroupId(gruopId);
  •             //1 拒绝,2 同意
  •             builder.setConfirm(2);
  •             RL_YTX.confirmInviteJoinGroup(builder, function(e) {
  •              //处理成功
  •             }, function(obj){
  •             //处理失败
  •             });

邀请加入群组通知

Smith同意或拒绝加入群组,邀请者会收到的通知回调方法,设置回调参考文档:
(参考DEMO中IM. EV_noticeReceiveListener)                          
  • //获取群组id
  • var groupId = obj.groupId;
  • //获取群组名称
  • var groupName = obj.groupName;
  • //获取加入成员id
  • var peopleId = obj.member;
  • //获取加入成员名称
  • var people = (!!obj.memberName)?obj.memberName:obj.member;
  • //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
  • var auditType = obj.auditType;
  • if(8 == auditType){
  • if(2 != obj.confirm){
  •     //拒绝管理员邀请,通知页面
  •     }else{
  •     //同意管理员邀请,通知页面
  •     } 
  •   }                 

退出群组

API介绍
方法名:RL_YTX. quitGroup(QuitGroupBuilder, callback, onError)查看API
对象:QuitGroupBuilder
代码示例
我们假设Smith要退出群组。(参考DEMO中IM. EV_quitGroup)        
  • //新建退出群组请求对象
  • var builder = new RL_YTX.QuitGroupBuilder();
  • //设置群组id
  • builder.setGroupId(“出彩中国人群组id”);
  • //发送请求
  • RL_YTX.quitGroup(builder, function(){
  •         //退出群组成功
  •         //更新页面
  •         }, function(obj){
  •         //退出群组失败
  •         });
                

退出群组通知

Smith退出成功后,群组中成员Tony和John收到的通知回调方法,设置回调参考方法:
 (参考Demo中的IM. EV_noticeReceiveListener) 
  • //获取群组id
  • var groupId = obj.groupId;
  • //获取群组名称
  • var groupName = obj.groupName;
  • //获取退出者id
  • var peopleId = obj.member;
  • //获取退出者名称
  • var people = (!!obj.memberName)?obj.memberName:obj.member;
  • //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
  • var auditType = obj.auditType;
  • if(5 == auditType){
  •     //有用户退出群组,更新列表
  •     }

群主踢人

只有群主可以进行踢人操作。
API介绍
方法名:RL_YTX. deleteGroupMember(DeleteGroupMemberBuilder, callback, onError)查看API
对象:DeleteGroupMemberBuilder
代码示例
我们假设群主Tony要把Smith要踢出群组”出彩中国人”(参考DEMO中IM. EV_deleteGroupMember)。
  • //构建踢出用户请求对象
  • var builder = new RL_YTX.DeleteGroupMemberBuilder(groupId,memberId);
  • builder.setGroupId(“出彩中国人群组id”);
  • builder.setMemberId(“Smith账号”);
  • RL_YTX.deleteGroupMember(builder, function(){
  • //踢出成功
  • },function(obj){
  • //踢出失败
  • });                

移除成员通知

群组中所有成员除管理员外都会收到的Smith被踢的消息,包括Smith自己,Smith判断被踢用户的id等于自己,则从本地删除群组。设置回调,参考文档:
 (参考Demo中的IM. EV_noticeReceiveListener) :
  • //获取群组id
  • var groupId = obj.groupId;
  • //获取群组名称
  • var groupName = obj.groupName;
  • //获取被踢出者id
  • var peopleId = obj.member;
  • //被踢出者名称
  • var people = (!!obj.memberName)?obj.memberName:obj.member;
  • //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
  • var auditType = obj.auditType;
  • if(6 == auditType){
  •         if(“Smith账号”.equals(“peopleId”)){
  •         //是自己,更新群组列表
  •         }else{
  •         //更新群组成员列表
  •         }}

解散群组

只有群主才能解散群组,讨论组不能被解散。
API介绍
方法名:RL_YTX. dismissGroup(DismissGroupBuilder, callback, onError)查看API
对象:DismissGroupBuilder
代码示例
我们假设群主Tony要解散"出彩中国人"
  • //构建解散群组消息对象
  • var obj = new RL_YTX.DismissGroupBuilder();
  • //设置群组id
  • obj.setGroupId(“出彩中国人群组id”);
  • RL_YTX.dismissGroup(obj, function(){
  •         //解散成功,更新页面
  •         }, function(obj){
  •         //解散失败
  •         });

解散群组通知

群组中所有成员收到的通知回调。设置回调,参考文档:
(参考Demo中的IM. EV_noticeReceiveListener) 
  • //获取群组id
  • var groupId = obj.groupId;
  • //获取群组名称
  • var groupName = obj.groupName;
  • //获取操作者id
  • var peopleId = obj.member;
  • //获取操作者名称
  • var people = (!!obj.memberName)?obj.memberName:obj.member;
  • //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
  • var auditType = obj.auditType;
  • if(4 == auditType){
  • //更新页面
  • }

获取群组成员

API介绍
方法名:RL_YTX. getGroupMemberList(GetGroupMemberListBuilder, callback, onError)查看API
对象:GetGroupMemberListBuilder
代码示例
(参考Demo中的IM. EV_getGroupMemberList)
  • //新建获取群组成员列表请求对象
  • var obj = new RL_YTX.GetGroupMemberListBuilder();
  • //设置群组id
  • obj.setGroupId(“出彩中国人群组id”);
  • //该接口为分页接口,如果要获取全部数据,设置pageSize为-1
  • obj.setPageSize(-1);
  • //发送请求
  • RL_YTX.getGroupMemberList(obj, function(obj){
  • //成功获取数据,更新页面
  • }, function(obj){
  • //获取数据失败
  • });               

群组搜索

可以根据群组名字或者群组ID来搜索群组,讨论组不可被搜索。
API介绍
方法名:RL_YTX. searchGroups(SearchGroupsBuilder, callback, onError)查看API
对象:SearchGroupsBuilder
代码示例
  • //新建群组搜索请求对象
  • var builder = new RL_YTX.SearchGroupsBuilder(type,key);
  • //搜索类型 1 群组id精确查找 2 群组名称模糊搜索
  • builder.setType(1);
  • builder.setKeywords(“出彩中国人群组id”);
  • RL_YTX.searchGroups(builder, function(obj){
  •        //检索成功
  •         },function(obj){
  •        //检索失败
  •         });                

群组免打扰

群组免打扰功能是指群组收到消息的时候,是否震动手机或振铃(震动或振铃是在应用层处理,通过sdk可以设置此状态并保存在服务端,切换手机时,群组的状态也可同步)。
API介绍
方法名:RL_YTX. setGroupMessageRule(SetGroupMessageRuleBuilder, callback, onError)查看API
对象:SetGroupMessageRuleBuilder
代码示例
(参考DEMO中IM.EV_setGroupNotice)
  • //新建设置群组个性化设置对象
  • var builder = new RL_YTX.SetGroupMessageRuleBuilder();
  • //设置群组id
  • builder.setGroupId(“出彩中国人群组id”);
  • //设置免打扰 1提醒 2免打扰
  • builder.setIsNotice(2);
  • RL_YTX.setGroupMessageRule(builder,function(){
  • //设置免打扰成功
  • },function(obj){
  • //设置免打扰失败
  • });

获取个人所在的群组 

用户登录后,通常首先调取此接口获取自己所在群组,此接口会返回群组的id、名称、免打扰状态等信息。
API介绍
方法名:RL_YTX. getGroupList(GetGroupListBuilder, callback, onError)查看API
对象:GetGroupListBuilder
代码示例
(参考Demo中的IM. EV_getGroupList) 
  • //新建获取群组列表请求对象
  • var obj = new RL_YTX.GetGroupListBuilder();
  • //设置获取群组数量,该接口为分页接口,如果要获取全部数据,设置pageSize为-1
  • obj.setPageSize(-1);
  • obj.setTarget(2); //获取群组列表。默认为群组列表,如果要获取讨论组列表,该值传1。
  • RL_YTX.getGroupList(obj, function(obj){
  • //更新页面
  •   }, function(obj){
  •     //获取群组列表失败
  •   });                             

群主转让功能

API介绍
方法名:RL_YTX.setGroupMemberRole(SetGroupMemberRoleBuilder, callback, onError)查看API
对象:SetGroupMemberRoleBuilder
代码示例
  • /*
  •  *  转让群组 
  •  * @groupId  群组ID
  •  * @member   转让给的成员
  •  * @role     角色     1转让群主  2 设为管理员   3  取消管理员资格  
  •  * */
  •         var roleBuilder = new RL_YTX.SetGroupMemberRoleBuilder();
  •         roleBuilder.setGroupId(groupId);
  •         roleBuilder.setMemberId(member);
  •         roleBuilder.setRole(role);
  •         RL_YTX.setGroupMemberRole(roleBuilder, function() {
  •                 var trobj = $('#pop').find('tr[contact_you="' + member + '"]');
  •                 var tdobj = trobj.children();
  •                 var spanobj = tdobj.children();
  •                 var deleobj = spanobj[3];
  •                 $(deleobj).remove();
  •                 console.log("修改成员角色成功");
  •                 if (role == 1) {
  •                         IM.HTML_pop_hide();
  •                 } else if (role == 2) {
  •                         $(spanobj).eq(0).children("span").text("[管理员]");
  •                         $(spanobj).eq(2).after(' 取消管理员资格 ');
  •                 } else {
  •                         $(spanobj).eq(0).children("span").text("[成员]");
  •                         $(spanobj).eq(2).after(' 设置为管理员 ');
  •                 }
  •         }, function(obj) {
  •                 alert("错误码: " + obj.code + "; 错误描述:" + obj.msg); 
  •                      });