📦zhinianboke / xianyu-auto-reply
← 返回首页
闲鱼自动回复管理系统是一个基于 Python + FastAPI 开发的自动化客服系统,专为闲鱼平台设计。系统通过 WebSocket 连接闲鱼服务器,实时接收和处理消息,提供智能化的自动回复服务。同时集成闲鱼自动发货,自动评价,自动擦亮等功能,实现闲鱼虚拟商品自动化流程。
⚖️ AGPL-3.0🌐 xy.zhinianboke.com📅 创建于 2025-07-24🔄 更新于 2026-10-26
🔗 GitHub Python

📄 仓库 README

在 GitHub 查看 ↗
来自 GitHub 仓库自述文件 · 版权归原作者所有

闲鱼自动回复系统

基于 FastAPI + React + MySQL + Redis + Playwright 的闲鱼多账号自动化系统。

主系统负责账号管理、消息收发、自动回复、自动发货、商品发布与后台管理;promotion 子项目负责返佣账号、选品规则、素材库、发布规则、删除规则和相关修复任务。

🔴 说明

🔴 诚邀各位开发者提交pr,完善系统

🔴 承接各类项目定制,各类项目均可,有需要可联系,另外我菜,不一定都会

🔴 最新源码地址(建议转存)

🔴 我用夸克网盘给你分享了「自动发货」,点击链接或复制整段内容,打开「夸克网盘APP」即可获取。

🔴 /~79313YhCQU~:/

🔴 链接:https://pan.quark.cn/s/af567356cba7

交流群

微信群 QQ群 微信公众号 Telegram 赞赏支持
微信群 QQ群 微信公众号 Telegram 赞赏支持
扫码加好友拉微信交流群 扫码加入QQ交流群 关注公众号发送"最新源码"获取最新代码 扫码加入Telegram群 如果觉得好用,请作者喝杯咖啡

如群二维码过期,请关注公众号获取最新群链接。


功能概览

主系统

模块 说明
多账号管理 支持多个闲鱼账号登录、状态切换、Cookie 维护与登录续期
自动回复 支持文本关键词、图片关键词、默认回复、商品专属回复
AI 回复 支持大模型上下文对话与智能回复
自动发货 支持卡券、虚拟商品、自动补发、发送结果记录
在线聊天 支持会话列表、消息收发、聊天联动
商品发布 支持素材库、地址库、单品发布、批量发布、发布日志
订单与评价 订单拉取、自动评价、求小红花、状态跟踪
商品采集与分销 Goofish 采集、货源管理、对接记录、结算链路
通知与风控 支持消息通知、风控日志、系统反馈与公告管理

返佣子系统

模块 说明
返佣账号 返佣账号登录、状态管理、Cookie 维护
选品规则 按规则抓取候选商品并自动写入素材库
素材库 管理标题、图片、详情、淘口令、短链、库存、发布状态
发布规则 定时发布返佣商品,复用公共发布能力
删除规则 定时删除已发布商品
补偿任务 已发布商品 ID 回写、短链修复、卡券补偿等

技术栈

后端与自动化

技术 说明
FastAPI 主系统与返佣后端 API 服务
SQLAlchemy 2.0 ORM 与数据库访问
MySQL 8.0 主数据存储
Redis 7 缓存、会话与任务辅助
Playwright 登录、Cookie 刷新、发布等浏览器自动化
APScheduler 定时任务调度
Loguru 日志管理

前端

技术 说明
React 18 + TypeScript 主系统与返佣前端
Vite 开发与构建
TailwindCSS 主系统 UI 样式
Zustand 状态管理
Lucide React 图标体系

部署

技术 说明
Docker / Docker Compose 容器化部署
Nginx 前端静态资源与反向代理

系统要求

开发环境

  • Python 3.11+
  • Node.js 18+
  • MySQL 8.0+
  • Redis 6+
  • Chromium / Chrome(Playwright 相关功能)

生产环境

  • Docker 20.10+
  • Docker Compose 2.0+
  • 最低 2 核 CPU / 4GB 内存
  • 推荐 4 核 CPU / 8GB 内存

项目结构

