哔哩哔哩技术 2024年11月19日
哔哩哔哩客服坐席调度系统的演进
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了哔哩哔哩客服坐席调度系统的演进历程,重点介绍了在线客服和工单客服的调度策略。面对日益增长的客户需求,尤其是在大型活动期间突发的高流量和复杂问题,哔哩哔哩客服系统引入了均衡分配、熟客优先、虚拟排队等多种调度策略,旨在提升服务效率和客户满意度。文章还详细分析了工单系统的调度机制,并展望了未来优化方向,包括流程优化、虚拟排队机制的改进以及调度策略的灵活性和智能化提升,以期更好地应对挑战,提升服务质量和用户体验。

🚀 **在线坐席调度:** 哔哩哔哩客服系统采用均衡分配作为基础策略,并通过策略模式支持熟客优先、上次服务优先等策略,以实现用户请求的合理分配。同时,引入Redis的Zset数据结构构建排队机制,并提供自动进线和会话邀请两种方式,方便用户获得人工服务。

🔄 **虚拟排队优化:** 为了应对大型活动期间的突发高流量,系统引入了虚拟排队机制,将排队名次靠后的用户引导至虚拟等候区,通过机器人试探用户是否在线,避免浪费客服人力,有效过滤无效会话。

📝 **工单坐席调度:** 工单系统采用定时任务触发分配流程,基于Redis-Zset实现待分配队列,并根据工单来源和客服状态设计优先级和公平性分配策略,确保工单及时、准确地分配给合适的客服。

🔄 **工单调度优化:** 为了解决工单分配不公平的问题,第二期引入了瞬时饱和度概念,限制每个客服同时处理的工单数量,使得工单分配更加公平,客服负荷更加平滑。

💡 **未来展望:** 哔哩哔哩客服坐席调度系统未来将持续优化,包括流程优化、虚拟排队机制改进、调度策略灵活性和智能化提升以及工单分配智能化等方面,以提升服务质量和用户体验。

原创 业务线 2024-11-19 12:03 上海

客服系统作为企业与客户沟通的重要桥梁,其中坐席调度作为客服系统的核心组成部分,发挥着重要的作用。本文我们就来介绍坐席在客服系统中的作用,以及如何通过科学的坐席分配和管理。

文章导读

本文详细探讨了哔哩哔哩客服坐席调度系统的演进,特别是在线客服和工单客服的调度策略。随着客户需求的增加,尤其是在大型活动期间,客服系统面临着突发的高流量和复杂的客户问题。为了提高服务效率和客户满意度,系统引入了多种调度策略,包括均衡分配、熟客优先和虚拟排队等。

同时也对工单系统的调度也做了详细的技术分析。

01背景


客服系统作为企业与客户沟通的重要桥梁,其中坐席调度作为客服系统的核心组成部分,发挥着重要的作用。本文我们就来介绍坐席在客服系统中的作用,以及如何通过科学的坐席分配和管理。

先说一些概念和遇到的问题,让大家有更直接的认知。


坐席是指什么


"坐席"一词,在客服体系的语境中,指那些致力于卓越客户服务的专业人员。他们不仅是企业与客户间沟通的桥梁,更是解决在线咨询疑惑、高效处理工单反馈的关键角色。在技术上,坐席也可以理解为同时在线的客服账户数量,或者正在接待访客的客服人员数量。

此外,借助先进的人工智能技术与自然语言处理能力,智能坐席也能够与客户展开及时、准确、个性化的解决方案。但是这个更多属于客服智能问答范畴,本文不做过多阐述。


为什么需要调度


在我们的客户服务生态中,广大客户通过各个渠道来寻求解决各类问题,每天的进线量较大,且不时伴随着突发性进线。特别是当诸如BML/BW等大型活动售票环节遭遇障碍时,短短数分钟内即可激增数千次的在线咨询请求。

如,今年的某售票活动部分技能组排队达到千人级别,总体排队达到几千人。

面对这种突发的客户问题,我们既有的服务能力往往难以支撑,进而引发用户排队等候的现象,排队过长会引发很多严重的问题,比如:

鉴于此,一套高效、灵活的调度体系是我们亟待构建的。



客服调度的目标与挑战


核心目标是:用较少的客服资源获得更佳的用户体验,提升客服服务效能与用户满意度。如果我们招聘大量的客服,也能让用户获得更好的体验,但是容易造成人力浪费,更多的人手意味着更多的培训成本、管理成本和人力成本。

相较于机器调度的直接性与高效性,客服调度面临着更为错综复杂的挑战:


