未来洞派单助手 / 开发文档

未来洞派单助手

把接下来的工作,
交给你。

从当前代码到线上运行,从订单复制到企微建群。
这份文档说明它如何工作,也留下继续维护的入口。

当前交接基线
代码来源
线上服务器实际运行快照
网页更新
2026年11月13日
客户端外壳
Electron · v1.3.0
服务入口
onlygay.cn

接待效率优先,保持轻量。
不做退款、金额核算和订单状态流转。

第一次接手,按这个顺序

  1. 了解当前功能先确认软件边界
  2. 读架构与部署找到代码和数据
  3. 核对外部平台确认企微实例与权限
  4. 运行只读测试确认后再做变更

产品说明

让客服更快完成一次接待

这是在线客服辅助工具,桌面客户端加载线上页面。核心链路是查找订单、复制信息、补齐客户回复、生成群名、创建企微群与复制二维码。

接待列表

搜索、翻页、待刷新计数、固定表头、新订单60秒高亮;完整订单号单独复制,时间按钮打开补全窗口。

订单快捷复制

跑刀、撞车、护航、任务、租号。工卡、挂坠、保险箱等归任务;类型依商品识别,未识别内容高亮提醒。

客户信息补全

粘贴乱序聊天,规则与AI整理字段;缺失留空,保留原文证据、冲突提示、手改锁定。结构化补全字段和自定义群名自动存到服务器,所有客户端共享;聊天原文及未同步备份保留本机。

群名与图片

按订单类型生成可编辑群名,推荐须知图片;保留客服主动复制;已登记订单群可在客户入群后自动发送补全信息及对应须知。租号使用专属模板及租号须知图,不涉及押金核算。

企微群聊

后台调用青鸾,持久化每一步进度;群主按软件账号稳定ID映射,完成后列表显示绿色二维码复制按钮。

桌面与管理

12套主题色漂浮粒子反馈与轻纹理,可单独关闭;12套专属品牌图案和互动小伙伴,Y2K保留猫猫;按北京时间显示当前班次剩余时间,跨午夜自动切班;Y2K猫猫、猫爪点击特效与可爱挂件;桌面抽屉避开标题栏,补全信息自动共享并保护冲突,弹窗固定标题和复制按钮、内部滚动,订单表格采用稳定绘制、滚动时降载并于停止后恢复;圆角外壳、北京时间和三色班次、应用内更新;账号编辑、电脑绑定、公告、计算器、图片与设置。

历史订单定期清理:3 / 10 / 20天,优先10或20天。无离线单机版、不提供业务数据导出。旧代码中保留的停用模块不代表当前产品支持。

系统地图

三个部分,一条在线链路

Windows 客户端
Electron + 设备签名
›网页与 Node 服务
Express + SQLite
›外部能力
MiMo / 青鸾
位置职责
client/public/app.js接待页面、类型识别、补全窗口、群名、复制反馈和企微交互
client/public/styles.css主题、布局、响应式样式、滚动条与按钮
server/src/routes/orders.js订单接入、列表搜索、待刷新统计、二维码可用标记
server/src/routes/completion.jsMiMo字段整理、证据约束、限流和输出校验
server/src/qingluan.js固定平台请求、大整数保真、成员与群主映射、二维码解析
server/src/routes/wecom-groups.js建群进度、重复保护、续跑和群配置确认
server/src/routes/wecom-config.js管理员保存青鸾配置与连接检查
server/src/middleware/device.js每请求设备签名与重放保护
desktop-shell/src/桌面外壳、更新、设备身份与加密记住登录
server/src/routes/handoff.js本交接中心专用授权、账号清单、受限测试与源码下载

数据库主要关注 users、orders、wecom_group_jobs。订单号、角色ID和企微长整数不能经过 JavaScript Number 取整;存取时保留完整字符串,请求要求整数时按原始整数编码。

运行手册

先备份,再发布

