接待列表
搜索、翻页、待刷新计数、固定表头、新订单60秒高亮;完整订单号单独复制,时间按钮打开补全窗口。
接待效率优先,保持轻量。
不做退款、金额核算和订单状态流转。
产品说明
这是在线客服辅助工具,桌面客户端加载线上页面。核心链路是查找订单、复制信息、补齐客户回复、生成群名、创建企微群与复制二维码。
搜索、翻页、待刷新计数、固定表头、新订单60秒高亮;完整订单号单独复制,时间按钮打开补全窗口。
跑刀、撞车、护航、任务、租号。工卡、挂坠、保险箱等归任务;类型依商品识别,未识别内容高亮提醒。
粘贴乱序聊天,规则与AI整理字段;缺失留空,保留原文证据、冲突提示、手改锁定。结构化补全字段和自定义群名自动存到服务器,所有客户端共享;聊天原文及未同步备份保留本机。
按订单类型生成可编辑群名,推荐须知图片;保留客服主动复制;已登记订单群可在客户入群后自动发送补全信息及对应须知。租号使用专属模板及租号须知图,不涉及押金核算。
后台调用青鸾,持久化每一步进度;群主按软件账号稳定ID映射,完成后列表显示绿色二维码复制按钮。
12套主题色漂浮粒子反馈与轻纹理,可单独关闭;12套专属品牌图案和互动小伙伴,Y2K保留猫猫;按北京时间显示当前班次剩余时间,跨午夜自动切班;Y2K猫猫、猫爪点击特效与可爱挂件;桌面抽屉避开标题栏,补全信息自动共享并保护冲突,弹窗固定标题和复制按钮、内部滚动,订单表格采用稳定绘制、滚动时降载并于停止后恢复;圆角外壳、北京时间和三色班次、应用内更新;账号编辑、电脑绑定、公告、计算器、图片与设置。
系统地图
| 位置 | 职责 |
|---|---|
client/public/app.js | 接待页面、类型识别、补全窗口、群名、复制反馈和企微交互 |
client/public/styles.css | 主题、布局、响应式样式、滚动条与按钮 |
server/src/routes/orders.js | 订单接入、列表搜索、待刷新统计、二维码可用标记 |
server/src/routes/completion.js | MiMo字段整理、证据约束、限流和输出校验 |
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 与项目已有构建脚本。
/api/health、公开资源哈希、登录和接待页面。受保护的交接资料
实时列出所有账号,包括已停用账号。显示完整账号名称、角色、绑定电脑名称与企微成员映射;不修改密码、不解除绑定。
| ID / 登录账号 | 姓名 | 角色 / 状态 | 绑定电脑 | 企微成员ID |
|---|---|---|---|---|
| 账号资料未加载。点击上方按钮并使用现有管理员账号解锁。 | ||||
管理员解锁后加载渠道账号。
密码使用不可逆哈希保存,无法输出原密码。本页不展示密码哈希、设备身份密钥或会话令牌。若需迁移全部账号,请由服务器维护者一致性备份数据库,避免重新创建账号破坏既有ID与群主映射。
外部平台交接
平台地址 https://api.qingluanbot.com,请求头 QL-Key,JSON 请求体带实例 appid。实例必须属于对应密钥的开发者账号。密钥仅保存在服务器私有配置,管理员从主体软件设置维护。
roomId,不重复提交不确定的创建请求。| 用途 | 接口路径(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 表示受理,关键结果还需查询确认。私有文件 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-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/organize | text、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 | 须知图片、定期清理设置 |
模拟订单支持Y2K猫猫主题、租号模板、须知图复制、补全与群名。不会访问真实订单或创建企微群。AI整理需先在本页解锁,使用固定整理功能;Windows真实账号仍严格绑定电脑。
完整参数以源码路由与测试为准。本交接页使用独立的30分钟管理员只读授权,不产生主体软件令牌,也不解除主体软件的电脑绑定。
可操作的交接
管理员解锁后执行。不会建群、邀请成员、发送消息或修改线上订单。测试结果在本页显示,不记录粘贴的聊天内容。
选择左侧功能后点击“运行测试”。
交付物
线上网页与服务端快照、Windows桌面源码、回归测试、部署与密钥模板、文件SHA256清单。
快照日期 2026-11-13 · ZIP 格式 · 管理员授权下载
逐项验收
2026年11月13日复核:下载源码包中的61个服务端与网页文件,与线上运行文件逐一比对,差异为0。全量清单读取30个软件账号及9个渠道账号,含停用记录。数字为此次核对结果,账号清单以实时查询为准。
完整源码包另外附带以下深入文档,供接手开发独立维护:
留给下一位维护者
检查任务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套主题、窄窗口和密钥清空。