💬
-
总会话数
📞
-
总联系系数
📅
-
今日会话
⭐
-
今日新增联系
🟢
-
在线访客数
外部系统入口
| 名称 | 说明 | 操作 |
|---|---|---|
| 监控大盘 | AI 调用、成本、Provider 健康 | 打开 |
| KB 智能运营 | 命中率分析、未命中流量、A/B 测试 | 打开 |
| 测试页 | 服务有效性测试 / 组件健康检查 | 打开 |
| 对话测试 | 通过 Webhook / WebSocket 与 AI 客服真实对话 | 打开 |
联系方式类型分布
0
手机号
0
微信号
0
邮箱
加载中...
← 请从左侧选择一位访客查看详情
| 时间 | 姓名 | 手机号 | 微信号 | 邮箱 | 备注 | 来源 | 负责客服 | 操作 |
|---|
📅 日期
🤖 模型
📞 联系方式
💬 消息数
每页 10 条
会话列表
聊天记录
← 请从左侧选择一个会话
📁 客服分组
| 分组名称 | 描述 | 组内客服数 | 创建时间 | 操作 |
|---|
👤 客服人员
| 头像 | 名称 | 所属分组 | 负责网站 | 状态 | 创建时间 | 操作 |
|---|
🧩 嵌入代码生成
请先选择一位客服
| 姓名 | 用户名 | 角色 | 关联客服 | 状态 | 最后登录 | 操作 |
|---|
| 排序 | 标题 | 分组 | 内容 | 状态 | 操作 |
|---|
🇨🇳 中文知识库
🇬🇧 English KB
⚙️ 知识库匹配设置
:
(如 60:40)
开启后用AI对候选结果重新排序
🤖 知识库专属模型
| 名称 | API地址 | 模型 | API Key | 状态 | 操作 |
|---|
知识库重排使用的模型独立于系统配置中的AI模型,互不影响。
| 标题 | 分类 | 优先级 | 问题 | 答案 | 关键词 | 状态 | 操作 |
|---|
🔍 测试知识匹配
输入问题后点击测试,查看匹配到的知识条目
🔌 知识库外部 API (点击展开文档)
外部系统可以通过 HTTP API 拉取、搜索、新增、修改、删除知识库。Token 为登录 Token(见「账号设置」页面)。
| 操作 | 方法 | URL | 参数 |
|---|---|---|---|
| 拉取全部 | GET | /api/knowledge?token=TOKEN | 无 |
| 搜索 | GET | /api/knowledge/search?q=关键词&token=TOKEN | q=搜索词 |
| 新增 | POST | /api/knowledge?token=TOKEN | JSON Body(见下) |
| 修改 | PUT | /api/knowledge/:id?token=TOKEN | JSON Body |
| 删除 | DELETE | /api/knowledge/:id?token=TOKEN | 无 |
POST/PUT JSON Body 参数:
title(标题,必填)、category(分类)、question(关联问题)、answer(答案,必填)、keywords(关键词数组)、priority(优先级0-10)、enabled(true/false)curl 示例:
curl -X POST https://t2.bjhgyjs.com/api/knowledge?token=YOUR_TOKEN \
-H "Content-Type: application/json" \
-d '{"title":"SGS检测","category":"检测","question":"SGS检测","answer":"我们可以做...","priority":8,"enabled":true}'
| Title | Category | Priority | Question | Answer | Keywords | Status | Actions |
|---|
🔍 Test English Matching
Enter a question then click Test to see matched entries
AI 提示词配置
以下提示词用于 KB 运营中的 AI 智能生成功能(相似问题、反例问法)。留空则使用内置默认提示词。可用变量:{title} 条目标题、{keywords} 关键词、{answer} 标准答案
⚙️ 系统配置
修改后请点击右侧保存按钮
机器人基础设置
用于机器人话术中「{N} 分钟内回复」的提示
🧠 AI 提示词明细 (以下内容会拼接后发送给大模型,可直接修改)
发送顺序(从上到下): ① AI 角色设定 → ② 知识库参考(命中时自动注入) → ③ 用户画像(自动注入) → ④ System Prompt 补充指令
修改后请点击页面顶部"💾 保存所有配置"按钮生效。
修改后请点击页面顶部"💾 保存所有配置"按钮生效。
发送给 AI 的第一段内容,定义角色和硬性规则
当用户消息为英文时,使用此角色设定
附加在角色设定和知识库参考之后的补充指令,常用于引导留电策略
📌 关联话术(不直接发给AI,但会被工作流引用)
WebSocket 长连接场景下,向用户主动推送的话术
AI 调用失败或无合适回复时的兜底话术,{N} 自动替换为分钟数
💡 提示: 工作流话术(附件回复、空号回复、夜班/白班回复等)请到
「工作流」标签页
的"📝 工作流话术编辑"区域统一编辑;主动推送 A-1/A-2 在本页下方"📢 主动推送配置"。
🤖 机器人工作模式
SaaS 模式 = 纯机器人,外网站点通过 Webhook/WebSocket 调用 → 微信对话开放平台回复;AI+机器人 = 本地大模型回复
📢 主动推送配置 (Webhook + WebSocket 通用)
客户进入时自动推送 A-1 欢迎消息;客户静默 N 秒后自动推送 A-2 话术,引导留电。对 Webhook 和 WebSocket 两种接入方式同时生效。
单次会话最多推送几次 A-2(避免反复骚扰)
🧠 AI 模型配置
已启用 0 个 · 轮询负载均衡
⚠️ AI 网关已启用时,本配置仅作降级备份,实际 AI 调用请到「🤖 AI 网关」标签页配置 Provider 和路由。
可添加任意数量的 AI 模型,开启的模型自动轮询分散压力。支持硅基流动、DeepSeek、通义千问、本地 Xinference 等所有 OpenAI 兼容接口。
🔗 外部接入配置
外部网站/系统通过 Webhook 或 WebSocket 连接本系统,客户消息由智能机器人自动回复。纯机器人模式直接对接微信对话开放平台。
💬 微信对话开放平台
纯机器人模式(SaaS)下,Webhook 和 WebSocket 收到的消息直接走微信对话开放平台。需先在 chatbot.weixin.qq.com 创建机器人并配置知识库。
SaaS 模式默认启用,关闭后走本地知识库规则
📡 Webhook 接入
外部系统通过 HTTP POST 推送消息,机器人自动回复
外部系统请求时必须携带此 Token
外部系统 POST 此地址
📖 Webhook 数据格式说明 & 接入示例
═══════════════════════════════════════════════════ 一、入站 Webhook(外部系统 → 本系统) ═══════════════════════════════════════════════════ 请求方式:POST /api/webhook/incoming Content-Type:application/json 鉴权方式:Header Authorization: Bearer <token> 或 body.token 或 ?token= 请求体(JSON): { "token": "后台生成的鉴权Token", // 必填 "message": "客户发送的消息", // 必填 "sessionId": "自定义会话ID", // 可选,不传则自动生成 "agentId": "指定客服ID" // 可选 } 成功响应(JSON): { "success": true, // 是否成功 "reply": "机器人的回复内容", // 回复给客户的文本 "sessionId": "会话ID", // 会话标识 "mode": "ai", // 回复来源(ai/wechat-bot/...) "contacts": [], // 提取到的联系方式 "welcomeMessage": "" // 欢迎语(首次访问时返回) } ═══════════════════════════════════════════════════ 二、出站 Webhook 事件(本系统 → 外部系统) (外部系统需要搭建 HTTP 接收端点来监听这些事件) ═══════════════════════════════════════════════════ 推送方式:POST → 出站 Webhook URL(管理后台配置) Header:Content-Type: application/json + X-Webhook-Secret(如配置了 secret) 统一推送格式(JSON): { "event": "事件类型", // 见下表 "timestamp": "2025-01-15T08:30:00.000Z", // ISO 时间戳 "data": { ... } // 事件数据,因事件类型而异 } 所有事件类型一览: newMessage ✅默认开启 用户发新消息 contactExtracted ✅默认开启 提取到联系方式 transferToHuman ✅默认开启 转人工 newVisitor ✅默认开启 新访客首次访问 aiReply ❌默认关闭 AI 回复 (事件开关可在管理后台 → 系统配置中修改) 各事件 data 字段说明: • newMessage: { sessionId, message, timestamp } • aiReply: { sessionId, reply, provider, timestamp } • contactExtracted: { sessionId, contacts: [...], timestamp } • transferToHuman: { sessionId, reason, timestamp } • newVisitor: { sessionId, visitorId, timestamp } ═══════════════════════════════════════════════════ 三、SaaS 模式数据流(纯机器人模式) ═══════════════════════════════════════════════════ 外部系统 本系统 微信对话开放平台 │ │ │ │── POST 消息 ────────→│ │ │ {token, message} │ │ │ │── AES加密+签名 ───────→│ │ │ POST /v2/bot/query │ │ │←── 加密的回复 ─────────│ │ │ {answer, status} │ │ │ AES解密 │ │←── {reply} ─────────│ │ │ │ │ 说明: • robotMode=knowledge_only + wxAiEnabled=true 时 • 客户消息经 AES-CBC 加密后发送到微信 /v2/bot/query • 微信返回加密回复,本系统解密后返回给外部系统 • 微信命中(FAQ) → 返回微信回复内容 • 微信未命中(NOMATCH) → 返回引导留电话术 ═══════════════════════════════════════════════════ 四、接入示例 ═══════════════════════════════════════════════════ ① 入站:发送消息(curl) curl -X POST https://t2.bjhgyjs.com/api/webhook/incoming \ -H 'Content-Type: application/json' \ -d '{"token":"你的Token","message":"SGS检测","sessionId":"user_001"}' ② 出站:监听事件(Node.js Express 示例) const express = require('express'); const app = express(); app.use(express.json()); app.post('/your-webhook-endpoint', (req, res) => { const { event, data } = req.body; if (event === 'newMessage') { console.log('用户消息:', data.message); return res.json({ ok: true }); } if (event === 'contactExtracted') { console.log('联系方式:', data.contacts); return res.json({ ok: true }); } res.json({ ok: true }); }); app.listen(3000); ③ PHP 示例(入站消息) $ch = curl_init('https://t2.bjhgyjs.com/api/webhook/incoming'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_POSTFIELDS => json_encode([ 'token' => '你的Token', 'message' => 'SGS检测', 'sessionId' => session_id(), ]), CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, ]); $resp = json_decode(curl_exec($ch), true); echo $resp['reply']; ④ JavaScript fetch 示例(入站消息) const res = await fetch('https://t2.bjhgyjs.com/api/webhook/incoming', { method: 'POST', headers: {'Content-Type':'application/json'}, body: JSON.stringify({ token: '你的Token', message: '你好', sessionId: 'user_' + Date.now() }) }); const data = await res.json(); console.log(data.reply);
🔌 WebSocket 接入
外部系统通过 WebSocket 长连接实时通信
连接地址带上 ?token=你的Token
格式:ws(s)://域名:端口?token=你的Token&sessionId=会话ID
📖 WebSocket 数据格式说明 & 接入示例
═══════════════════════════════════════════════════ 一、本系统 WebSocket 接口格式 (外部系统 ↔ 本系统,本系统自定义格式) ═══════════════════════════════════════════════════ 连接地址: ws(s)://t2.bjhgyjs.com/ws?token=你的Token&sessionId=会话ID 客户端 → 服务端(发消息): // 方式1:发送纯文本(推荐,最简单) ws.send("你好"); // 方式2:发送 JSON(可选) ws.send(JSON.stringify({ type: "message", message: "你好" })); 服务端 → 客户端(回复): { "type": "reply", // 消息类型 "reply": "机器人的回复内容", // 回复文本 "sessionId": "会话ID", // 会话标识 "contacts": [] // 提取到的联系方式 } 服务端其他消息类型: • { type: "welcome", message: "欢迎语" } • { type: "push", message: "静默推送话术" } • { type: "pong" } // 心跳响应 ═══════════════════════════════════════════════════ 二、SaaS 模式数据流(纯机器人模式) ═══════════════════════════════════════════════════ 外部系统 本系统 微信对话开放平台 │ │ │ │── ws.send("你好") ──→│ │ │ │── AES加密+签名 ───────→│ │ │ POST /v2/bot/query │ │ │←── 加密的回复 ─────────│ │ │ {answer:"我很好"} │ │←── {type:"reply", │ AES解密 │ │ reply:"我很好"} │ │ │ │ │ 说明: • WebSocket 和 Webhook 走同一个 handleChat() 处理逻辑 • SaaS 模式下两者都会调用微信对话平台 /v2/bot/query • 外部系统无需关心加解密,本系统自动处理 ═══════════════════════════════════════════════════ 三、接入示例 ═══════════════════════════════════════════════════ JavaScript 示例: const ws = new WebSocket( 'wss://t2.bjhgyjs.com/ws?token=你的Token&sessionId=user_001' ); ws.onopen = () => { console.log('已连接'); ws.send('你好'); // 发送消息 }; ws.onmessage = (e) => { const data = JSON.parse(e.data); if (data.type === 'reply') { console.log('机器人回复:', data.reply); // "我很好" } }; ws.onclose = () => console.log('断开'); 心跳保活(重要): // 每 30 秒发送一次,防止连接被断开 setInterval(() => { if (ws.readyState === WebSocket.OPEN) { ws.send('ping'); } }, 30000); // 服务端收到 'ping' 返回 { type: "pong" }
🤖 AI 网关管理
💡 AI 网关说明:
AI 网关接管所有大模型调用,提供多模型路由、故障自动转移、调用重试、用量记账、成本核算、健康检测。
所有改动保存后立即生效(30 秒内缓存自动刷新,也可强制刷新)。
📦 Provider 管理
🛣 路由规则
💰 用量记账
❤️ 健康状态
📅 起始:
截止:
分组:
健康数据每 60 秒自动同步
添加 Provider
添加路由规则
🔧 数据维护
定期归档历史数据到 _archive 表,保持数据库性能。数据不会被删除,而是迁移到归档表中。点击「立即归档」可手动触发。
| 任务名 | 保留期 | 说明 | 操作 |
|---|---|---|---|
| session_messages | 30 天 | 聊天消息记录 | |
| chat_contexts | 30 天 | 会话上下文 | |
| kb_events | 90 天 | KB 运营埋点 | |
| ai_usage | 90 天 | AI 调用记录归档 |
⏰ 定时任务已配置:每天 03:00 自动执行。
📄 上次执行日志:
📄 上次执行日志:
logs/cleanup.log
📋 系统工作流
左侧设置参数,右侧查看完整流程。修改后点击保存即时生效。
⚠️ 高危词检测(多组)
每组高危词对应各自回复,命中即返回该组答案
🎯 知识库匹配阈值
得分 ≥ 阈值 → 直接返回知识库答案;得分 < 阈值 → 带 Top3 去问 AI
⏱️ 最小回复延迟(秒)
设为 0 关闭;设为 3 则回复最快 3 秒,不足则等待补齐
📞 电话客户回复时间(分钟)
机器人话术中「{N} 分钟内回复」的提示时间
🕐 夜班 / 白班时间配置
设置夜班时间段,系统自动判断使用夜班话术还是白班话术(支持跨天,如 18 ~ 9)
~
📵 空号检测(阿里云)
启用后,用户留下11位手机号时自动调用阿里云API检测是否为空号。空号则要求重新输入,其他状态正常继续流程。
📝 工作流话术编辑
编辑机器人各环节的回复话术。{N}自动替换为回复时间,{digits}自动替换为号码
知识库答案中的 {} 会自动替换为用户提到的项目名/标准号/样品名
知识库答案中的 {} 会自动替换为用户提到的项目名/标准号/样品名
变量说明:
{N} = 回复分钟数 |
{digits} = 用户输入的号码 |
{} = 知识库意图占位符
{digits} 自动替换为实际号码
{N} 自动替换为回复分钟数
用户已留电且流程结束后,无论说什么都回复此话术。{N} 自动替换为回复分钟数
用户主动询问能否留微信时,引导用户留下微信号
用户回复内容中未识别到微信号时的再次引导话术
用户发送一串数字但阿里云验证不通过时回复此话术
用户发送非常规位数数字(非9-13位),询问是QQ还是微信
用户发送"标准25469852"等标准+数字模式时回复
📌 固定信息(知识库/工作流中可通过 {变量名} 引用)
在知识库答案或工作流话术中使用以下变量,系统自动替换为实际内容
🔄 完整工作流流程图
👤 用户进入
↓
系统发送 3 条开场白
(自动机器人,无需人工)
(自动机器人,无需人工)
↓
🙋 用户提问检测需求
↓
📎 附件检测
是附件
→
「您刚刚是上传了附件、文件、图片吗?平台上有限制,看不了相关内容,您电话是多少?详细沟通吧」
↓ 不是附件
⚠️ 高危词检测
命中
→
返回该高危词组对应的答案
(不走知识库和AI,直接返回)
(不走知识库和AI,直接返回)
↓ 未命中高危词
💬 微信B工作流
用户问「留微信可以么 / 微信可以么 / 加个微信行么」等
↓
「可以的,您说一下您的微信号,工程师会在15分钟以内联系您。」
↓
有效微信 / QQ / 手机号
→ 完成留联
→ 完成留联
wxid开头
→ 引导换手机号
→ 引导换手机号
未识别
→ 再次引导
→ 再次引导
↓ 不是留微信意图
📚 知识库匹配
全文检索 / 语义检索 / 混合检索
AI 标签扩展匹配
AI 结果重排
🔧 {} 占位符自动替换(标准号/项目名/意图)
🔧 标准号正则识别(GB/HG/JB/ISO等 + 数字)
↓
得分 ≥ 阈值?
是
→
🟢 场景A:KB 精确命中(AI 介入)
注入⭐「必须遵循」指令 + 单条精确命中答案
AI 负责理解用户意图 + 替换{} + 基于KB原文输出
✓ 意图理解更准确(AI 提取)
⚠ 不得自由发挥、不得追加话术
注入⭐「必须遵循」指令 + 单条精确命中答案
AI 负责理解用户意图 + 替换{} + 基于KB原文输出
✓ 意图理解更准确(AI 提取)
⚠ 不得自由发挥、不得追加话术
↓ 得分 < 阈值(未命中)→ 场景B
🧠 调用 AI 大模型生成回答(场景A和B都走这里)
📨 发送给 AI 的完整内容(按顺序):
① AI 角色设定(aiRolePrompt:场景A/B输出规则)
② KB 参考条目(场景A:⭐必须遵循 1条 / 场景B:仅供参考 Top3)
└ 含主问题 + 全部答案 + 相似问题/答案
③ System Prompt 补充指令(引导留电核心目标)
④ 用户画像(意图分类 + 用户关注 + 样品/项目)
⑤ 对话上下文(每日清空,支持多轮连贯)
⑥ 当前用户消息(原话)
② KB 参考条目(场景A:⭐必须遵循 1条 / 场景B:仅供参考 Top3)
└ 含主问题 + 全部答案 + 相似问题/答案
③ System Prompt 补充指令(引导留电核心目标)
④ 用户画像(意图分类 + 用户关注 + 样品/项目)
⑤ 对话上下文(每日清空,支持多轮连贯)
⑥ 当前用户消息(原话)
📜 AI 输出规则(来自 aiRolePrompt):
• 场景A·KB精确命中(带⭐标记)→ 基于KB答案原文输出,替换{}占位符
• 场景B·KB未命中(仅供参考标记)→ 仅回复标准留电话术
「您可以留个联系方式,安排工程师和您详细沟通」
• 禁止"您好/以上就是"等废话;禁止暴露AI身份;禁止追加其他句子
• 场景B·KB未命中(仅供参考标记)→ 仅回复标准留电话术
「您可以留个联系方式,安排工程师和您详细沟通」
• 禁止"您好/以上就是"等废话;禁止暴露AI身份;禁止追加其他句子
⚠️ 降级处理(AI 调用失败时):
• KB 有候选且得分 ≥ 阈值 → 返回 KB 答案
• 否则走
「您可以留个联系方式,安排工程师和您详细沟通」
• 否则走
ruleReply 兜底(已统一为标准留电话术)「您可以留个联系方式,安排工程师和您详细沟通」
↓
🙅 拒绝留电处理(知识库自动匹配)
说不方便 / 有顾虑
不方便、不想留、别打电话、隐私
「是在留联系方式方面不方便吗,您是有什么顾虑可以跟我说一说哦。」
明确拒绝 / 不需要
不需要、算了、不用了、不让弹窗
「没关系,那您后续想了解具体价格和检测方案随时找我哈。」
↑ 用户拒绝时触发,安抚后继续对话
📱 用户留下联系方式
(手机号 / 微信号 / VX / QQ / 邮箱@)
(手机号 / 微信号 / VX / QQ / 邮箱@)
↓
🔍 联系方式验证
手机10位
→
「手机号码不全哦,请输入一下11位正确号码」
手机12/13位
→
「确认号码,不是11位,说一下正确号码」
wxid
→
「微信默认id搜不到,方便发手机号吗?」
含@(邮箱)
→
「确认一下您的邮箱地址,我给备注下」
手机11位 → 空号检测
→
NOT_EXIST → 「系统检测到您留的号码是空号,请重新发正确号码」
正常/关机/忙/未知 等
→
通过,继续流程 ↓
有效微信 / 确认邮箱
→
通过,继续流程 ↓
QQ + 5~12位数字
→
提取QQ号,通过,继续流程 ↓
↓
机器人:「您是个人委托检测还是企业、高校呢?目前存在质量问题吗?」
↓
🏢 企业
「能说下您的企业名称吗?我给备注下,这样方便工程师更精准的为您服务。」
↓
用户回复企业名称
↓
判断时间段 →
🎓 高校 / 🧑 个人 / 其它
判断时间段 →
↓
🕐 时间段判断
🌙 夜班
18:00 ~ 09:00
18:00 ~ 09:00
「您的信息我已经转交给工程师,上午9点将会准时和您联系,请您保持手机通畅!」
☀️ 白班
09:00 ~ 18:00
09:00 ~ 18:00
「您的信息我已经转交给工程师,N分钟内将会准时和您联系,请您保持手机通畅!」
↓
✅ 流程结束
↓
🔄 降级处理阶段
用户已留电且流程结束后,无论说什么都回复固定话术
「好的,您的需求已经提交,工程师N分钟之内回复您。」
↓
⏳ 等待人工跟进
💳 名片模板编辑
管理访客名片的字段,添加或删除自定义字段。字段会显示在访客信息卡片和联系方式收集表单中。