应用目录/opt/dispatch
后台 / 端口systemd: dispatch / 127.0.0.1:3789
数据库/opt/dispatch/data/dispatch.db,SQLite WAL,使用数据库backup方法备份
网页/opt/dispatch/client/public
本交接页/var/www/xuqiu,由Nginx独立提供
发布备份/opt/dispatch-release-backups,访问需服务器权限
更新分发/downloads/latest.json、latest.yml 与安装包

本地启动

cd server
npm ci
# 安装 Node.js 22 或更高版本
# 开发模式首次启动会初始化独立的数据目录
node src/index.js

生产环境需设置 NODE_ENV=production、随机 JWT_SECRET,按需设置 DISPATCH_DATA_DIR、HOST、PORT。配置示例随源码交付。桌面构建参见 desktop-shell/package.json 与项目已有构建脚本。

  1. 核对目标文件SHA256,确认不是覆盖其他人的新修改。
  2. 一致性备份SQLite,保存原代码与账号指纹。
  3. 先校验语法与回归测试,再替换文件并重启服务。
  4. 检查 /api/health、公开资源哈希、登录和接待页面。
  5. 失败时恢复代码,保留新产生的业务数据;不要直接用旧数据库覆盖线上。
网页更新通过重新加载生效;外壳功能变更需发布客户端安装包和更新索引。健康接口遗留版本号不代表实际桌面版本,交接以快照与文件哈希为准。

受保护的交接资料

全部软件账号,都在这里

实时列出所有账号,包括已停用账号。显示完整账号名称、角色、绑定电脑名称与企微成员映射;不修改密码、不解除绑定。

管理员授权后读取
ID / 登录账号姓名角色 / 状态绑定电脑企微成员ID
账号资料未加载。点击上方按钮并使用现有管理员账号解锁。

客服渠道账号

管理员解锁后加载渠道账号。

密码使用不可逆哈希保存,无法输出原密码。本页不展示密码哈希、设备身份密钥或会话令牌。若需迁移全部账号,请由服务器维护者一致性备份数据库,避免重新创建账号破坏既有ID与群主映射。

外部平台交接

从创建群到可用二维码

平台地址 https://api.qingluanbot.com,请求头 QL-Key,JSON 请求体带实例 appid。实例必须属于对应密钥的开发者账号。密钥仅保存在服务器私有配置,管理员从主体软件设置维护。

  1. 创建群聊,保存返回的 roomId,不重复提交不确定的创建请求。
  2. 更改群名、获取二维码,再加入固定客服与指定群主。
  3. 提交禁止成员改群名、禁止群内互加;设置两位固定管理员。
  4. 转让群主,读取群资料核对成员、管理员和群主。
  5. 创建二维码的账号保留在群里,不自动退群。创建者退群可能导致原码不可用。
用途接口路径(POST)
创建 / 查询 / 改名/qingluan/api/room/create / getInfo / setName
二维码 / 拉人/qingluan/api/room/getQrCode / addMember
群开关/qingluan/api/room/forbidRename / forbidMutualAdd
管理员 / 群主/qingluan/api/room/setAdmin / changeOwner

映射与进度

群主映射文件 qingluan-account-map.json 按软件用户ID匹配,不按昵称猜测。固定成员与候选群主在 qingluan.js 中维护;账号当前映射见上方全量账号清单。一次订单只创建一个任务,进度保存在 wecom_group_jobs,超时先核对结果再继续。

已知限制,需要保留

  • HTTP 200 不代表业务成功;code=0 表示受理,关键结果还需查询确认。
  • 青鸾默认每开发者账号每分钟300次调用;企微自身的邀请人数与风控限制独立存在。
  • 已观察到“邀请人数已达今日上限”。受限时暂停操作,不能将连接检查通过解释为可以建群。
  • 两项禁止开关无法由当前查询接口完整读回,需要企微客户端核对。
  • 支持最多100个私有实例,由管理员在设置中维护;新订单群先健康检测,再交替分配;分配游标持久化,重启不重置。发送失败或结果不确定时不切号重建,也不重复发送。
  • 主动建群链路不依赖自建Webhook。若后续增加事件处理,按官方指南实现原始请求体验签和事件去重。

双账号轮询与原群归属

