字节笔记本

2026年3月22日

GO-FLY - Go 语言开源在线客服系统


slug: gofly-live-chat topic: go-column

GO-FLY 是一款使用 Go 语言开发的开源在线客服系统,提供完整的实时聊天功能,支持私有化部署。系统基于 Gin 框架 + WebSocket 实时通信 + Vue.js + Element UI 构建,具备轻量、易部署、可二次开发的特点,适用于中小型企业网站和电商平台的在线客服场景。

项目简介

GO-FLY 由开发者 taoshihan1991(程序员老狼)主导开发,是一款功能完整的在线客服系统。与商业客服产品相比,GO-FLY 的核心优势在于完全开源、支持私有化部署,企业可以将客服系统部署在自己的服务器上,确保数据安全和隐私。

该项目的定位是提供一套简洁高效的在线客服解决方案。系统采用前后端分离架构,后端使用 Go 语言提供高性能的 API 服务和 WebSocket 通信,前端使用 Vue.js 和 Element UI 构建响应式的管理界面。同时提供可嵌入网页的客服聊天窗口,访客无需安装任何插件即可与客服人员进行实时对话。

GO-FLY 在 GitHub 上获得了超过 2300 个 Star,社区活跃度较高,有 652 个 Fork,足以说明其在开源社区中受到的关注和认可。

核心特性

实时 WebSocket 聊天

GO-FLY 基于 WebSocket 协议实现客户端与客服端的实时通信,确保消息的低延迟传输。客服人员可以实时接收访客的消息,访客也能即时看到客服的回复。相比传统的 HTTP 轮询方式,WebSocket 在保持长连接的同时,大幅降低了服务器资源的消耗和网络带宽的占用。

多客服支持

系统支持配置多个客服账号,每个客服可以独立管理自己的访客对话。通过聊天链接中的 kefu_id 参数,可以指定特定客服进行接待。这种设计适用于团队协作场景,不同业务线的客服可以分别处理对应渠道的咨询请求。

网页嵌入与弹窗模式

GO-FLY 提供了灵活的接入方式,支持两种集成模式:

  • 直接链接模式:通过 URL 直接进入聊天页面,适用于独立客服页面
  • 弹窗嵌入模式:通过一段 JavaScript 代码嵌入到任意网页中,访客点击浮动按钮即可打开聊天窗口

弹窗嵌入模式特别适合网站集成,只需在网页中引入一段 JS 代码即可完成接入,不会对原有页面结构产生任何影响。

JWT 身份认证

系统使用 jwt-go 库实现用户身份认证机制,确保 API 接口调用的安全性。JWT(JSON Web Token)是一种轻量级的身份认证方案,客服登录后获取 Token,后续请求携带 Token 即可完成身份验证,无需每次都传输用户名和密码。

轻量级架构

GO-FLY 的整体设计追求轻量化,Go 语言编译后的二进制文件体积小、内存占用低,对服务器资源的要求极低。这使得它非常适合资源有限的环境部署,比如小型 VPS 服务器。

数据持久化

使用 GORM 作为 ORM 框架与 MySQL 数据库进行交互,聊天记录、用户信息、配置数据等均持久化存储在数据库中,确保数据不会因服务重启而丢失。项目提供了 import.sql 文件用于数据库初始化。

技术栈

后端技术

  • Go:项目核心语言,提供高并发的网络服务能力
  • Gin:高性能 HTTP Web 框架,处理路由和中间件逻辑
  • WebSocket:实现客户端与服务器之间的全双工实时通信
  • jwt-go:JWT 身份认证库,保障 API 接口安全
  • go.uuid:UUID 生成库,用于唯一标识的生成
  • GORM:Go 语言 ORM 框架,简化数据库操作
  • Cobra:命令行工具框架,用于构建 CLI 命令

前端技术

  • Vue.js:渐进式 JavaScript 框架,构建客服管理界面
  • Element UI:基于 Vue.js 的 UI 组件库,提供丰富的界面组件
  • JavaScript:原生 JS 用于聊天窗口的前端脚本

基础设施

  • MySQL:关系型数据库,版本需 >= 5.5
  • Docker:项目提供 Dockerfile,支持容器化部署

语言分布

项目代码中 Go 占比 32.5%,JavaScript 占比 29.9%,HTML 占比 28.6%,CSS 占比 9.0%。前后端代码比例均衡,体现了前后端分离的架构设计。

安装指南

环境准备

安装 MySQL 数据库(版本 >= 5.5)并创建数据库

sql
create database gofly charset utf8mb4;

配置数据库连接

编辑 config/mysql.json 文件,配置数据库连接信息:

json
{
    "Server": "127.0.0.1",
    "Port": "3306",
    "Database": "gofly",
    "Username": "go-fly",
    "Password": "go-fly"
}

安装 Go 语言环境

bash
# 下载 Go
wget https://studygolang.com/dl/golang/go1.20.2.linux-amd64.tar.gz
tar -C /usr/local -xvf go1.20.2.linux-amd64.tar.gz

# 配置环境变量
echo "PATH=\$PATH:/usr/local/go/bin" >> /etc/profile
echo "PATH=\$PATH:/usr/local/go/bin" >> ~/.bashrc
source /etc/profile

# 验证安装
go version

# 配置 Go 模块代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

源码安装

bash
# 克隆代码
git clone https://github.com/taoshihan1991/go-fly.git
cd go-fly

# 导入数据库表结构
go run go-fly.go install

# 源码运行
go run go-fly.go server

编译二进制文件

bash
go build -o kefu

编译完成后会生成 kefu 可执行文件,可以直接运行而无需 Go 环境。

二进制文件运行

bash
# Linux
./kefu server
# 可选参数: -p 8082 指定端口, -d 后台运行

# Windows
kefu.exe server

关闭服务

bash
killall kefu

快速开始

访问系统

服务启动后默认监听 8081 端口,直接通过浏览器访问 http://your-ip:8081 即可进入管理界面。

如需使用域名访问,可以通过 Nginx 等反向代理工具将域名请求转发到 8081 端口,从而隐藏端口号。

配置反向代理(Nginx 示例)

nginx
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # WebSocket 支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

使用示例

直接链接聊天

通过 URL 直接进入指定客服的聊天页面:

http://127.0.0.1:8081/chatIndex?kefu_id=kefu2

其中 kefu_id 参数用于指定接待的客服人员。

弹窗嵌入聊天

在网页中嵌入以下 JavaScript 代码,页面右下角会出现客服浮动按钮,点击即可弹出聊天窗口:

javascript
(function(a, b, c, d) {
    let h = b.getElementsByTagName('head')[0];
    let s = b.createElement('script');
    s.type = 'text/javascript';
    s.src = c + "/static/js/kefu-front.js";
    s.onload = s.onreadystatechange = function () {
        if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") d(c);
    };
    h.appendChild(s);
})(window, document, "http://127.0.0.1:8081", function(u) {
    KEFU.init({
        KEFU_URL: u,
        KEFU_KEFU_ID: "kefu2",
    });
});

使用时需将 http://127.0.0.1:8081 替换为实际的客服系统地址,将 kefu2 替换为目标客服 ID。

Docker 部署

项目根目录提供了 Dockerfile,可以通过 Docker 快速部署:

bash
# 构建镜像
docker build -t gofly .

# 运行容器
docker run -d -p 8081:8081 --name gofly gofly

建议在生产环境中使用 Docker Compose 管理 GO-FLY 及其依赖(MySQL),确保服务的可靠性和可维护性。

项目链接

  • GitHub 仓库https://github.com/taoshihan1991/go-fly
  • 开源协议:Apache-2.0 License
  • Star 数:2.3k+
  • Fork 数:652+
  • 最新 Release:16 个版本标签
  • 主要贡献者:taoshihan1991(程序员老狼)、mkanako

GO-FLY 是一款实用的开源在线客服系统,适合需要自建客服平台的企业和个人开发者。其轻量级的设计使得部署和维护成本极低,Go 语言的高性能特性也确保了系统在高并发场景下的稳定性。需要提醒的是,该项目声明仅供个人学习测试使用,线上商用需注意合规性。对于需要快速集成客服功能的中小型网站,GO-FLY 是一个值得考虑的开源方案。

分享: