在线客服系统源码实现-免登录实时接待-MySQL数据库设计方案
许多网站希望为客户提供即时咨询服务,但又不希望强制用户注册。本文将介绍一个简单的免登录在线客服系统的MySQL数据库设计和基本实现思路,客户无需注册即可咨询。
演示网站:gofly.v1kf.com
数据库设计
1. 客服人员表(agents)
CREATE TABLE agents (
agent_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
is_online BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 客户会话表(visitors)
CREATE TABLE visitors (
visitor_id VARCHAR(32) PRIMARY KEY, -- 使用UUID或随机字符串标识匿名用户
ip_address VARCHAR(45),
user_agent TEXT,
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_active TIMESTAMP NULL
);
3. 客服会话表(conversations)
CREATE TABLE conversations (
conversation_id INT AUTO_INCREMENT PRIMARY KEY,
visitor_id VARCHAR(32) NOT NULL,
agent_id INT NULL,
status ENUM('waiting', 'active', 'closed') DEFAULT 'waiting',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
closed_at TIMESTAMP NULL,
FOREIGN KEY (visitor_id) REFERENCES visitors(visitor_id),
FOREIGN KEY (agent_id) REFERENCES agents(agent_id)
);
4. 消息表(messages)
CREATE TABLE messages (
message_id INT AUTO_INCREMENT PRIMARY KEY,
conversation_id INT NOT NULL,
sender_type ENUM('visitor', 'agent') NOT NULL,
content TEXT NOT NULL,
sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_read BOOLEAN DEFAULT FALSE,
FOREIGN KEY (conversation_id) REFERENCES conversations(conversation_id)
);
核心功能实现
1. 客服人员登录
-- 客服登录
UPDATE agents
SET is_online = TRUE
WHERE username = 'agent1' AND password = 'hashed_password';
-- 获取在线客服列表
SELECT agent_id, username FROM agents WHERE is_online = TRUE;
2. 匿名客户创建会话
-- 生成唯一访客ID (实际应用中应由程序生成)
SET @visitor_id = UUID();
-- 记录新访客
INSERT INTO visitors (visitor_id, ip_address, user_agent)
VALUES (@visitor_id, '192.168.1.1', 'Mozilla/5.0...');
-- 创建新会话
INSERT INTO conversations (visitor_id, status)
VALUES (@visitor_id, 'waiting');
3. 客服接听会话
-- 获取等待中的会话
SELECT conversation_id, visitor_id FROM conversations
WHERE status = 'waiting' LIMIT 1;
-- 客服接听会话
UPDATE conversations
SET agent_id = 1, status = 'active'
WHERE conversation_id = 1 AND status = 'waiting';
4. 发送消息
-- 访客发送消息
INSERT INTO messages (conversation_id, sender_type, content)
VALUES (1, 'visitor', '你好,我想咨询产品价格');
-- 客服回复消息
INSERT INTO messages (conversation_id, sender_type, content)
VALUES (1, 'agent', '您好,我们的产品价格是...');
-- 标记访客消息为已读
UPDATE messages SET is_read = TRUE
WHERE conversation_id = 1 AND sender_type = 'visitor' AND is_read = FALSE;
5. 获取会话消息
-- 获取会话中的所有消息
SELECT message_id, sender_type, content, sent_at, is_read
FROM messages
WHERE conversation_id = 1
ORDER BY sent_at ASC;
6. 关闭会话
-- 关闭会话
UPDATE conversations
SET status = 'closed', closed_at = CURRENT_TIMESTAMP
WHERE conversation_id = 1 AND status = 'active';
扩展功能实现
1. 会话超时处理
-- 查找30分钟无活动的会话
SELECT c.conversation_id, v.visitor_id
FROM conversations c
JOIN visitors v ON c.visitor_id = v.visitor_id
WHERE c.status = 'active'
AND v.last_active < NOW() - INTERVAL 30 MINUTE;
-- 关闭超时会话
UPDATE conversations
SET status = 'closed', closed_at = CURRENT_TIMESTAMP
WHERE conversation_id IN (1, 2, 3);
2. 访客识别
-- 通过cookie识别回头客
SELECT visitor_id, COUNT(*) AS conversation_count
FROM conversations
WHERE visitor_id = 'abc123'
GROUP BY visitor_id;
3. 客服工作统计
-- 统计客服处理的会话数量
SELECT agent_id, COUNT(*) AS handled_conversations
FROM conversations
WHERE agent_id = 1
AND status = 'closed'
GROUP BY agent_id;
性能优化建议
-
为常用查询字段添加索引:
CREATE INDEX idx_conversation_status ON conversations(status); CREATE INDEX idx_conversation_visitor ON conversations(visitor_id); CREATE INDEX idx_message_conversation ON messages(conversation_id); -
对于大型系统,考虑定期归档历史会话数据
-
可以添加缓存层存储活跃会话信息
前端实现建议
- 使用WebSocket实现实时通信
- 在客户端使用localStorage或cookie存储visitor_id
- 实现简单的界面区分访客和客服视图
总结
这个免登录在线客服系统设计简单实用,客户无需注册即可咨询。系统通过唯一的visitor_id识别匿名用户,记录会话历史。客服人员可以登录系统接听和回复客户咨询。实际开发中,可以根据需求添加更多功能,如文件传输、常见问题自动回复、满意度评价等。
这种设计特别适合电商网站、企业官网等需要提供即时咨询服务但又不希望设置注册门槛的场景。
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网
浙公网安备 33010602011771号