排队
功能介绍
在呼叫中心的业务场景下,有多个客户呼叫进来,有多个坐席提供服务,简单的一对一呼叫无法满足业务需求。此时可以使用我们的排队功能,客户不再直接呼叫某个坐席,而是呼叫到一个坐席队列,由系统自动给客户分配一个空闲的坐席。
- 多个坐席可以服务于一个队列,客户排队这个队列时,系统会自动分配一个空闲坐席来提供服务。
- 一个坐席可以同时服务多个队列,优先服务高优先级队列里的客户,队列优先级相同时优先服务最早排队的客户。
- 业务高峰期没有空闲的坐席时,客户将在队列中排队等待,当有坐席空闲时,将为最早排队的客户提供服务。
- 同一队列的坐席可以配置不同的坐席优先级,队列中的客户优先由空闲的高优先级的坐席来提供服务。
注意:
在登录成功后才可以使用排队功能。
1.创建队列
可以通过两种方式创建队列:
2.初始化队列
在登录成功后,初始化队列信息
- 调用接口:
crVideoSDKMain->getSDKQueue().initQueueDat("");
- 回调通知:
void initQueueDatRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
//成功后,可以获取队列信息
CRArray<CRQueInfo> queues = crVideoSDKMain->getSDKQueue().getAllQueueInfo();
}
相关API请参考:
3.获取队列信息
在初始化队列成功后,才可以使用获取队列信息。并且可以多次获取。
- 调用接口:
//获取队列信息
CRArray<CRQueInfo> queues = crVideoSDKMain->getSDKQueue().getAllQueueInfo();
4.1坐席:服务队列
- 调用接口:
//开始服务某个队列(可以多次调用,开启对多个队列的服务).
crVideoSDKMain->getSDKQueue().startService(queID);
//停止服务某个队列
crVideoSDKMain->getSDKQueue().stopService(queID);
//获取本坐席服务的所有队列
CRArray<int> ques = crVideoSDKMain->getSDKQueue().getServingQueues();
- 回调通知:
// 开始服务队列操作结果
void startServiceRslt(int queID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
//停止服务队列操作结果
void stopServiceRslt(int queID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
// 开始/停止服务队列,会触发队列状态变化通知
void notifyQueueStatusChanged(const CRQueStatus& queStatus)
{
}
相关API请参考:
4.2客户:排队
客户选择一个队列进行排队,每次只能排一个队列
- 调用接口:
// 客户开始排队
crVideoSDKMain->getSDKQueue().startQueuing(queID);
//客户停止排队
crVideoSDKMain->getSDKQueue().stopQueuing();
- 回调通知:
// 开始排队操作结果
void startQueuingRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
// 停止排队操作结果
void stopQueuingRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
//开始/停止排队,会触发队列状态变化通知
void notifyQueueStatusChanged(const CRQueStatus& queStatus)
{
}
//我的排队信息变化通知(比如,我的队列位置变化)
void notifyQueuingInfoChanged(const CRQueuingInfo& queuingInfo)
{
}
相关API请参考:
- startQueuing
- stopQueuing
- startQueuingRslt
- stopQueuingRslt
- notifyQueueStatusChanged
- notifyQueuingInfoChanged
5.系统给坐席分配客户
客户分配模式有自动和手动两种:
- 在自动分配模式下,坐席一旦空闲系统就会立即分配当前排队的客户过来,适用于坐席可以持续提供服务的业务场景。
- 在手动分配模式下,坐席空闲后系统不自动分配客户,而是坐席准备好后手动触发分配一个当前排队的客户,适用于坐席接待完客户后需要进行信息录入之类的善后工作,或者需要在接待新客户之前进行一些准备工作的业务场景。
自动分配模式:
- 回调通知:
// 系统自动安排客户
void notifyAutoAssignUser(const CRQueUserInfo& usrInfo)
{
}
//在长时间不响应系统分配时,或客户取消排队时, 系统取消已经安排的客户
void notifyAssignUserCanceled(int queID, const char* usrID)
{
}
//接受分配的客户的操作结果
void acceptAssignUserRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
//拒绝分配的客户的操作结果
void rejectAssignUserRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
- 调用接口:
// 接受系统分配的客户
crVideoSDKMain->getSDKQueue().acceptAssignUser(queID, userID);
// 拒绝系统分配的客户
crVideoSDKMain->getSDKQueue().rejectAssignUser(queID, userID);
相关API请参考:
- notifyAutoAssignUser
- notifyAssignUserCanceled
- acceptAssignUser
- rejectAssignUser
- acceptAssignUserRslt
- rejectAssignUserRslt
手动分配模式:
- 调用接口:
//开启免打扰状态
crVideoSDKMain->setDNDStatus(1):
//请求分配一个客户
crVideoSDKMain->getSDKQueue().reqAssignUser();
//请求分配一个指定客户
crVideoSDKMain->getSDKQueue().reqAssignUser(queID, userID);
- 回调通知:
//设置免打扰结果
void setDNDStatusRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
//请求分配客户操作结果
void reqAssignUserRslt(CRVSDK_ERR_DEF sdkErr, const CRQueUserInfo& usrInfo, const char* cookie)
{
if (sdkErr == CRVSDKERR_NOERR){
//请求分配客户成功,接下来做其它任务…… 例如:创建房间、呼叫对方进入指定房间
} else if(sdkErr == CRVSDKERR_QUE_NOUSER){
//队列中无排队人员
} else {
//请求分配客户失败
}
}
相关API请参考:
6.坐席呼叫客户
接受系统分配的客户后, 就可以向客户发起呼叫处理, 相关流程参见:呼叫功能