私有文件 qingluan-instances-private.json 保存实例池(appid、api_key、member_id、name、enabled),权限0600。原主配置兼容保留;私有实例池为权威配置,兼容旧主配置。后台 q.config(appid) 按群记录读取原账号,wecom-instance-manager.select() 在新订单建群前检测并分配。configs 中 wecom_rotation_last_appid 仅保存非密钥游标。暂停分配的实例仍可处理原群回调与已启动的消息任务。

每个群只在首位老板入群后发送一次补全订单文字与对应须知。第二位、重复事件、重新进群不会重发;缺项等待、文本复核与发送不确定保护均保留。两个账号按原始 appid 分别验证回调、核对身份、上传图片和发送,不串群。新增 wecom-pool.cjs 隔离验证两个账号交替分配、原群续跑、各自文字/图片及失败不换号。

智能能力交接

只整理客户回复,不替客服聊天

模型 mimo-v2.6-pro-ultraspeed,关闭深度思考,固定JSON输出。粘贴内容按不可信数据处理;输出只接受允许字段和客户原文证据。无依据留空,不将“微信区”推断成PC,不把旧模板的空字段或客服昵称识别成客户新回答。

订单类型补全字段
跑刀 / 任务PC或手游、区服、角色名或ID、保险格数
护航PC或手游、角色名或ID
撞车角色名或ID、区服、保险格数、有无追缴、是否过48h、24小时内是否撞车
MiMo API Key 不交付、不回显、不进入源码包。下方测试仅复用本软件字段整理函数,不接受模型选择、系统提示词或任意接口地址。交接后的生产使用需由公司自行配置所属密钥。

服务器私有文件 mimo-private.json 保存模型配置;qingluan-private.json 保存企微接口配置。文件权限应为0600。主体软件每账号20次/分钟并限制同时请求;本交接台另限每管理员6次/分钟,输入最多4000字。

开发参考

当前开放的主要接口

主体软件接口需有效登录令牌和绑定电脑的请求签名。浏览器不能仅凭复制令牌调用;停用业务由 lightweight-policy.js 返回410。

方法 / 路径用途
GET /api/health服务健康(公开)
GET /api/orders、/api/orders/new-count接待列表、待刷新数
POST /api/orders/external外部订单接入;按既有接入配置鉴权
GET / PUT /api/completion/state/:id共享补全字段和群名;逐字段版本检查,冲突409,不保存聊天原文
POST /api/completion/organizetext、order_id、type;返回fields及warnings
GET /api/wecom/groups/options、/:id成员选项、订单建群进度
POST /api/wecom/groups/create、/:id/resume首次确认建群、检查后继续
GET / PUT /api/config/wecom管理员企微配置;GET不回显密钥
POST /api/config/wecom/check管理员连接检查
GET / POST / PUT /api/users按权限查看、创建、编辑账号
POST /api/users/:id/unbind-device管理员解除设备绑定,不在交接台开放
/api/config/notice-images、/api/config/retention须知图片、定期清理设置

macOS / 浏览器模拟测试

打开模拟接待工作台 ↗

模拟订单支持Y2K猫猫主题、租号模板、须知图复制、补全与群名。不会访问真实订单或创建企微群。AI整理需先在本页解锁,使用固定整理功能;Windows真实账号仍严格绑定电脑。

完整参数以源码路由与测试为准。本交接页使用独立的30分钟管理员只读授权,不产生主体软件令牌,也不解除主体软件的电脑绑定。

可操作的交接

在这里验证,不改动业务

管理员解锁后执行。不会建群、邀请成员、发送消息或修改线上订单。测试结果在本页显示,不记录粘贴的聊天内容。

6次 / 分钟 · 固定功能 · 无密钥回显

返回结果 等待测试
选择左侧功能后点击“运行测试”。

交付物

拿到能继续维护的代码

完整开发源码包

线上网页与服务端快照、Windows桌面源码、回归测试、部署与密钥模板、文件SHA256清单。

快照日期 2026-11-13 · ZIP 格式 · 管理员授权下载

包含开发代码,不包含生产数据库、客户上传内容、MiMo或青鸾密钥、登录凭据及设备私钥。历史旧下载地址已关闭;避免继续转发过期源码包。