02 在线坐席调度


2.1 在线坐席调度的基础规则


基于上述的背景和核心问题,我们在设计坐席调度系统时会遵循一些基础规则

    1) 以下红框内的每一个tab在后台会对应一个技能组,技能组是客服人员提供服务的基本业务单位,一个业务下往往有多个技能组。



2)一个客服人员归属于一个或者多个技能组,一个技能组也可以有多个客服


2.2 在线坐席调度系统-第一期


第一期主要是从0到1搭建系统的阶段,比较注重的是分配策略,就是把用户分给对应的客服,因此我们调研了多种策略:

在进行了深入研究后,我们发现均衡分配策略是业内使用最广泛和最常用的策略,也被广泛应用于各种客户服务系统。这是因为均衡分配策略可以确保所有坐席的工作量公平分配,防止过度劳累,防止坐席空闲,从而提高整体服务效率。同时,我们也发现,熟客优先策略、上次服务优先策略和指定分配策略都有其特定的适用场景,可以在需要的时候作为均衡分配策略的补充。因此,我们的选择是采用均衡分配策略作为基础的坐席调度策略,同时在代码上,我们使用了策略模式(Strategy Pattern),可以根据业务需要灵活的拓展到使用其他策略。


均衡分配


在介绍均衡分配前,有几个名词需要提前解释一下:




如何实现均衡分配


以下是我们客服系统中均衡分配的实现逻辑:

注意,分配是以技能组为单位进行分配。假设一个技能组有两个客服,A客服的饱和度为5,B客服的饱和度为10。   

    如果A客服当前服务的用户数少于B客服当前服务的用户数,并且都低于各自的饱和度,那么如果有用户进线,系统会优先分配给A客服。

     如果A客服和B客服当前服务的用户数相等,并且都低于各自的饱和度,那么如果有用户进线,系统会随机均衡分配给A或B客服。

     如果A客服已经达到了自己的饱和度,那么如果有用户进线,A客服将不会被分配到该用户进线,该用户将被分配给还没有达到饱和度的客服,并根据上述1和2的原则进行分配。

    如果A客服和B客服都已经达到了各自的饱和度,那么系统将进入排队状态。


排队


这里可以用Redis的Zset数据结构,可以方便的根据用户排队时间进行先后次序排队:

以上命令基本可以满足排队场景各项操作。


自动进线和会话邀请


当用户进入排队后,有两种方式可以获得人工服务:自动进线和会话邀请。

自动进线(定时调度):系统会持续扫描未达到饱和度的客服,如果发现有客服尚未达到饱和度,会自动将队列中的用户分配给该客服。

会话邀请:客服人员可以根据自身能力,即使已经超过饱和度,仍然可以邀请排队中的用户进入会话。可以一次性邀请一个或多个用户进入会话。


转接


客服人员在与用户沟通的过程中,发现用户咨询的问题不在此技能组的范畴内,自己无法解答,他可以将此用户转接给其他客服人员,将用户交给合适的客服人员来服务。


总体流程总结



此版本的系统基本解决了分配的问题,但是对于一些突发情况导致的大量进线没有很好的处理。下面一节将介绍大量突发进线的处理方案。


2.3 在线客服坐席调度系统-第二期


背景


在BW/BML售票期间,用户排队现象普遍,排队名次有时超过千人。根据现行业务逻辑,所有排队用户均会被客服接待。这导致用户在达到队列前端时,可能已等待两到三个小时,很多用户早已离线,而客服仍需接待,造成资源浪费。


虚拟进线


为了避免在大量进线时浪费一线客服人力,我们引入虚拟排队概念。将入队超过一定名次的用户引导至虚拟区,在虚拟区中试探用户是否依然在线,如果用户在规定时间内返回,则正常服务,否则关闭会话。该功能上线后过滤大量无效会话,特别是在BW/BML售票期间过滤了几千条无效会话,节约了大量客服人力,减轻了客服压力。


核心流程和设计


我们对比原来增加了虚拟等候区和虚拟排队区,在虚拟等候区如果用户在N分钟没有回应,说明用户已经离线了,此时可以退出队列,不会再进线。


核心流程图



下面我们对整个流程做详细解释


名词解释



详细分配逻辑


假设

当前客服X的最大饱和度为10,已接待9人,剩余1饱和度,客服X虚拟区无用户,某技能组中排队靠前的三名用户分别为A(入队名次33,当前名次1),B(入队名次22,当前名次2),C(入队名次10,当前名次3),系统的虚拟区比例为2,虚拟区名次为20,虚拟区等候时间为N分钟。

