智能客服

¥1,288.00 ¥1,688.00
无货
AI 驱动的智能客服,支持实时聊天、知识库和工单系统
加入收藏

ServiceBot - InnoShop 智能客服插件

基于 Laravel AI SDK 的全功能智能客服系统,支持 AI 自动回复、实时通信、知识库 RAG、工单流转、客服工作台。

功能特性

  • 🤖 AI 自动回复 — 基于 Laravel AI SDK,支持 GLM、DeepSeek、OpenAI 等多模型
  • 💬 实时通信 — Laravel Reverb WebSocket,消息即时送达
  • 📚 知识库 RAG — AI 回复时自动检索知识库,回答更精准
  • 🎫 工单系统 — AI 无法解决时自动创建工单转人工
  • 👨‍💼 客服工作台 — 会话管理、接管、转接、内部备注
  • 快捷回复 — 预设常用回复,提高客服效率
  • 满意度评价 — 会话结束后客户可评分
  • 🌐 前台 Widget — 嵌入式聊天组件,访客无需登录

系统要求

  • InnoShop Factory(Laravel 12)
  • PHP 8.2+
  • Redis(队列驱动)
  • Laravel Reverb(WebSocket 服务,可选)

安装

1. 安装插件

# 克隆到插件目录
cd plugins
git clone git@innoshop.work:splugins/ServiceBot.git ServiceBot

2. 运行数据库迁移

php artisan migrate --path=plugins/ServiceBot/Database/migrations

迁移会创建以下数据表:

表名 说明
servicebot_conversations 会话记录
servicebot_messages 聊天消息
servicebot_tickets 工单
servicebot_kb_categories 知识库分类
servicebot_kb_articles 知识库文章
servicebot_quick_replies 快捷回复
servicebot_notes 内部备注
servicebot_ratings 满意度评价

3. 在后台启用插件

进入 后台 → 插件管理,找到 ServiceBot,点击启用。

4. 配置 .env(可选,启用实时通信)

BROADCAST_CONNECTION=reverb
QUEUE_CONNECTION=redis

REVERB_APP_ID=servicebot
REVERB_APP_KEY=your-key
REVERB_APP_SECRET=your-secret
REVERB_HOST=127.0.0.1
REVERB_PORT=8080
REVERB_SCHEME=http

启动 Reverb 服务:

php artisan reverb:start

启动队列Worker:

php artisan queue:work redis --tries=3

使用方法

后台配置

进入 后台 → 客户 → 智能客服

配置项 说明 默认值
enabled 启用插件 关闭
ai_enabled 启用 AI 自动回复 关闭
auto_escalation AI 无法回答时自动转人工 关闭
welcome_message 客户首次打开聊天的欢迎语 "Hello! How can I help you today?"

AI 模型配置

ServiceBot 使用系统默认 AI 配置(不再需要独立 API Key)。在 后台 → 设置 → AI 工具 中配置:

  1. 选择默认模型(如 GLM、DeepSeek)
  2. 填入对应 API Key
  3. ServiceBot 自动使用配置的模型

前台聊天 Widget

插件启用后,前台页面自动注入右下角聊天气泡。访客点击即可开始对话:

  1. 点击气泡 → 展开聊天窗口
  2. 访客发送消息 → 创建新会话
  3. AI 自动回复(需开启 ai_enabled
  4. AI 无法回答 → 自动创建工单转人工(需开启 auto_escalation

客服工作台

进入 后台 → 客户 → 智能客服

  • 左侧:会话列表(按未读/时间排序)
  • 右侧:聊天区域,可直接回复客户
  • 操作
    • 接管:客服认领会话
    • 转接:转给其他客服
    • 关闭:结束会话
    • 备注:添加内部备注(客户不可见)
    • 快捷回复:使用预设模板快速回复

知识库管理

进入 后台 → 客户 → 智能客服 → 知识库

  1. 创建分类(如"退换货政策"、"物流查询")
  2. 添加文章,填写标题和内容
  3. AI 回复时会自动检索相关文章作为上下文

API 接口

前台接口(无需认证)

方法 路径 说明
POST /api/servicebot/chat/conversations 创建/获取会话
GET /api/servicebot/chat/conversations/{id} 获取会话详情
POST /api/servicebot/chat/messages 发送消息
GET /api/servicebot/chat/messages 获取消息列表
POST /api/servicebot/chat/ratings 提交满意度评价

后台接口(需管理员认证)

方法 路径 说明
GET /panel/servicebot/conversations 会话列表
GET /panel/servicebot/conversations/{id} 会话详情
POST /panel/servicebot/conversations/{id}/claim 接管会话
POST /panel/servicebot/conversations/{id}/close 关闭会话
POST /panel/servicebot/conversations/{id}/transfer 转接会话
POST /panel/servicebot/conversations/{id}/messages 发送消息
GET /panel/servicebot/conversations/{id}/notes 备注列表
POST /panel/servicebot/conversations/{id}/notes 添加备注
GET /panel/servicebot/conversations/quick-replies 快捷回复列表
POST /panel/servicebot/conversations/quick-replies 创建快捷回复
DELETE /panel/servicebot/conversations/quick-replies/{id} 删除快捷回复
GET /panel/servicebot/conversations/stats 统计数据
GET /panel/servicebot/conversations/agents 在线客服列表

数据模型

Conversation (会话)
├── hasMany Message (消息)
├── hasMany Ticket (工单)
├── hasMany Note (内部备注)
├── hasOne Rating (满意度评价)
└── belongsTo Customer (客户)

KbCategory (知识库分类)
└── hasMany KbArticle (知识库文章)

QuickReply (快捷回复)

目录结构

ServiceBot/
├── Boot.php                          # 插件启动引导
├── fields.php                        # 插件配置定义
├── Controllers/
│   ├── Admin/
│   │   ├── AgentController.php       # 客服操作(接管/关闭)
│   │   ├── ConversationController.php# 会话管理
│   │   ├── KbController.php          # 知识库管理
│   │   └── TicketController.php      # 工单管理
│   └── Frontend/
│       └── ChatController.php        # 前台聊天 API
├── Models/
│   ├── Conversation.php
│   ├── Message.php
│   ├── Ticket.php
│   ├── KbCategory.php
│   ├── KbArticle.php
│   ├── QuickReply.php
│   ├── Note.php
│   └── Rating.php
├── Services/
│   ├── AIService.php                 # AI 调用封装
│   ├── KbService.php                 # 知识库检索
│   └── TicketService.php             # 工单逻辑
├── Jobs/
│   └── AIReplyJob.php                # AI 异步回复(Queue Job)
├── Events/
│   ├── NewMessage.php                # 新消息广播
│   ├── NewConversation.php           # 新会话广播
│   ├── NewTicket.php                 # 新工单广播
│   ├── ConversationClaimed.php       # 会话被接管广播
│   └── ConversationClosed.php        # 会话关闭广播
├── Routes/
│   ├── root.php                      # 前台 API 路由
│   ├── panel.php                     # 后台管理路由
│   └── channels.php                  # WebSocket 频道
├── Public/
│   ├── js/
│   │   ├── chat-widget.js            # 聊天窗口组件
│   │   ├── servicebot-widget.js      # Widget 初始化
│   │   └── websocket.js              # WebSocket 连接
│   └── css/
│       └── chat-widget.css           # Widget 样式
├── Views/
│   ├── panel/                        # 后台页面
│   └── admin/                        # 管理页面
├── Database/
│   └── migrations/                   # 数据库迁移
└── Resources/
    └── lang/                         # 多语言

工作流程

访客发送消息
    ↓
ChatController::sendMessage()
    ↓
保存 Message 到数据库
    ↓
┌─ broadcast(NewMessage) → Reverb → 客服后台实时收到
│
└─ dispatch(AIReplyJob) → Queue
       ↓
   AIReplyJob::handle()
       ↓
   ┌─ KbService::search() → 检索知识库相关内容
   │
   └─ CustomerServiceAgent → 调用 AI 生成回复
       ↓
   保存 AI 回复 Message
       ↓
   broadcast(NewMessage) → 前台 + 客服后台收到
       ↓
   如果需要转人工 → 创建 Ticket + broadcast(NewTicket)

开发路线

Phase 内容 状态 进度
Phase 1 实时通信 + 前台 Widget + 客服后台 ✅ 基本完成 95%
Phase 2 AI 回复 + 知识库 RAG + 自动转人工 ✅ 基本完成 90%
Phase 3 快捷回复 + 会话分配 + 满意度评价 ✅ 基本完成 85%
Phase 4 数据报表(响应时间、AI 解决率、满意度) ⬜ 未开始 5%

Phase 1:实时通信 + 前台 Widget + 客服后台(95%)

✅ 已完成:

  • 数据模型(8 个):Conversation, Message, Ticket, KbCategory, KbArticle, QuickReply, Rating, Note
  • 数据库迁移(10 个):核心表 + 扩展字段(claimed, visitor_ip, user_agent, 全文索引)
  • Boot.php:Panel 菜单注册、Broadcasting channels 注册、前台 Widget 自动注入
  • 路由:panel.php(客服后台 20+ 路由)、root.php(前台 API 5 条)、channels.php(2 个 Broadcasting 频道)
  • ChatController(231 行):前台完整聊天 API(创建会话、发消息、获取消息、Sanctum Token 认证、关闭会话后评价)
  • ConversationController(220 行):客服后台完整管理(列表、统计、认领、关闭、转接、释放给 AI、发消息、备注管理)
  • AgentController:客服管理
  • KbController:知识库分类 + 文章 CRUD
  • TicketController:工单管理
  • 前台 Widget JS(383 行):完整聊天 UI(marked.js 渲染 Markdown、WebSocket 实时消息、气泡式对话界面)
  • 后台视图(6 个):会话管理、知识库(分类+文章)、设置、工单
  • 插件设置(fields.php):AI 开关、自动转人工、欢迎语、Widget 颜色、调试日志
  • Events(5 个):NewMessage, NewConversation, ConversationClaimed, ConversationClosed, NewTicket

⬜ 待完善:

  • Widget 移动端样式优化
  • 多语言支持(前台 Widget 目前仅英文)

Phase 2:AI 回复 + 知识库 RAG + 自动转人工(90%)

✅ 已完成:

  • AIReplyJob(225 行):完整 AI 回复链路
    • 接入 InnoShop AIService + CustomerServiceAgent
    • RAG:先查知识库构建上下文,再送 AI
    • AI Tools:6 个工具(QueryOrders, QueryShipping, QueryCart, SearchProducts, CheckStock, QueryCoupons)
    • 上下文构建:客户订单历史 + 商品列表自动注入
    • 队列异步处理,3 次重试,backoff 策略
    • 调试日志开关
  • KbService:知识库搜索(LIKE + 全文索引支持)+ RAG 上下文构建
  • 自动转人工:AI 回复中包含特定关键词时自动创建 Ticket
  • 自动升级检测(中英文关键词匹配)

⬜ 待完善:

  • 全文索引搜索优化(MySQL FULLTEXT 分词)
  • AI 提示词模板管理(后台可编辑)
  • 多轮对话上下文窗口优化

Phase 3:快捷回复 + 会话分配 + 满意度评价(85%)

✅ 已完成:

  • QuickReply 模型 + 迁移:分类、标题、内容
  • ConversationController 快捷回复 CRUD:listQuickReplies, storeQuickReply, deleteQuickReply
  • 会话认领(claim)+ 释放回 AI(releaseToAi)+ 转接(transfer)
  • 会话备注(Note):addNote, listNotes
  • 满意度评价(Rating)模型 + 迁移 + ChatController.submitRating API
  • 客服列表 API(listAgents)供转接使用
  • stats() 接口:total/active/pending/closed 统计

⬜ 待完善:

  • 快捷回复前台 UI 组件(后端 API 已就绪)
  • 会话自动分配策略(轮询/最少会话数)
  • 满意度评价前台 UI(关闭会话后弹出评价)
  • 满意度统计汇总 API

Phase 4:数据报表(5%)

✅ 已完成:

  • ConversationController.stats() 基础统计(total/active/pending/closed)

⬜ 待开发:

  • 响应时间报表(首次回复时间、平均回复时间)
  • AI 解决率统计(会话中 AI 回复后未转人工的比例)
  • 满意度报表(评分分布、趋势)
  • 客服工作量报表(每个客服的会话数、回复数)
  • 会话来源分析(Widget / API / 其他)
  • 数据可视化(图表)
  • 报表导出(CSV/Excel)

License

OSL-3.0


Copyright (c) Since 2024 InnoShop - All Rights Reserved