
# 场景6： 创建会议
#### 描述
创建会议功能会是指创建一个即时会议并立即加入会议，可以通过传参指定创建音频会议还是视频会议，可以指定会议是否需要密码。
#### 业务流程
1. **准备创建会议参数**
   
   准备创建会议参数，类型为CreateConfParam，定义详见CreateConfParam的接口定义，共需要以下几个参数：会议主题、会议类型、是否需要密码、成员列表（携带与会者时传入）、是否打开摄像头（默认关闭）、是否打开麦克风（默认关闭）、云会议室id（使用时传入）、设置允许入会范围（必填：0-所有人，2-企业内，3-会议邀请人员）。
   ```
   //创建会议对象
   CreateConfParam createConfParam = new CreateConfParam()                             
         .setSubject(getSubject())     //会议名称                       
         .setConfType(ConfType.CONF_AUDIO)        //会议类型，详情请见表2 CreateConfParam参数说明 
         .setVmrId(getVmrId())         // 云会议室id（非必传字段）
         .setJoinConfRestrictionType(JoinConfPermissionType.PERMIT_EVERYONE)   // 设置允许入会范围限制
         .setCameraOn(true)           //摄像头是否开启
         .setMicOn(true)              //麦克风是否开启
         .setRecordOn(true)    //会议录制功能是否开启
         .setNeedPassword(true);    //会议是否需要密码
   ```
   
   
2. **是否携带与会者（可选）**
   
   如果需要携带与会者创建会议，给步骤1生成的创建会议参数中members赋值一个携带与会者的数组，如果不需要携带与会者可以不传入。
   ```
   List<AttendeeModel> attendeeList = new ArrayList<>();
               //以下三种方式可选
               String name = getName();
       String number = getNumber();
       String thirdAccount = getThirdAccount();
               if (!TextUtils.isEmpty(thirdAccount)) {
                   if (LoginStatusCache.getsLoginAccountInfo() instanceof AppIdAuthInfo) {
                       //如果是appid的方式登录
                       attendeeList.add(AttendeeModel.buildAttendeeByThirdUserId(thirdAccount,name));
                   }
               } else if(number.startsWith("+99")){
                   //sip 号码入会
                   attendeeList.add(AttendeeModel.buildAttendeeBySipNumber(number, name));
               } else {
                   //电话号码入会（手机和座机）
                   attendeeList.add(AttendeeModel.buildAttendeeByPhone(number, name));
               }
   //创建会议对象
   CreateConfParam createConfParam = new CreateConfParam()                             
         .setSubject(getSubject())     //会议名称                   
         .setConfType(ConfType.CONF_AUDIO)        //会议类型，详情请见表2 CreateConfParam参数说明
         .setVmrId(getVmrId())         // 云会议室id（非必传字段）
         .setJoinConfRestrictionType(JoinConfPermissionType.PERMIT_EVERYONE)   // 设置允许入会范围限制
         .setCameraOn(true)           //摄像头是否开启
         .setMicOn(true)              //麦克风是否开启
         .setRecordOn(true)    //会议录制功能是否开启
         .setNeedPassword(true)    //会议是否需要密码
         .setAttendeeMembers(attendeeInfos);    //添加与会人信息
   ```
   
   
   
3. **调用接口**
   
   使用步骤1和步骤2生成的创建会议参数，并根据返回的回调对执行的结果进行判断和处理，返回回调中onSuccess表示成功，onFailed表示失败，onCancel表示没有网络等取消创建，ErrorMessageFactory.create可以将场景错误码转成国际化的提示。
   
   
 
#### **示例代码**
```
//开始创建会议
HWMSdk.getOpenApi(getActivity()).createConf(createConfParam, new HwmCancelableCallBack <ConfInfo>() {              
     @Override              
     public void onSuccess(ConfInfo confInfo) {                    
           //创建成功  confInfo 会议详情
           //会议id：confInfo.getConfId();
           //会议密码：confInfo.getConfPwd();
     }               
     @Override              
     public void onFailed(int retCode, String desc) {           
           //创建失败
           String err = ErrorMessageFactory.create(Utils.getApp(), retCode);
           if (TextUtils.isEmpty(err)) {                       
                 err = Utils.getApp().getString(com.huawei.hwmmobileconfui.R.string.conf_create_error);                   
           }                  
           Log.i(TAG,  "创建会议失败: " + err);
     }         
     @Override
     public void onCancel() {
          Log.i(TAG,  "取消创建会议");.
     }
});
```
#### 注意事项
创建会议的前提是已完成初始化和登录。
