一、实现思路
在网页在线客服系统中实现自动欢迎语,主要需要以下几个步骤:
- 在数据库中存储欢迎语内容
- 判断用户是否为首次访问或新会话
- 在适当时机自动发送欢迎消息
演示网站:gofly.v1kf.com
二、数据库设计
首先需要扩展数据库结构:
-- 欢迎语表
CREATE TABLE welcome_messages (id INT AUTO_INCREMENT PRIMARY KEY,message TEXT NOT NULL,is_active BOOLEAN DEFAULT 1,delay_seconds INT DEFAULT 3 COMMENT '延迟发送秒数',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 用户会话表(用于判断是否新会话)
CREATE TABLE chat_sessions (session_id VARCHAR(32) PRIMARY KEY,user_ip VARCHAR(45),user_agent TEXT,first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,last_active TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 插入默认欢迎语
INSERT INTO welcome_messages (message, delay_seconds) VALUES
('欢迎光临!请问有什么可以帮您?', 3);
三、PHP实现代码
1. 检查并发送欢迎语(welcome.php)
<?php
require 'db_connect.php';// 获取或创建会话ID
session_start();
$sessionId = session_id();// 检查是否为新会话
$isNewSession = false;
$sql = "SELECT * FROM chat_sessions WHERE session_id = '$sessionId'";
$result = $conn->query($sql);if ($result->num_rows == 0) {// 新会话,插入记录$userIp = $_SERVER['REMOTE_ADDR'];$userAgent = $conn->real_escape_string($_SERVER['HTTP_USER_AGENT']);$sql = "INSERT INTO chat_sessions (session_id, user_ip, user_agent) VALUES ('$sessionId', '$userIp', '$userAgent')";$conn->query($sql);$isNewSession = true;
} else {// 更新最后活动时间$sql = "UPDATE chat_sessions SET last_active = NOW() WHERE session_id = '$sessionId'";$conn->query($sql);
}// 如果是新会话且欢迎语功能开启,获取欢迎语
$welcomeMessage = null;
if ($isNewSession) {$sql = "SELECT message, delay_seconds FROM welcome_messages WHERE is_active = 1 LIMIT 1";$result = $conn->query($sql);if ($result->num_rows > 0) {$row = $result->fetch_assoc();$welcomeMessage = ['text' => $row['message'],'delay' => $row['delay_seconds'] * 1000 // 转换为毫秒];}
}echo json_encode($welcomeMessage);
$conn->close();
?>
2. 修改前端代码(index.html)
在原有代码中添加欢迎语处理:
<script>// 页面加载时检查欢迎语window.onload = function() {fetch('welcome.php').then(response => response.json()).then(data => {if (data) {// 延迟发送欢迎语setTimeout(() => {addMessage('bot', data.text);}, data.delay);}});};// 原有sendMessage函数...
</script>
四、管理后台扩展
在管理后台(admin.php)中添加欢迎语管理功能:
// 在admin.php中添加欢迎语管理部分
<h2>欢迎语管理</h2>
<form method="post"><textarea name="welcome_message" placeholder="欢迎语内容" required></textarea><input type="number" name="delay" placeholder="延迟秒数" value="3" min="0"><button type="submit" name="save_welcome">保存欢迎语</button>
</form><?php
// 处理欢迎语保存
if (isset($_POST['save_welcome'])) {$message = $conn->real_escape_string($_POST['welcome_message']);$delay = (int)$_POST['delay'];// 先禁用所有欢迎语$conn->query("UPDATE welcome_messages SET is_active = 0");// 插入新欢迎语$sql = "INSERT INTO welcome_messages (message, delay_seconds, is_active) VALUES ('$message', $delay, 1)";$conn->query($sql);
}// 显示当前欢迎语
$result = $conn->query("SELECT * FROM welcome_messages WHERE is_active = 1 LIMIT 1");
if ($result->num_rows > 0) {$welcome = $result->fetch_assoc();echo "<p>当前欢迎语:".htmlspecialchars($welcome['message'])." (延迟".$welcome['delay_seconds']."秒)</p>";
}
?>
五、进阶优化方案
1. 多条件欢迎语
ALTER TABLE welcome_messages ADD COLUMN conditions VARCHAR(255) COMMENT 'JSON格式的条件';
可以实现根据不同条件显示不同欢迎语,例如:
- 根据访问页面显示不同欢迎语
- 根据用户来源(搜索引擎、直接访问等)显示不同内容
- 根据时间段显示不同问候语
2. 用户识别
ALTER TABLE chat_sessions ADD COLUMN user_id INT DEFAULT NULL COMMENT '登录用户ID';
如果网站有用户系统,可以关联用户ID,实现个性化欢迎语,如:"欢迎回来,张先生!"
3. 频率控制
避免重复发送欢迎语,可以在会话表中添加字段:
ALTER TABLE chat_sessions ADD COLUMN welcome_sent BOOLEAN DEFAULT 0;
发送欢迎语后更新此字段为1,下次检查时不再发送
六、完整工作流程
- 用户访问客服页面,创建或获取会话ID
- 系统检查是否为全新会话
- 如果是新会话,从数据库获取当前启用的欢迎语
- 前端收到欢迎语数据后,延迟指定时间显示
- 管理员可以通过后台随时修改欢迎语内容和设置
七、注意事项
- 会话识别:确保session配置正确,避免每次刷新都视为新会话
- 性能考虑:频繁访问数据库可能影响性能,可以考虑缓存欢迎语
- 移动端适配:欢迎语延迟时间不宜过长,移动用户可能快速离开
- 内容更新:修改欢迎语后可能需要清除缓存才能立即生效
- 多语言支持:可根据用户浏览器语言设置显示不同语言的欢迎语
这个实现方案简单直接,基于MySQL和PHP,无需复杂技术栈即可为网页在线客服系统添加自动欢迎语功能。