xianyu-auto-reply/
├── backend-web/          # 主 Web API 服务(端口 8089)
├── websocket/            # 闲鱼连接与消息处理服务(端口 8090)
├── scheduler/            # 定时任务服务(端口 8091)
├── common/               # 主系统与返佣系统共享模块
├── frontend/             # 主系统前端(端口 9000)
├── launcher/             # Windows 桌面启动器(Nuitka 打包为 EXE)
├── promotion/
│   ├── backend/          # 返佣后端(端口 8092)
│   └── frontend/         # 返佣前端(端口 9001)
├── scripts/              # CI/CD 与工具脚本
├── docker/frontend/      # 前端 Dockerfile 与 Nginx 配置
├── docker-compose.yml    # 本地源码构建编排
├── deploy.sh             # 一键部署脚本(自动生成远程镜像版 compose)
├── deploy_remote.sh      # 远程 MySQL/Redis 一键部署脚本(自动生成 docker-compose.remote.yml)
├── update.sh             # 一键更新脚本(拉取最新远程镜像)
├── build.sh              # 本地源码全量构建脚本
├── build_frontend.sh     # 单独构建并重启 Frontend
├── build_backend_web.sh  # 单独构建并重启 Backend-Web
├── build_websocket.sh    # 单独构建并重启 WebSocket
├── build_scheduler.sh    # 单独构建并重启 Scheduler
├── EXE打包构建.bat       # Windows 桌面启动器打包脚本
├── 离线依赖打包.bat      # Windows 离线依赖打包脚本
└── README.md

服务职责

服务 默认端口 说明
frontend 9000 主系统前端
backend-web 8089 主系统 API 网关、业务接口
websocket 8090 闲鱼 WebSocket、消息收发、登录与订单联动
scheduler 8091 定时任务执行器
promotion/backend 8092 返佣后端 API
promotion/frontend 9001 返佣前端

架构说明

  • 主系统采用多服务拆分:
  • frontend 负责界面与交互
  • backend-web 负责大部分业务 API
  • websocket 负责闲鱼实时连接、扫码登录、消息处理
  • scheduler 负责自动发货、评价、订单拉取、Cookie 刷新等定时任务
  • common 提供模型、数据库、自检、公共服务与工具
  • 返佣子系统位于 promotion/ 目录,前后端独立,当前不在根目录 Docker Compose 编排内
  • 主系统三个后端服务都提供 /health 健康检查接口
  • WebSocket 在数据库、Redis 和服务配置检查完成后即可提供 HTTP 服务,账号配置加载与连接任务调度在后台错峰执行,不再因账号数量增加而推迟 HTTP 就绪。系统设置通过 /health/ping 检测消息服务存活,并显示账号启动进度或失败原因;调度完成不代表所有账号已连接,实际连接状态以账号管理为准。关闭服务时会先取消未完成的账号调度,再清理账号任务。
  • Docker 依赖链:mysql/redis → backend-web → websocket → scheduler;frontend → backend-web

快速开始

方式一:服务器一键部署(推荐)

服务器已安装 Docker 与 Docker Compose 后,直接执行一键部署脚本即可:

curl -fsSL https://xy-update.zhinianboke.com/deploy.sh | sed 's/\r$//' | bash

该脚本会自动完成部署所需的配置生成、镜像拉取、旧容器清理与服务启动。

更新版本,直接执行一键更新脚本即可:

curl -fsSL https://xy-update.zhinianboke.com/update.sh | sed 's/\r$//' | bash

方式二:克隆仓库部署

git clone https://github.com/zhinianboke/xianyu-auto-reply.git
cd xianyu-auto-reply
bash deploy.sh
  • 首次运行会自动生成 .env 配置文件和 docker-compose.deploy.yml
  • 从阿里云镜像仓库拉取预构建镜像并启动
  • 如果检测到加密版容器会自动清理(保留数据卷)
  • 部署完成后默认访问地址:
  • 前端:http://服务器IP:9000
  • API 文档:http://服务器IP:8089/docs
  • 默认账号:admin / admin123

后续更新:

bash update.sh

方式三:使用远程 MySQL / Redis 部署

当 MySQL 和 Redis 由外部(如云数据库 RDS、独立服务器或已有实例)提供时,可使用 deploy_remote.sh。 该脚本不内置 mysql/redis 容器,仅拉取并启动 4 个应用服务(frontend / backend-web / websocket / scheduler), 数据库连接信息通过 .env.remote 配置。与方式一相同,直接远程拉取脚本执行即可:

# 1) 首次运行:自动生成 .env.remote 后退出,提示填写远程连接信息
curl -fsSL https://xy-update.zhinianboke.com/deploy_remote.sh | sed 's/\r$//' | bash

# 2) 编辑 .env.remote,填写真实的远程地址(勿填 localhost)
#    MYSQL_HOST / REDIS_HOST 等
vim .env.remote

# 3) 再次运行:校验配置 → 自动生成 docker-compose.remote.yml → 拉取镜像 → 启动
curl -fsSL https://xy-update.zhinianboke.com/deploy_remote.sh | sed 's/\r$//' | bash

已克隆仓库的也可改用本地脚本:bash deploy_remote.sh(首次生成配置后退出,填好 .env.remote 再次执行)。

  • 首次运行自动生成 .env.remote,每次运行自动生成 docker-compose.remote.yml,均不影响根目录原有的 .env / docker-compose.yml / docker-compose.deploy.yml
  • 容器名与主套保持一致(xianyu-backend-web / xianyu-websocket / xianyu-scheduler / xianyu-frontend),与方式二/方式四属于同一套部署,二者只需选其一,不要同时启动
  • 远程 MySQL 需提前创建好数据库(默认 xianyu_data)并授权部署机 IP 远程访问,应用启动时会自动建表与补齐字段
  • 远程 Redis 密码可以为空:在 .env.remote 中填写 REDIS_PASSWORD= 即按无密码连接;有密码时填写实际密码。未定义 REDIS_PASSWORD 时使用默认密码 xianyu@2026,显式空值不会回退到默认密码
  • 建议远程 MySQL 持久设置 max_connect_errors=100000;若出现错误码 1129,需在数据库服务器执行 FLUSH HOSTS 解除主机封锁
  • 若远程库/缓存就在宿主机上,请使用 host.docker.internal 或宿主机内网 IP,不要填 localhost / 127.0.0.1

方式四:本地源码 Docker 构建

bash build.sh rebuild

常用命令:

命令 说明
bash build.sh rebuild 删除旧容器与镜像,重新构建并启动
bash build.sh start 启动服务
bash build.sh stop 停止服务
bash build.sh restart 重启服务
bash build.sh logs 查看实时日志
bash build.sh status 查看服务状态

单独重建某个服务(不影响其他服务):

bash build_frontend.sh      # 重建前端
bash build_backend_web.sh   # 重建 Backend-Web
bash build_websocket.sh     # 重建 WebSocket
bash build_scheduler.sh     # 重建 Scheduler

方式五:源码本地开发

1. 准备基础服务

可以使用本机 MySQL / Redis,也可以仅用 Docker 启动基础设施:

docker compose up -d mysql redis

2. 创建服务配置

主系统常用 .env 配置示例:

ENVIRONMENT=development
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=xianyu_data
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
REDIS_POOL_SIZE=800
REDIS_SOCKET_TIMEOUT=5
REDIS_SOCKET_CONNECT_TIMEOUT=3
REDIS_SOCKET_KEEPALIVE=true
REDIS_SOCKET_KEEPALIVE_IDLE=60
REDIS_SOCKET_KEEPALIVE_INTERVAL=10
REDIS_SOCKET_KEEPALIVE_COUNT=3
REDIS_HEALTH_CHECK_INTERVAL=30
REDIS_PROTOCOL=2
REDIS_STARTUP_MAX_RETRIES=5
REDIS_STARTUP_RETRY_BASE_DELAY=1
REDIS_STARTUP_RETRY_CAP_DELAY=10
CORS_ORIGINS=*
BACKEND_WEB_PORT=8089
WEBSOCKET_PORT=8090
SCHEDULER_PORT=8091
WEBSOCKET_SERVICE_URL=http://127.0.0.1:8090
SCHEDULER_SERVICE_URL=http://127.0.0.1:8091
BACKEND_WEB_SERVICE_URL=http://127.0.0.1:8089
DB_POOL_SIZE=800
DB_MAX_OVERFLOW=60
DB_POOL_TIMEOUT=30
DB_POOL_RECYCLE=1800
DB_POOL_PRE_PING=true
DB_POOL_USE_LIFO=true
DB_CONNECT_TIMEOUT=10
STATIC_DIR=static
TZ=Asia/Shanghai

各服务的数据库连接池容量统一为 800,连接按需建立。各服务 .env.example、Docker 和本地启动器保留不同的溢出额度:

服务 DB_POOL_SIZE DB_MAX_OVERFLOW 单进程峰值
Backend-Web 800 60 860
WebSocket 800 150 950
Scheduler 800 30 830
推广后端(可选) 800 20 820

三个主服务峰值合计为 2640,启用推广后端后为 3460。Docker 的 MYSQL_MAX_CONNECTIONS 默认设为 4000;远程或本机 MySQL 需自行将 max_connections 配置到足够容量。多进程、多副本部署时,应按全部进程的峰值总和额外预留管理连接。

已有部署的 .env 不会被脚本覆盖,请同步检查服务目录中的 DB_POOL_SIZE,以及 Docker 部署目录中的 BACKEND_DB_POOL_SIZE、WEBSOCKET_DB_POOL_SIZE、SCHEDULER_DB_POOL_SIZE 和 MYSQL_MAX_CONNECTIONS。配置更新后需重启对应服务才能生效。

3. 启动主系统后端

# Backend-Web 服务
cd backend-web
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python -m patchright install chromium
python main.py
# WebSocket 服务
cd websocket
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python -m patchright install chromium
python main.py
# Scheduler 服务
cd scheduler
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python main.py

4. 启动前端

cd frontend
npm install
npm run dev

5. 启动返佣子系统

# 返佣后端
cd promotion/backend
pip install -e .
python main.py

# 返佣前端
cd promotion/frontend
npm install
npm run dev

配置说明

关键环境变量

变量 说明
MYSQL_HOST / MYSQL_PORT / MYSQL_USER / MYSQL_PASSWORD / MYSQL_DATABASE MySQL 连接
REDIS_HOST / REDIS_PORT / REDIS_PASSWORD / REDIS_DB Redis 连接
REDIS_POOL_SIZE / REDIS_SOCKET_TIMEOUT / REDIS_SOCKET_CONNECT_TIMEOUT / REDIS_SOCKET_KEEPALIVE / REDIS_SOCKET_KEEPALIVE_IDLE / REDIS_SOCKET_KEEPALIVE_INTERVAL / REDIS_SOCKET_KEEPALIVE_COUNT / REDIS_HEALTH_CHECK_INTERVAL / REDIS_PROTOCOL / REDIS_STARTUP_MAX_RETRIES / REDIS_STARTUP_RETRY_BASE_DELAY / REDIS_STARTUP_RETRY_CAP_DELAY Redis 连接池、超时、Keepalive、健康检查和启动重试配置
JWT_SECRET_KEY JWT 密钥,由数据库统一托管(首次启动自动生成并持久化),无需手动配置
INTERNAL_API_TOKEN 服务间 /internal API 共享令牌,可留空;首次启动自动生成并持久化到数据库
BACKEND_WEB_PORT / WEBSOCKET_PORT / SCHEDULER_PORT 各服务端口
WEBSOCKET_SERVICE_URL / SCHEDULER_SERVICE_URL / BACKEND_WEB_SERVICE_URL 服务间调用地址
FRONTEND_SERVICE_URL 公开状态接口探测前端的内部地址;Docker 默认 http://frontend:80,本机默认 http://127.0.0.1:9000;自定义端口或跨主机部署时覆盖
VITE_BACKEND_SERVICE_URL Vite 开发/预览环境的后端代理目标,可回退到 BACKEND_WEB_SERVICE_URL;默认 http://127.0.0.1:8089
BACKEND_WEB_PUBLIC_URL 对外访问地址,用于生成文件 URL
CORS_ORIGINS CORS 白名单
BROWSER_HEADLESS Playwright 是否无头运行

公开服务状态接口

使用前端访问地址请求 GET /api/v1/public/status,无需登录或携带用户令牌。例如前端地址为 https://你的域名 时,请求 https://你的域名/api/v1/public/status;本机默认请求 http://127.0.0.1:9000/api/v1/public/status。Docker Nginx、Vite 开发/预览环境和桌面启动器均提供该入口。

尾部带斜杠的 GET /api/v1/public/status/ 也直接返回相同 JSON 并共享限流额度,不跳转到后端地址。Docker Compose 及部署、更新脚本均透传 FRONTEND_SERVICE_URL;需要自定义时在部署 .env 中填写后端能够访问的前端内部地址

📈 近 7 天 Star 趋势

每日新增 Star(柱)与累计 Star(线)· 数据来自 GitHub

🏆 排名变化趋势

在各榜单中的排名历史(数字越小越靠前)

📋 历史上榜记录

每次快照的详细数据
日期 榜单 排名 周期新增 总 STAR