呼叫中心工单系统

呼叫中心工单系统Ticket system又称为工单管理系统(还可以称为问题工单系统,事务工单系统,事务追踪系统issue tracking system,支持工单系统support ticket system)),它是一种网络软件系统,根据不同组织,部门和外部客户的需求,来由针对的管理,维护和追踪一系列的问题和请求。一个完善功能的工单系统 又可以称为帮助台系统。

网讯兆通呼叫中心工单系统一般被广泛用于客户帮助支持服务,客户售后服务,企业IT支持服务,呼叫中心等,用来创建,挂 起,解决用户,客户,合作伙伴或企业内部职员提交的事务请求。规范化,统一化和清晰化的处理和管理事务。一个完整的工单系统还需要配套拥有一个帮助文档知 识库(Knowledge base),里面包含客户的一些常见受理问题相关信息,常见问题的处理方式,和一些其他的帮助文档等。一个工单系统就像一个问题追踪器,能很清晰的追踪, 处理和归档内外的问题事务请求,标准化服务追踪用户。

网讯工单系统处理的支持请求可以分为很多种,同时也会根据事务的不同情况用优先级以区分不同程度和重要性的支持请求。优先级可以分为紧急,高,中和低。事务类型可以大致分为,问题,事务,故障和任务。

不 同事务类型可以包含自己的私有属性,如故障可以包含多个事务(多个事务可能由一个故障引起的,或者说一个故障导致多个事务的产生),任务会拥有一个到期时 间(一个任务需要在到期时间前处理完成)。同时可以根据不同企业组织的需求增加分类来对工单种类进行细分,从而有针对的分配合适的任务给合适的管理人员进 行处理。

作为服务于企业和组织的工单系统,其系统内部需要有一套完善的业务流程体系,以满足企业和组织在使用中和操作中的任务分配,事务处理,流程自动化等。

下面举个例子来明确该体系所应包含的内容以及一个工单系统流程具体的操作方式:

1、一个客户支持职员接到一个电话,或者一个事务提交请求(可能在网页上提交也可能是发送电子邮件),其内容是关于一个具体的问题。一些工单系统提供自动回应和提醒。

2、一个服务职员确认该问题的真实性,并通过工单系统或电话收集该客户关于该问题的所有信息。获取该用户的一些必要信息。

3、该服务职员在工单系统中创建该问题,或由客户提交自动在系统自动创建该问题工单,并录入所有关于该问题的相关信息。

4、在处理进程中,工单会经历若干状态,直到已解决该问题,工单的内容会随着问题处理的进度而进行相应的更新。并会发送相应的提醒给请求客户。

5、当一个工单被解决后,该工单在系统中会被标记成已解决,并作为该客户用户事务的归档以便后续追踪和查阅。

从以上简单的流程可以看到,一个优秀的工单系统需要拥有完善的业务流程体系和自定义引擎来方便最终用户和管理人员进行高效的日常操作。

网讯兆通呼叫中心工单系统的标准化服务

1、一个工单系统需要有一套标准化体系,来使工单系统所有的操作,处理,管理和维护全部满足和履行该标准化的内容,避免服务拖延,服务延迟,避免降低服务质量和资源浪费。

服务目标能让工单系统的工单处理操作和相关服务满足服务目标协议,当在实际服务中,有工单处理威胁而不能满足该服务目标时,会及时做出提醒,以让系统管理人员进行及时处理。

2、协同操作,工单系统应该是一个能让多个客户服务职员协同合作处理客户支持请求工单的系统,因此是否高效的进行处理和管理成为判断一个工单系统好坏的关键。

在工单系统内需要对不同角色的人员进行分类,通常采用组和部门(组织)的方式进行分类区分,以便通过业务流程体系来进行自动分配任务。

例如可以将处理技术的客户服务职员全部归属到一个叫做技术组的客服组中,然后通过业务流程体系功能将来源为技术的支持请求全部让该组的人进行受理。

