php 实现客服
PHP 实现客服系统的关键方法
使用 WebSocket 实现实时通信
WebSocket 适合需要实时交互的客服场景。PHP 可通过 Ratchet 库实现 WebSocket 服务端:
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Chat implements MessageComponentInterface {
public function onOpen(ConnectionInterface $conn) {
// 新连接处理
}
public function onMessage(ConnectionInterface $from, $msg) {
// 消息广播逻辑
}
// 其他必要方法...
}
$server = IoServer::factory(new Chat(), 8080);
$server->run();
前端需配合 JavaScript WebSocket API 建立连接,实现消息收发。
数据库存储对话记录
MySQL 表结构设计示例:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
sender_id INT,
receiver_id INT,
content TEXT,
timestamp DATETIME,
is_read BOOLEAN DEFAULT false
);
PHP 使用 PDO 进行消息存储:
$stmt = $pdo->prepare("INSERT INTO messages VALUES (?,?,?,?,?)");
$stmt->execute([null, $senderId, $receiverId, $content, date('Y-m-d H:i:s')]);
用户身份验证
基于 Session 的登录验证:
session_start();
if ($_POST['username'] === $validUser && password_verify($_POST['password'], $hashedPwd)) {
$_SESSION['user_id'] = $userId;
$_SESSION['role'] = 'customer'; // 或 'agent'
}
消息队列处理高并发
对于大量咨询请求,可引入 Redis 队列:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->lPush('message_queue', json_encode(['from' => $uid, 'msg' => $message]));
前端界面实现
基础 HTML/CSS 聊天界面模板:
<div id="chat-box">
<div id="messages"></div>
<input type="text" id="message-input">
<button onclick="sendMessage()">发送</button>
</div>
AJAX 轮询或 WebSocket 实现消息更新。
客服分配逻辑
简单的轮询分配算法:
function getAvailableAgent() {
$agents = $pdo->query("SELECT id FROM users WHERE role='agent' AND status='online'")->fetchAll();
return count($agents) > 0 ? $agents[rand(0, count($agents)-1)]['id'] : null;
}
安全防护措施
输入过滤和 XSS 防护:

$cleanMsg = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
$stmt = $pdo->prepare("INSERT INTO messages VALUES (?,?,?,?)");
$stmt->bindParam(1, $cleanMsg, PDO::PARAM_STR);
部署注意事项
- WebSocket 服务需长期运行,建议用 Supervisor 守护进程
- Nginx 反向代理配置 WebSocket 连接
- HTTPS 加密确保通信安全
- 定期备份对话记录数据库
扩展功能建议
智能回复集成
对接第三方 NLP API 如 Dialogflow:
$response = file_get_contents("https://api.dialogflow.com/v1/query?q=".urlencode($userMsg));
$aiReply = json_decode($response)->result->fulfillment->speech;
文件传输支持
处理图片上传:
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
$newPath = '/uploads/'.basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $newPath);
$db->saveFileMessage($senderId, $receiverId, $newPath);
}
数据统计功能
生成客服绩效报表:
$stats = $pdo->query("
SELECT agent_id, COUNT(*) as total, AVG(response_time) as avg_time
FROM tickets
GROUP BY agent_id
")->fetchAll();
实现时需根据具体业务需求调整架构,小型系统可采用纯 PHP + MySQL,大型系统建议引入消息中间件和微服务架构。