交接验收清单

  • 核对源码包内SHA256清单与交接日期。
  • 从账号清单确认全部账号、停用状态、电脑绑定和群主映射。
  • 完成健康、青鸾连接与客户信息整理测试。
  • 在独立环境启动代码,复核接待、复制、补全与桌面更新。
  • 接管公司自己的平台账号、密钥和服务器权限,确认备份可恢复。

逐项验收

源码已核对,边界也写清楚

2026年11月13日复核:下载源码包中的61个服务端与网页文件,与线上运行文件逐一比对,差异为0。全量清单读取30个软件账号及9个渠道账号,含停用记录。数字为此次核对结果,账号清单以实时查询为准。

完整源码包另外附带以下深入文档,供接手开发独立维护:

  • 后台任务与故障恢复.md
  • 完整接口索引.md
  • 接管与未交付项.md
  • 数据库全表结构.md
  • 权限与关键流程.md
  • 自动化与测试覆盖.md
  • 主题细节与班次报时.md
“已交付代码”不等于“已移交服务器和公司平台管理权”。个人MiMo密钥不交付;原密码不可逆,未还原也未重置。生产数据库和服务器私有配置须由公司维护者安全接管。macOS Safari实机、企微账号风控和限额恢复仍需人工或平台确认。

查看此次逐文件核对记录

留给下一位维护者

遇到问题,先看证据

建群失败或一直待确认

检查任务step与status,确认是否已有roomId。有群ID先查群资料再继续;创建超时无ID时到平台核对,不直接删记录重建。连接受理成功不表示企微无风控。新失败会显示步骤、HTTP状态和脱敏业务码/原因;旧版未保留的原始码无法还原,需平台调用记录核对。已确认的“邀请人数今日上限”需按平台说明处理。

客户信息识别缺失或冲突

保留具体粘贴原文,用测试台复现;缺失不自动编造。检查fields证据校验和手动字段锁定,避免放宽逻辑后把客服追问和旧模板识别成客户回答。

新订单不刷新

确认外部接入、new-count响应、搜索条件和补全窗口是否打开。补全时暂停自动刷新避免打断编辑;关闭后立即检查。空搜索框获得焦点不应阻止刷新。

登录、换电脑与更新

账号严格绑定电脑;原电脑身份文件与DPAPI加密登录记录不能当普通配置复制。换电脑由管理员解除绑定后重新登录。旧壳不具备的新能力需升级客户端,网页热更新不能替代原生更新。

源码、账号与平台凭据的交接范围

源码包是可复用开发交付;线上账号见受保护清单,原密码无法恢复;数据完整迁移需服务器维护者备份SQLite。MiMo现有个人密钥不移交,测试台仅开放已有软件功能,接管生产请使用公司密钥。

入群服务

客户入群后发送补全信息与须知

POST /api/qingluan/callback 在全局 JSON 解析和桌面鉴权之前独立接收原始字节。按 appid 读取私有回调密钥,校验 X-Qingluan-Timestamp 与 X-Qingluan-Signature(HMAC-SHA256、五分钟偏差、恒定时间比较)。未知实例、错误签名、存储失败均不返回成功。回调只保存事件元数据,不保存聊天正文、图片票据或密钥;最多2000条,完成元数据三天清理。

登记接口 POST https://api.qingluanbot.com/qingluan/instances/set-callback 返回 callback_secret;原子存入数据目录 qingluan-callbacks-private.json,权限0600,instances 按 appid 区分。不得把它写进客户端、文档或源码包。保存时的首次平台测试可能早于私存密钥,不可绕过验签。回调配置与设备长连接是两件事。

新订单群配置完成后登记初始成员。1002 入群事件触发群资料复核,排除原成员、预设客服及建群者,再核对企业身份;只有一位非预设客服的外部新成员时按老板处理。多名候选、身份不清、群成员分页未完整时暂停。旧群不回溯自动发送,使用“检查并继续配置”先登记当前成员基线。