也可以让专职人员专门负责某个部门或某个组织的请求事务处理,追踪和解决。

协同操作不仅限于事务的分配,还在于事务的调度和转发,例如一个客户服务职员可能在处理中能力不足,需要有更多经验的管理人员来协同处理,所以他应该可以将工单分配给另一个人员进行处理。

网讯兆通呼叫中心工单系统的附属功能:

一个全面的工单系统应该是由多种附属功能结合而成的,从而成为一个完善,强大集中的功能应用,下面列出了部分功能是一个优秀的工单系统所能扩展的:

1、在线交谈功能:基于工单系统事务的交谈,交谈内容归档为工单内容

2、统计报告:统计工单系统内的工单处理,操作情况,便于改进和分析

3、支持渠道的扩展:多种客户支持渠道方便客户提交工单问题和支持请求

需求:

最近要实现一个自动派单功能,就是如果有任务来了,那么任务平均分配给现有的员工,如果之前取了任务的员工下次来任务时就分配给下一个,如果有新员工则将员工添加到队列的最后,如果有员工离职就将员工信息从队列里移除。

实现:

1.写一个定时任务,定时将任务放入任务队列中TaskQueue,并将员工放入User队列中,如果员工已存在则不添加,如果新员工则加入队列中,如果员工不存在了就从队列中移除。

2.写一个线程,从任务队列中取任务,如果任务不存在则阻塞,取到任务后,将该任务派给下一个员工,并将该员工添加到员工队列末尾,这样达到按员工次序分配任务。

3.实现一个任务队列,如果在取任务时任务不存在则阻塞。

4.实现一个员工队列,在取下一个员工后将该员工从列头移到列尾,并且可以将新员工加入到队列未尾,可以将不存在的员工从队列中移除。

核心代码:

Java代码  

  1. import java.util.Collection;
  2. import java.util.concurrent.BlockingQueue;
  3. import java.util.concurrent.LinkedBlockingDeque;
  4. /**
  5. * 任务队列
  6. * 如果在取任务时没有任务,则阻塞
  7. * @author dg
  8. *
  9. */
  10. public class TaskQueue {
  11. private static TaskQueue instance;
  12. private static BlockingQueue queue = null;
  13. private TaskQueue(){
  14. queue = new LinkedBlockingDeque();
  15. }
  16. public static TaskQueue getInstance(){
  17. if(instance == null){
  18. instance = new TaskQueue();
  19. }
  20. return instance;
  21. }
  22. /**
  23. * 获取队列大小
  24. @return
  25. */
  26. public static int getSize(){
  27. return queue.size();
  28. }
  29. /**
  30. * 放入队列中
  31. * @param msg
  32. */
  33. public void put(Object obj){
  34. if(obj != null){
  35. try {
  36. queue.put(obj);
  37. } catch (InterruptedException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }
  42. /**
  43. * 放入队列中
  44. * @param msg
  45. */
  46. public void putAll(Collection objs){
  47. if(objs != null){
  48. queue.addAll(objs);
  49. }
  50. }
  51. /**
  52. * 从队列中取出一个
  53. @return
  54. */
  55. public Object take(){
  56. try {
  57. Object obj = queue.take();
  58. return obj;
  59. } catch (InterruptedException e) {
  60. e.printStackTrace();
  61. }
  62. return null;
  63. }
  64. }

Java代码  

  1. /**
  2. * 存放即将被派任务的员工
  3. * 每次取出员工时不移除该员工,而是将其放到队列末尾
  4. * 如果员工已不存在,将其移除
  5. * @author dg
  6. *
  7. */
  8. public class UserQueue {
  9. private static UserQueue instance = null;
  10. private static BlockingQueue<User> queue = null;
  11. private UserQueue(){
  12. queue =  new LinkedBlockingDeque<User>();
  13. }
  14. public static UserQueue getInstance(){
  15. if(instance == null){
  16. instance = new UserQueue();
  17. }
  18. return instance;
  19. }
  20. /**
  21. * 取下一个员工
  22. * @return
  23. */
  24. public User takeNext(){
  25. User user = null;
  26. try {
  27. user = queue.take();
  28. this.put(user);
  29. } catch (InterruptedException e) {
  30. e.printStackTrace();
  31. }
  32. return user;
  33. }
  34. /**
  35. * 将新员工放入队列中未尾
  36. */
  37. public void put(User user){
  38. if(queue.contains(user)){
  39. return;
  40. }else{
  41. try {
  42. queue.put(user);
  43. } catch (InterruptedException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. }
  48. public void putAll(Collection<User> users){
  49. for(User user : users){
  50. this.put(user);
  51. }
  52. }
  53. /**
  54. * 将已不存在的员工移除
  55. */
  56. public void remove(User user){
  57. if(queue.contains(user)){
  58. queue.remove(user);
  59. }
  60. }
  61. /**
  62. * 获取目前队列中所有的user
  63. * @return
  64. */
  65. public Object[] getAllUsers(){
  66. Object[] obj = queue.toArray();
  67. return obj;
  68. }
  69. /**
  70. * @param args
  71. */
  72. public static void main(String[] args) {
  73. User user1 = new User();
  74. user1.setUid(1);
  75. user1.setAccount("11");
  76. User user2 = new User();
  77. user2.setUid(1);
  78. user2.setAccount("11");
  79. User user3 = new User();
  80. user3.setUid(3);
  81. user3.setAccount("11");
  82. User user4 = new User();
  83. user4.setUid(4);
  84. user4.setAccount("444");
  85. User user5 = new User();
  86. user5.setUid(5);
  87. user5.setAccount("555");
  88. UserQueue.getInstance().put(user1);
  89. UserQueue.getInstance().put(user2);
  90. UserQueue.getInstance().put(user3);
  91. UserQueue.getInstance().put(user4);
  92. UserQueue.getInstance().put(user5);
  93. for(int i = 0 ; i < 20; i++){
  94. System.out.println(UserQueue.getInstance().takeNext().getUid());
  95. if(i == 5){
  96. UserQueue.getInstance().remove(user2);
  97. }
  98. }
  99. Object[] users = UserQueue.getInstance().getAllUsers();
  100. System.out.println("=======");
  101. for(Object user:users){
  102. System.out.println(((User)user).getUid());
  103. }
  104. }
  105. }

对于要实现User对象的比较,首先要重写equals方法.以下是我重写的User的equals方法

Java代码  

  1. public boolean equals(Object obj) {
  2. if(!(obj instanceof User)){
  3. return false;
  4. }
  5. User u = (User)obj;
  6. return (u.getAccount().equals(account) && u.getUid().equals(uid));
  7. }

Java代码  

  1. import java.util.List;
  2. import java.util.TimerTask;
  3. import org.apache.log4j.Logger;
  4. import com.cms.common.ServiceUtil;
  5. import com.cms.common.SysConfig;
  6. import com.cms.entity.ClientRecord;
  7. import com.cms.entity.User;
  8. import com.cms.service.ClientService;
  9. /**
  10. * 定时将客户意向放入任务队列
  11. * 并且重新成功员工队列
  12. * @author dg
  13. *
  14. */
  15. public class GenerateTask extends TimerTask {
  16. private static Logger logger = Logger.getLogger(GenerateTask.class);
  17. private ClientService clientService = (ClientService)ServiceUtil.getService("clientService");
  18. public void run() {
  19. try {
  20. String autoTaskRoleIds = SysConfig.getStrValue("autotask.roleid");
  21. if(autoTaskRoleIds == null || autoTaskRoleIds.trim().equals("")
  22. || autoTaskRoleIds.split(",").length == 0){
  23. logger.error("自动派单角色未设置");
  24. return;
  25. }
  26. //取全部名单
  27. List<User> userList = clientService.getAllAutoTaskUsers(autoTaskRoleIds.split(","));
  28. if(userList == null || userList.size() == 0){
  29. logger.error("目前还未有业务员无法派单");
  30. return;
  31. }
  32. //将已不存在的用户移除
  33. Object[] users = UserQueue.getInstance().getAllUsers();
  34. for(Object user : users){
  35. if(!userList.contains(user)){
  36. UserQueue.getInstance().remove((User)user);
  37. }
  38. }
  39. //重新生成名单
  40. UserQueue.getInstance().putAll(userList);
  41. //生成任务
  42. List<ClientRecord> recordList = clientService.getAllUnAssignRecord();
  43. TaskQueue.getInstance().putAll(recordList);
  44. } catch (Throwable t) {
  45. logger.error("自动派单任务异常!" ,t);
  46. }finally{
  47. logger.info("此次任务执行完毕!");
  48. }
  49. }
  50. }

Java代码  

  1. import org.apache.log4j.Logger;
  2. import com.cms.common.ServiceUtil;
  3. import com.cms.entity.ClientRecord;
  4. import com.cms.entity.User;
  5. import com.cms.schedule.TaskQueue;
  6. import com.cms.schedule.UserQueue;
  7. import com.cms.service.ClientService;
  8. /**
  9. * 从任务队列里取到任务,自动派单给业务员
  10. * @author dg
  11. *
  12. */
  13. public class AutoDispatchTaskThread implements Runnable{
  14. private static Logger logger = Logger.getLogger(AutoDispatchTaskThread.class);
  15. private ClientService clientService = (ClientService)ServiceUtil.getService("clientService");
  16. private boolean stop = false;
  17. @Override
  18. public void run() {
  19. try{
  20. while(!stop){
  21. ClientRecord record = (ClientRecord)TaskQueue.getInstance().take();
  22. User user = UserQueue.getInstance().takeNext();
  23. clientService.assginRecord(record.getRid(), user.getUid());
  24. }
  25. }catch(Throwable t){
  26. logger.error(t.getMessage(),t);
  27. }
  28. }
  29. }
时间: 2024-10-07 05:35:41

呼叫中心工单系统的相关文章

django 运维工单系统

此工单系统从立项到完成,大概用了1个星期,可能部分思路和实现有所不妥,欢迎指正. 朋友公司想做一个运维工单系统,他没思路,正好我最近打算写一个运维工单系统,初步打算和我目前做的cmdb系统结合起来,于是简单写了个. 简单说下实现思路: 1.标准工单,(参考上家公司的工单系统,对工单做了分类,且每个分类下有对应的审批人和执行人) 2.新建工单(用户从上边的标准工单可以进入对应的工单申请,分为保存和提交两种状态,用户提交后将无法在修改,暂缺一个时间控件,任务类型默认为点击进入的类型,但允许用户进行修

9个常用的开源工单系统

工单系统(也称为问题跟踪系统,故障工单系统,支持工单或事件工单系统)是一个计算机软件包或基于Web的软件包,用于管理和维护组织需要的问题列表. 工单系统通常用于组织的创建,更新和解决报告的客户问题. 有三种版本的工单系统,付费版本,定制版本(主要针对一家公司)和开源版本. 因为我们不想为工单系统付出很多钱,所以我们使用开源版本. 这9个工单系统是专业系统,可以在大公司使用. 这些工单系统中的一些甚至被大公司使用. 我刚刚收集了9个可以工作的优秀工单系统,但是网络上还有更多优秀和专业的工单系统.

工单系统的设计与实现(3)

工程创建成功后,构建本项目的层次结构. 本工单系统采用的是mapper(dao)层+service层+controller层来进行实现. mapper层主要是利用mybatis与数据库进行交互,创建数据访问接口. service层主要用于调用mapper层的数据访问接口,并可对返回的数据进行适当的处理(如分页) controller层主要用于请求的分发,根据url请求以及请求的方式(get post delete put)来选择合适的控制器进行请求的处理,需要调用service层提供的服务. 搞

移动互联网与O2O呼叫中心系统

产品内容:企业总机呼叫中心系统.企业电话营销系统.OA系统.CRM客户关系管理系统.客户工单系统.400客服中心系统.短信/传真群发系统.微信商务平台.QQ商务平台等一体化的系统平台 QQ: 2284181281    邮箱:[email protected] 联系电话:0755-23502552 办公地址:深圳市南山区数字软件园西座1801室 网站:www.efcall.com

呼叫中心如何实现智能化办公?

下面列举了呼叫中心系统的部分高级应用模块,以八百呼呼叫中心系统为例,通过对这些模块功能的详细了解,想必会帮助大家对于呼叫中心系统对企业运营方面的作用有更深的认知. [语音导航] 自动拨放坐席工号.语音或密码身份验证.自动判断来电号码所属区.TTS文字转语音.语音转文字. 满意度评分.智能应答等. [质检模块] 可以根据不同的质检项目设置质检考核标准.项目.分值等:录音质检,质检人员可以根据时间段.坐席工号.来电号码.呼入/呼出方式等多种方式查询需要质检的录音,并通过查询结果直接调去录音,并直接在

呼叫中心系统架构

<一步一步开发呼叫中心系列> 新年上班第一天,祝大家羊年三羊开泰,羊羊得亿!祝我快出生的羊宝宝健康快乐! 话说现在的春节越来越没有年味了,回家除了打麻将就是喝酒睡觉,完全没有以前期望的新年味道了,唉... 话不多说,回到正题. 这一篇,我们来说一说本系列基于板卡的呼叫中心系统总体设计. 主要模块 如下图所示,我把呼叫中心分为十大模块,从下往上依次是:语音板卡.CTI.配置系统.管理系统.工单服务.坐席服务.报表服务.客户关系服务(CRM).电话终端.坐席客户端. 1.语音板卡在前面已经提到过,

业务系统-呼叫中心二次开发(已完结)

一. 批量筛号: 1.输入:案件批次号 输出:该批次的所有电话号码(非有效状态),进行批量筛号,将未知状态的号码标志为有效和无效. 2.Table: Call_Filter_Task     =(Id, Step, Status, BatchId,  CateGoryId, TaskType, TotalNum, Creator, CreateTime, RunBeginTime, RunEndTime) Call_Filter_Send_Batch    = (Id, Status, Filt

呼叫中心系统

1.概述    呼叫中心,也叫客户服务中心.呼叫中心是指以电话接入为主的呼叫响应中心,为客户提供不同类型的电话响应服务.现阶段呼叫中心伴随着先进的通讯技术和网络技术的发展,在技术发展上有了质的飞跃.呼叫中心源于20世纪70年代.在几十年的发展历程中,呼叫中心经历了简单的人工热线电话系统.交互式自动语音应答系统.采用CTI技术实现语音和数据同步的兼有自动语音服务和人工服务的客户服务系统等三个阶段.呼叫中心正在迅速发展成为全球商业人士竞争的热门行业. 2.呼叫中心系统结构      呼叫中心由四大部

EAM系统工单管理

     一.EAM系统工单管理目标 1)通过EAM管理系统的应用来规范整个业务流程: 2)记录日常维修相关的业务数据和信息: 3)按照缺陷处理.计划检修.预防性维修.预测性维修几种可能模式,以提高维修效率.降低总体维护成本为目标. 4)建立有效的工单管理系统,了解设备状况.通过预防性维护方案提高设备可靠性,通过设备的状态监控实时监测设备等手段来达到设备的科学化管理. 5)设备维修管理主要以工单的审批.执行为主线,通过最先进的计算机和网络技术,将工单中涉及到的工作流程.人力资源.物资(库存.采购