在线客服系统源码实现-免登录实时接待-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;

性能优化建议

  1. 为常用查询字段添加索引:

    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);
  2. 对于大型系统,考虑定期归档历史会话数据

  3. 可以添加缓存层存储活跃会话信息

前端实现建议

  1. 使用WebSocket实现实时通信
  2. 在客户端使用localStorage或cookie存储visitor_id
  3. 实现简单的界面区分访客和客服视图

总结

这个免登录在线客服系统设计简单实用,客户无需注册即可咨询。系统通过唯一的visitor_id识别匿名用户,记录会话历史。客服人员可以登录系统接听和回复客户咨询。实际开发中,可以根据需求添加更多功能,如文件传输、常见问题自动回复、满意度评价等。

这种设计特别适合电商网站、企业官网等需要提供即时咨询服务但又不希望设置注册门槛的场景。

posted @ 2025-06-04 23:25  唯一客服系统开发笔记  阅读(72)  评论(0)    收藏  举报