调度过程程描述

       1)客服X在接受到调度时,由于用户A入队名次大于20,且客服X当前虚拟区比例为0/1=0小于系统的虚拟区比例2,所以用户A将由普通队列转移至虚拟等候区。并由机器人后台发送问候语试探用户是否在线。此时客服X最大饱和度为10,已接待9人,剩余0饱和度,虚拟饱和度为1,虚拟区内用户数量为1。

       2)如果N分钟内用户A已就绪(例如回到聊天页面或者发送消息),则客服X将接起用户A处理客户问题。此时客服X最大饱和度为10,已接待10人,剩余0饱和度,虚拟饱和度为0,虚拟等候区内用户数量为0。

       3)客服X再次接受调度时,如果用户A在N分钟内依旧未就绪则继续等待,客服X将获取客服B,由于其入队名次同样超过20,所以也会进入虚拟等候区。此时客服X最大饱和度为10,已接待9人,剩余0饱和度,虚拟饱和度为1,虚拟区内用户数量为2。后续客服X将不再接待用户,用户C将继续停留在普通队列等待。

       4)如果用户B早于用户A就绪,则客服X优先服务用户B,用户A将进入虚拟排队区等候,直到有新的饱和度空余出来,客服X才能接待用户A。

       5)如果客服X有会话结束,即多出剩余饱和度,此时即可接待用户C直接进线。

存在的问题


2.4 第三期展望



03 工单坐席调度


前述的都属于在线聊天业务的坐席调度。在客服领域,还有工单客服,他们也有坐席调度。他跟在线调度的区别在于,在线调度在进线那一刻一定要分配一个客服,而工单调度是用户可以先提交工单成功侯,然后再分配处理工单的客服人员。逻辑上就是把创建好的工单分配给对应工单客服人员,因此大家也会称为工单分配。


3.1工单坐席调度-第一期


工单只有在分配给客服后才真正开始处理,才可以和用户沟通、回复,最终解决用户问题。工单分配的效果好坏对工单系统的使用体验至关重要。

工单分配需要确保以下几点:

    待分配的工单:待分配的工单有四种来源,分别为被释放、被转交到组、创建时指定分配到组、自动分配到组,优先级依次由高到低;

    空闲客服:被释放和被转交到组的工单之前已经有过处理人,因此再次分配时,如果上次处理人在候选客服之列,优先分配给上次处理人;因此客服的分配优先级为:上次处理人 > 空闲客服(空闲客服间平均分配)。

其中,准确性依靠流转触发器模块实现,流转触发器是工单系统引入的规则配置,用来约束哪些业务的工单分配至哪个工单组,分配到组逻辑完全遵循流转触发器,配置正确则保证分配正确。公平性和优先级通过下述分配流程实现,并专门讲到实时性的设计要点。


分配逻辑



定时分配过程由Railgun定时任务触发,当前触发周期为1min。分配流程为每次从待分配队列获取前N个(数量可配置)工单,针对每一个工单,获取对应的客户队列,从前往后匹配客服,匹配到则将工单分配出去,并从待分配队列剔除,客服饱和度+1,未分配到的工单等待下次分配。


工单待分配队列

工单待分配队列基于 Redis-Zset 结构实现,存储所有处在待分配状态的工单,不同来源的待分配工单(释放的、转交到组的、创建是指定分配到组的、自动分配到组的)赋予不同的分配权重,保证释放的工单在前,自动分配到组的工单在后,相同类型的(比如两个工单都是释放的)根据时间顺序(比如释放时间)从前往后分配,分配时每次扫描窗口限定为对头的一定数量工单,从而实现优先级分配和抢占式分配。

之所以额外采用 Redis-Zset 实现待分配队列,是因为如果直接读取DB数据构建队列,同时涉及到工单信息表(筛选出待分配的工单)和工单操作记录表(工单是经过何种操作来到的待分配状态,从而确定分配优先级),数据量和计算量都很大,无法保证分配的效率。

1) 待分配队列设计


字段格式描述
Keytobeallocated_ticket_list_{工单组id}每个工单组独立一条待分配队列
Score{weight}调度权重,值越小,优先级越高
Member {ticket_id}待分配工单的工单id


因此,在调度权重的设计上,weight(释放的) < weight(转交到组的) < weight(创建是指定分配到组的) < weight(自动分配到组的)。权重计算逻辑如下:

效果:



不同类型的工单分段存储,可读性强,易调试。


