排队

功能简介: 在呼叫中心的业务场景下,有多个客户呼叫进来,有多个坐席提供服务,简单的一对一呼叫无法满足业务需求。此时可以使用我们的排队功能,客户不再直接呼叫某个坐席,而是呼叫到一个坐席队列,由系统自动给客户分配一个空闲的坐席。

  • 当坐席提供的是通用型服务时,多个坐席可以服务于一个队列,客户呼叫这个队列,系统就会自动给客户分配一个空闲坐席。
  • 如果是业务高峰期没有空闲的坐席了,客户将在队列中等待,一旦有坐席空闲了就会自动被分配给最先开始等待的客户。
  • 坐席可以同时服务多个队列,队列有优先级,当坐席从忙变成空闲时,优先被分配给高优先级的队列里的客户。
  • 同一个队列内的坐席可以配置不同的坐席优先级,客户接入时如果同时存在多个空闲坐席,会把客户分配给优先级更高的坐席。

注意:在登录成功后才可以使用排队功能。


排队流程如下:

  1. 初始化队列,获取队列数据
  2. 坐席队列操作
  3. 坐席请求用户
  4. 系统自动给坐席分配用户
  5. 客户排队操作

1.初始化队列,获取队列数据

在登录成功后初始化队列数据

  • 调用接口
// 设置队列回调
CloudroomQueue.getInstance().registerCallback(mQueueCallback);
  • 回调通知
//可在登录成功后初始化队列数据
void onLoginSuccess() {
	// 初始化专家坐席用户队列
	CloudroomQueue.getInstance().initQueue("");
}

//队列初始化响应
void initQueueDatRslt(CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
	// TODO Auto-generated method stub
	ArrayList<QueueInfo> queueInfos = CloudroomQueue.getInstance().getAllQueueInfo();
}

相关API请参考:

相关结构定义请参考:

2.坐席队列操作

坐席角色开始和停止服务队列,以及操作后队列状态的变化

  • 调用接口:
//开始服务队列
CloudroomQueue.getInstance().startService(queID, "");
	
//停止服务队列
CloudroomQueue.getInstance().stopService(queID, "");
	
//获取服务的所有队列
ArrayList<Integer> queIDs = CloudroomQueue.getInstance().getServiceQueues();

  • 回调通知:
//开始队列服务结果
@Override
void startServiceRslt(int queID, CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
    // TODO Auto-generated method stub
}
	
//停止队列服务结果
@Override
void stopServiceRslt(int queID, CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
	// TODO Auto-generated method stub
}
	
//队列状态变化通知
@Override
void queueStatusChanged(QueueStatus queStatus) { 
	// TODO Auto-generated method stub
}

相关API请参考:

相关结构定义请参考:

3.坐席请求用户

在设置DND免打扰状下态,系统不再自动分配,需要手动申请用户

  • 调用接口:
// 设置队列回调
CloudroomQueue.getInstance().registerCallback(mQueueCallback);
	
//设置免打扰状态,关掉系统自动推送
CloudroomVideoMgr.getInstance().setDNDStatus(1, "");
	
//手动请求一个用户
CloudroomQueue.getInstance().reqAssignUser("");
	
//取消免打扰,开启系统自动推送
CloudroomVideoMgr.getInstance().setDNDStatus(0, "");
  • 回调通知:
//请求用户的结果
@Override
void reqAssignUserRslt(CRVIDEOSDK_ERR_DEF sdkErr, UserInfo usr, String cookie) {
	// TODO Auto-generated method stub
    if (sdkErr == CRVIDEOSDK_ERR_DEF.CRVIDEOSDK_NOERR){
        // 请求用户成功
    }else if(sdkErr == CRVIDEOSDK_ERR_DEF.CRVIDEOSDK_QUE_NOUSER){
        // 队列中没有排队人员
    }else{
        // 手动请求用户失败,代码:sdkErr
    }
}

相关API请参考:

4.系统自动给坐席分配用户

系统自动分配的用户在坐席还未选择接受或拒绝时,系统可以撤回分配

  • 调用接口:
// 设置队列回调
CloudroomQueue.getInstance().registerCallback(mQueueCallback);
  • 回调通知:
//系统自动分配用户通知
@Override
void autoAssignUser(UserInfo usr) {
    // TODO Auto-generated method stub
    //...
}

//接受或拒绝分配的用户操作响应
@Override
void responseAssignUserRslt(CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
    // TODO Auto-generated method stub
    //...
}

//系统撤回分配此用户通知
@Override
void cancelAssignUser(int queID, String usrID) {
    // TODO Auto-generated method stub
    //取消分配用户的弹框
}

相关API请参考:

5.客户排队操作

客户选择一个队列进行排队,每次只能排一个队列

  • 调用接口:
//开始排队
int queID = 1;
CloudroomQueue.getInstance().startQueuing(queID, "");

//停止排队
CloudroomQueue.getInstance().stopQueuing("");
  • 回调通知:
//开始排队结果
@Override
void startQueuingRslt(CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
    // TODO Auto-generated method stub
}

 //停止排队结果
@Override
void stopQueuingRslt(CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
    // TODO Auto-generated method stub
}

//队列状态变化通知
@Override
void queueStatusChanged(QueueStatus queStatus) {
     // TODO Auto-generated method stub
}

 //排队信息更新
@Override
void queuingInfoChanged(QueuingInfo queuingInfo) {
    // TODO Auto-generated method stub
}

相关API请参考:

相关结构定义请参考: