闲鱼自动回复 开发文档
这个项目是什么
xianyu-auto-reply 是面向闲鱼(Goofish)个人卖家的自动回复系统:通过 WebSocket 长连接接入闲鱼消息通道,实时接收买家的商品咨询与议价消息,按关键词回复 / AI 回复 / 默认话术自动作答,并附带一个本地 Web 管理控制台(商品列表、回复记录、用户管理、日志管理)。
和浏览器脚本类方案不同,它的核心是「协议接口 + 长连接」:用 wss-goofish.dingtalk.com 的消息网关 + mtop 接口配合签名/解密工具函数收发消息,Cookie 保活与 token 刷新都自动化,7×24 小时跑在自己服务器上。部署形态有源码直跑、Docker(docker-compose.yml / Dockerfile-cn 国内源版)+ Nginx。
技术栈与仓库结构
| 领域 | 技术 |
|---|---|
| 语言与框架 | Python 3.11+、FastAPI、uvicorn、pydantic |
| 消息通道 | websockets(闲鱼消息网关长连接 + 心跳)、aiohttp / httpx / requests |
| AI 回复 | openai SDK(OpenAI 兼容接口) |
| 浏览器自动化 | Playwright(扫码登录、页面操作辅助) |
| 协议工具 | PyExecJS、blackboxprotobuf、utils/xianyu_utils.py(签名、解密、设备指纹) |
| 认证与安全 | PyJWT、passlib(bcrypt)、cryptography(控制台用户体系) |
| 数据与日志 | SQLite(db_manager.py)、pandas/openpyxl 导出、loguru 轮转日志 |
| 部署 | Docker / Dockerfile-cn、docker-compose(-cn)、Nginx、entrypoint.sh |
xianyu-auto-reply/
├── Start.py # 启动入口:CookieManager + 后台线程跑 FastAPI,主协程保持运行
├── XianyuAutoAsync.py # 核心:WebSocket 长连接、心跳、token 刷新、cookie 保活、自动回复
├── reply_server.py # FastAPI 管理服务(静态控制台 + 接口,HTTPBearer 鉴权、邮箱验证码注册/登录)
├── ai_reply_engine.py # AI 回复引擎(openai 兼容接口)
├── cookie_manager.py # Cookie 初始化与保活
├── db_manager.py # SQLite 数据层
├── file_log_collector.py # 文件日志收集
├── config.py / global_config.yml # 配置加载与全局配置
├── utils/ # xianyu_utils(签名/解密/设备ID 等)等工具
├── secure_*.py # 授权/完整性校验相关脚本(加密与解密版)
├── static/ # Web 控制台:login/register/index/item_search/user_management/log_management…
├── Dockerfile / Dockerfile-cn / docker-compose.yml / docker-compose-cn.yml / docker-deploy.{bat,sh}
├── entrypoint.sh / nginx/
└── requirements.txt / CHANGELOG.md / README.md
快速开始
git clone <本仓库地址>
cd xianyu-auto-reply
pip install -r requirements.txt
playwright install chromium
playwright install-deps chromium # Linux 需要
python Start.py
Start.py 按 config.py 的 COOKIES_LIST 初始化账号任务,在后台线程启动 FastAPI:默认绑定 0.0.0.0:8080(API_HOST / API_PORT 环境变量可覆盖,global_config.yml 的 AUTO_REPLY.api 配置优先)。浏览器打开 http://localhost:8080/login.html(首次先 register.html 注册),控制台页面在 static/。
配置项说明(global_config.yml 摘要)
| 配置 | 默认 | 说明 |
|---|---|---|
API_ENDPOINTS |
passport / h5api mtop 接口 | 登录态检查、消息 headinfo、token 获取 |
APP_CONFIG |
api_version / app_key / platform web | mtop 请求参数 |
AUTO_REPLY.enabled |
true | 自动回复总开关 |
AUTO_REPLY.default_message |
含 {send_user_name} 的问候话术 |
无命中关键词时的兜底回复 |
AUTO_REPLY.api |
enabled false、host 0.0.0.0、port 8080、timeout 10 | 本地 Web 服务;回复走 AI 或关键词而非 API 回复 |
ITEM_DETAIL.auto_fetch |
enabled true、外部 API selfapi.zhinianboke.com/api/getItemDetail、并发 3、timeout 30 |
商品详情自动获取(可关) |
COOKIES / DEFAULT_HEADERS |
闲鱼 Cookie 与浏览器 UA/Referer 头 | 登录态来源 |
HEARTBEAT_INTERVAL / HEARTBEAT_TIMEOUT |
15 / 5(秒) | WebSocket 心跳 |
TOKEN_REFRESH_INTERVAL / TOKEN_RETRY_INTERVAL |
36000 / 1800(秒) | token 定时刷新与失败重试 |
COOKIE_KEEPALIVE_INTERVAL |
7200(秒,每 2 小时) | 保活请求延长 Cookie 有效期 |
MESSAGE_EXPIRE_TIME |
300000(毫秒) | 消息过期时间 |
MANUAL_MODE |
enabled false、timeout 3600、toggle_keywords [] | 手动模式:关键词切换,进入人工接管 |
LOG_CONFIG |
INFO、每天轮转、保留 7 天、zip 压缩 | loguru 日志配置 |
工作原理
Start.py读取配置与 Cookie,初始化CookieManager、db_manager,后台线程启动reply_server(FastAPI 提供控制台与管理接口)。XianyuAutoAsync.py主协程建立到闲鱼消息网关的 WebSocket 长连接,按HEARTBEAT_INTERVAL发心跳;utils/xianyu_utils.py负责签名(generate_sign)、解密(decrypt)、设备指纹(generate_device_id/generate_mid/generate_uuid)与 Cookie 转换(trans_cookies)。- 收到消息后按优先级匹配:手动模式开关词 → 关键词回复 → AI 回复(
ai_reply_engine,openai 兼容接口)→default_message兜底;结果入库并写日志。 - 定时任务负责 token 刷新(
TOKEN_REFRESH_INTERVAL,失败 30 分钟重试)与 Cookie 保活(每 2 小时)。 - 控制台(
static/index.html等)通过reply_server.py的接口管理商品、回复记录、用户与日志,接口走 HTTPBearer 鉴权、注册/登录带邮箱验证码。
二次开发要点
- 平台接口会变:闲鱼 mtop 接口、签名算法与消息网关都可能调整,
utils/xianyu_utils.py与global_config.yml的API_ENDPOINTS是排障第一站;改动后用真实 Cookie 验证登录态检查与收发链路。 - 心跳与超时:心跳间隔 15s / 超时 5s、token 10 小时刷新、Cookie 2 小时保活是现网跑通的参数,调整前先理解注释里的历史原因(如 token 原 20 小时太长、失败重试原 2 小时太长)。
- 回复链路分层:新回复策略加在
XianyuAutoAsync的匹配链路上(开关词 → 关键词 → AI → 兜底),不要绕过手动模式(MANUAL_MODE)——它是人工接管的逃生门。 - AI 引擎:
ai_reply_engine.py走 OpenAI 兼容接口,可对接任意兼容网关;提示词里应带上商品上下文(ITEM_DETAIL)与卖家语气设置。 - 控制台安全:
reply_server.py默认绑0.0.0.0,公网暴露前务必走 Nginx(仓库自带nginx/配置)并改注册/登录策略,或只在内网使用;secure_*.py是授权/完整性校验脚本,二次分发前先确认授权条款。 - 日志排障:
LOG_CONFIG每天轮转、保留 7 天、zip 压缩;file_log_collector.py负责文件日志收集,反馈问题时附带近期日志。 - Docker:国内环境用
Dockerfile-cn+docker-compose-cn.yml(镜像源),entrypoint.sh负责容器内启动。
更新记录(摘自 CHANGELOG.md)
- v1.0.1:界面优化,提升美观度与用户体验;修复已知问题,提高系统稳定性。
- v1.0.0(预览版):全新界面设计,功能大幅增强;增加试用功能(可试用 3 次);注册码授权体系(1 元/天 或 10 元/永久,购买联系 README 中的微信);优化整体用户体验。
相关链接
- Gitea 仓库:http://127.0.0.1:3200/jinghui/xianyu-auto-reply
- 技术博客:www.88531.cn | QQ 群:1037854503
- 许可:MIT 协议开源,仅供学习参考;使用自动化工具有平台风控与账号风险,请遵守闲鱼规则