在线客服系统中的排队机制设计方案

在线客服系统中的排队机制设计方案

1. 排队机制概述

排队机制是在线客服系统的核心功能之一,它能够有效地管理访客请求,确保客服资源合理分配,提升用户体验。本文将基于现有的数据库设计,提出一个简单但高效的排队机制实现方案。

演示网站:gofly.v1kf.com

2. 现有数据库分析

当前数据库已经包含了客服(user)、访客(visitor)、消息(message)等核心表,这些表可以作为排队机制的基础。我们需要在这些表的基础上进行扩展,添加必要的字段和表来支持排队功能。

3. 数据库扩展设计

3.1 在user表中添加字段

ALTER TABLE `user` 
ADD COLUMN `max_visitors` INT NOT NULL DEFAULT 10 COMMENT '最大接待访客数',
ADD COLUMN `current_visitors` INT NOT NULL DEFAULT 0 COMMENT '当前接待访客数';

3.2 创建排队表

CREATE TABLE `queue` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `visitor_id` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '访客ID',
  `kefu_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '分配的客服账户',
  `ent_id` INT NOT NULL DEFAULT 0 COMMENT '企业ID',
  `queue_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '排队时间',
  `start_time` TIMESTAMP NULL DEFAULT NULL COMMENT '开始服务时间',
  `end_time` TIMESTAMP NULL DEFAULT NULL COMMENT '结束服务时间',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '1排队中,2服务中,3已完成,4已取消',
  `priority` TINYINT NOT NULL DEFAULT 1 COMMENT '优先级1-5,数字越大优先级越高',
  `channel` VARCHAR(50) NOT NULL DEFAULT 'web' COMMENT '渠道:web,wechat,douyin等',
  PRIMARY KEY (`id`),
  KEY `visitor_id` (`visitor_id`),
  KEY `kefu_name` (`kefu_name`),
  KEY `ent_id` (`ent_id`),
  KEY `status` (`status`),
  KEY `queue_time` (`queue_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='访客排队表';

4. 排队流程设计

4.1 访客进入排队

  1. 访客首次访问或发送消息时,系统检查该访客是否已有客服接待
  2. 如果没有,则创建排队记录
  3. 根据优先级算法分配客服
-- 示例SQL:创建排队记录
INSERT INTO `queue` (visitor_id, ent_id, status, priority, channel) 
VALUES ('visitor123', 1, 1, 1, 'web');

4.2 客服分配算法

  1. ​空闲客服优先​​:选择当前接待访客数最少的客服
  2. ​轮询分配​​:按照客服列表顺序轮流分配
  3. ​优先级分配​​:VIP访客可以优先分配
-- 示例SQL:查找空闲客服
SELECT `name` FROM `user` 
WHERE `ent_id` = 1 
AND `online_status` = 1 
AND `status` = 0 
AND `current_visitors` < `max_visitors`
ORDER BY `current_visitors` ASC, `rec_num` ASC
LIMIT 1;

4.3 开始服务

  1. 当客服准备接待新访客时,从队列中取出优先级最高的访客
  2. 更新排队记录状态为"服务中"
  3. 更新客服的当前接待访客数
-- 示例SQL:从队列中获取下一个访客
UPDATE `queue` 
SET `kefu_name` = 'kefu2', `status` = 2, `start_time` = NOW() 
WHERE `id` = (
  SELECT id FROM `queue` 
  WHERE `ent_id` = 1 AND `status` = 1 
  ORDER BY `priority` DESC, `queue_time` ASC 
  LIMIT 1
);

-- 更新客服当前接待数
UPDATE `user` 
SET `current_visitors` = `current_visitors` + 1 
WHERE `name` = 'kefu2';

4.4 结束服务

  1. 当对话结束时,更新排队记录状态为"已完成"
  2. 减少客服的当前接待访客数
-- 示例SQL:结束服务
UPDATE `queue` 
SET `status` = 3, `end_time` = NOW() 
WHERE `visitor_id` = 'visitor123' AND `status` = 2;

-- 更新客服当前接待数
UPDATE `user` 
SET `current_visitors` = `current_visitors` - 1 
WHERE `name` = 'kefu2';

5. 排队状态监控

5.1 排队位置查询

-- 示例SQL:查询访客在队列中的位置
SELECT COUNT(*) AS position 
FROM `queue` 
WHERE `ent_id` = 1 AND `status` = 1 
AND (`priority` > 1 OR (`priority` = 1 AND `queue_time` < (
  SELECT `queue_time` FROM `queue` WHERE `visitor_id` = 'visitor123'
)));

5.2 平均等待时间统计

-- 示例SQL:计算平均等待时间
SELECT 
  AVG(TIMESTAMPDIFF(SECOND, `queue_time`, `start_time`)) AS avg_wait_seconds
FROM `queue` 
WHERE `ent_id` = 1 AND `status` = 3 
AND `queue_time` > DATE_SUB(NOW(), INTERVAL 1 DAY);

6. 高级功能扩展

6.1 超时处理

-- 示例SQL:处理长时间未响应的排队
UPDATE `queue` 
SET `status` = 4, `end_time` = NOW() 
WHERE `status` = 1 
AND `queue_time` < DATE_SUB(NOW(), INTERVAL 10 MINUTE);

6.2 客服转移

-- 示例SQL:转移客服
-- 1. 结束当前服务
UPDATE `queue` 
SET `status` = 3, `end_time` = NOW() 
WHERE `visitor_id` = 'visitor123' AND `status` = 2;

-- 2. 原客服接待数减1
UPDATE `user` 
SET `current_visitors` = `current_visitors` - 1 
WHERE `name` = 'kefu2';

-- 3. 新客服接待数加1
UPDATE `user` 
SET `current_visitors` = `current_visitors` + 1 
WHERE `name` = 'kefu3';

-- 4. 创建新的排队记录
INSERT INTO `queue` (visitor_id, kefu_name, ent_id, status, start_time) 
VALUES ('visitor123', 'kefu3', 1, 2, NOW());

7. 前端实现建议

  1. ​排队状态显示​​:向访客显示当前排队位置和预计等待时间
  2. ​客服面板​​:显示当前接待列表和排队列表
  3. ​通知机制​​:当有访客进入队列或离开队列时通知客服

8. 性能优化

  1. 为常用查询字段添加索引
  2. 定期归档已完成的历史排队记录
  3. 使用缓存存储热点数据,如客服当前接待数

9. 总结

本文提出的排队机制设计方案基于现有数据库结构,通过添加必要的表和字段,实现了基本的排队功能。该方案具有以下特点:

  1. ​简单易实现​​:最小化对现有系统的修改
  2. ​灵活可扩展​​:支持优先级、多渠道等高级功能
  3. ​高效​​:通过合理的索引和查询优化保证性能

实际实现时,可以根据具体业务需求进行调整和扩展,例如添加更复杂的分配算法、支持插队功能等。

posted @ 2025-06-05 09:52  唯一客服系统开发笔记  阅读(78)  评论(0)    收藏  举报