服务端从 order_completions 取补全数据,与网页“复制完整信息”共用 completion-format.js。未提供的信息不猜测:跑刀需角色与保险格数;撞车需角色、区服、保险及追缴/撞车确认;护航需角色与平台;任务需角色;租号需抖音名。等待期间继续补全会自动推进。首条发送时固定文本快照,后续更改不会自动重复发送。

持久状态先记录发送意图,再调用 sendText,按返回的消息ID和游标通过 message/sync 复核群与文字;确认后上传该类型固定须知并调用 sendImage,继续查消息记录确认。任务沿用界面推荐的代肝须知。超时、重启遗留的 sending 状态不盲目重发。消息记录确认不等于客户已读。

建群结果区显示自动发送状态。管理员设置展示回调验签接收时间;GET /api/qingluan/callback/status 需管理员设备签名登录,仅输出计数与时间。回调只接收配置实例,多实例入站验签独立;建群、原群续跑、二维码和自动发送按订单群原始实例处理;两实例事件分别验签和调度,不自动切号重试。

账号默认回调测试不带 appid,仅当 test=true 且 event_type=QingluanCallbackTest 时使用私有实例配置中的 __default 验签密钥,单独保存测试元数据;无实例的正式消息仍拒绝,默认密钥不会覆盖实例专用密钥。实例专用地址优先于账号默认地址;两套密钥分别维护。

新增表:qingluan_events(事件去重、调度元数据)、wecom_welcome(订单群基线、客户、快照与发送进度;订单删除级联清理)。数据库业务表现为19张。新增回归测试:qingluan-callback.cjs、qingluan-callback-http.cjs、qingluan-welcome.cjs。测试均隔离运行,不向真实客户发送。

多实例维护与可用账号分配

入口:主体软件 设置 → 企微实例管理,仅管理员可见。支持最多100个实例、搜索备注/账号/实例ID、新增、编辑、暂停分配、重新检测。密钥留空保留,不回显、不进入源码包。实例ID创建后不可改;不提供删除,暂停分配仍保留原群处理凭据。新实例保存时读取账号资料并登记本域回调;正常检测不创建测试群或发送消息。

GET /api/config/wecom/instances 返回安全元数据;PUT /api/config/wecom/instances/:appid 保存实例(name、enabled、api_key 可选;已有项须带 base_version);POST /api/config/wecom/instances/:appid/check 重新检测并在缺少回调时接入。沿用管理员登录和设备签名鉴权,同项操作锁及版本409防止覆盖。旧单账号接口只更新对应实例,不清空其他实例。

分配只对 enabled 的实例进行,回调未接入的不分配。账号资料健康缓存30秒;读请求超时约3秒,失败默认冷却60秒。每次最多并发检查3个,单次检测预算约12秒,冷却后会重查。轮询选择串行,游标持久化。明确429会触发共享冷却,不持续切换重试。实际建群调用失败也会暂缓后续新群分配。

检测前先持久保存 selecting 任务,重复点击只读取已有任务。全部不可用时任务为 unavailable,仍未提交建群,可在原订单“重试分配”。一旦提交建群并出现超时或结果不确定,保持原实例与 uncertain 状态,不自动换号重复创建;已经创建的群不迁移。账号资料读取和回调配置不代表具有全部成员邀请权限,实际群配置仍逐步复核。

暂停实例仍由原账号处理既有群回调、二维码与已启动发送。补全后发文字、查询确认、发对应须知和首位老板仅一次的规则保留。新实例需能邀请已配置的客服与管理员。没有独立开放平台注册或对外通用代理,此项目仍暂停。

主要实现:server/src/wecom-instance-manager.js、routes/wecom-config.js、routes/wecom-groups.js,client/public/instance-manager.js 与 instance-manager.css。新增隔离回归 wecom-instance-manager.cjs、wecom-instance-api.cjs;wecom-pool.cjs 覆盖全部不可用安全重试、检测期间重复点击保护与原群账号隔离。浏览器验证12套主题、窄窗口和密钥清空。

解锁交接工具

使用现有管理员账号。授权30分钟,仅开放本页查询、源码下载与限定测试。