2) 待分配队列操作

添加待分配工单到队列:ZADD tobeallocated_ticket_list_{工单组id} {weight}  {ticket_id}

从待分配队列取出工单:ZRANGE tobeallocated_ticket_list_{工单组id} 0 N

剔除已分配的工单:ZREM tobeallocated_ticket_list_{工单组id}  {ticket_id}

判断工单在待分配队列是否存在(不存在则添加,加固逻辑):ZSCORE tobeallocated_ticket_list_{工单组id}  {ticket_id}


3.2工单坐席调度-第二期


背景


上述工单分配策略通过周期性的获取一段待分配工单,并采用随机分配算法将每个工单分配给一位在线未饱和客服,直到所有客服饱和或者工单分配完毕。

这种基于当日配额贪心式分配的策略理论上非常公平,但在实际场景下也有不公平的一面,因为即使是同时间段提供服务的一批客服,上班(准确说是上线)时间错开个几分钟到几十分钟也是非常常见的,这样最先点击上线的客服就有长达几十分钟的时间“独享”前夜遗留的大量工单,待所有客服都上线后,当日增量的工单又是均匀分配,因此整体来看,早上班的客服会比晚上班的客服分配到更多的工单。

举个例子,假设前夜遗留1000个工单,每日工单新增4000单,总共有40位客服进行接单,其中4位客服上班时间第一时间比如9:00上线,其他客服晚半小时9:30上线。

则早上班的4位客服当日处理工单量为:1000 / 4 + 4000 / 40 = 350,其他36位客服处理工单量位:4000 / 40 = 100,于是不均衡出现了。


优化方案


针对第一期方案基于日配额进行顶格分配的策略存在的不公平问题,在和产品、运营同学齐力讨论下,引入瞬时饱和度概念,即每个客服同时能处理的工单数量。

新的分配方案是:首先给每一位客服配置对应的日饱和度和瞬时饱和度,分别限制该客服一天最多能处理的工单量上限和同时能够并发处理的工单量上线,然后在自动分配流程中,分别获取客服当前的饱和度以及当前处理工单数,分别与日饱和度和瞬时饱和度做比较,只有都不饱和时才可继续分配工单;如果因为瞬时饱和度超了,只能等客服至少处理完一单才可继续分配,如果因为日饱和度超了,则当日不可再继续分配工单。

通过引入瞬时饱和度,对工单的自动分配效果有两点提升。一是客服的日配额可以较为均匀的分散在一天的各个时间段,不至于短时间内被打满,然后在接下里的时间里无单可接,负荷更为平滑;二是前夜遗留的工单不会再集中分配给早上班的客服,因为在给他们分配对应瞬时饱和度的工单之后便停止分配,直到新的客服上线后再继续分配给新客服,不会再因为上班时间小时级差异而导致显著的分配不公平现象。



效果


通过日饱和度和瞬时饱和度相结合的工单自动分配机制,从时间段(一天)和时间点(同时)上同时限制客服接单量,使得工单分配效果更公平,客服负荷更平滑。


04 总结


本文详细探讨了哔哩哔哩客服坐席调度系统的演进,特别是在线客服和工单客服的调度策略。随着客户需求的增加,尤其是在大型活动期间,客服系统面临着突发的高流量和复杂的客户问题。为了提高服务效率和客户满意度,系统引入了多种调度策略,包括均衡分配、熟客优先和虚拟排队等。

展望未来,客服坐席调度系统可以在以下几个方面进行进一步优化:

通过这些优化措施,哔哩哔哩客服坐席调度系统将能够更有效地应对未来的挑战,提升服务质量和用户体验,为公司创造更大的价值。


参考:
https://www.bilibili.com/opus/829931996793798793

https://redis.io/docs/latest/develop/data-types/sorted-sets/

https://tech.meituan.com/2021/09/30/artificial-intelligence-customer-service.html

https://zhuanlan.zhihu.com/p/43795895


-End-

作者丨小雄,Jayce,四百块、xiulin


开发者问答

关于客服坐席调度,大家还有什么优秀的方案和经验?欢迎在留言区告诉我们。转发并留言,小编将选取1则最有价值的评论,送出bilibiliGoods 蜡笔小新 坨坨king 毛绒挂件 (见下图)11月22日中午12点开奖。如果喜欢本期内容的话,欢迎点个“在看”吧!



往期精彩指路


通用工程大前端业务线

大数据AI多媒体



跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

客服系统 坐席调度 虚拟排队 工单分配 服务效率
相关文章