助手面板
贴在客服 IM 聊天页右侧,跟着当前客户走。设备号、套餐、卡状态、规则建议、快捷操作常驻,不用切屏。
常驻 / 跟随客户从一线客服的真实工作里长出来的自动化工具
从每天 380 个客户、5,800 条消息的真实工作出发,把跨 5 个后台的查询、判断、登记与跟进,收敛成一个桌面工作台。支撑 30–50 名客服日常使用。
一个注入客服后台的助手面板 + 一套本地服务 + 一个确定性规则引擎:把跨 5 个系统的查询、判断、登记与跟进,收敛成一次点击。
本页覆盖:背景与痛点 · 功能 · 架构 · 技术栈 · 运行数据
一人一班 380 位客户;5 个后台;每单 30+ 次点击,大量时间花在搬运信息。
Electron 壳 + 页面注入 + 本地 FastAPI + YAML 规则引擎;AI 只做理解与措辞。
4,700 次自动执行、97.7% 成功;469 笔业绩单、453 笔成功落库。
2026 年 6 月,我在随身 WiFi 售后岗。一个班约 380 位客户、5,800 条消息;真正用于判断的时间很少,大部分时间在五个后台之间复制、切换、截图、填表。
做事实翻译层:每项事实带来源与采集时间,取不到就说“未确认”。
做 YAML 判断表:业务能读、测试能跑、结论能追溯到具体规则。
做端到端自动化:收集、筛查、出图、提交、复核,一条链跑完。
“如果一件事每天要做 300 次,它就不该由人来做。”
2026.06,第一版脚本之前
形态不是先设计出来的,是被场景逼出来的:客服要一边聊天一边看信息,所以有面板;登记要填长表单,所以有弹窗;批量登记不能打断接待,所以有独立自动化窗口。
贴在客服 IM 聊天页右侧,跟着当前客户走。设备号、套餐、卡状态、规则建议、快捷操作常驻,不用切屏。
常驻 / 跟随客户业绩登记、退费结算、换货/补发/芯片/出省、订单查询。表单口径对齐官方后台,提交体由服务端拼。
对齐官方 / 少填字段独立 BrowserWindow,同一登录态、不注入插件。批量业绩登记时主窗口照常接待,互不打断。
同账号 / 不打断业绩登记自动化:收集 → 筛查 → 读会话 → 出图 → 提交 → 复核。每一行都能看到判定依据、当前状态、登记人与证据图;客户姓名、设备号与人员信息已脱敏。
为什么单独开窗:注入是页面级的,两个窗口会各跑一份插件;自动化窗口不注入,避免重复采集、重复执行。
页面只负责展示与采集;需要凭据、需要写操作的事,全部收在 Electron 主进程与两个本地服务里。两个服务分工明确:9901 管“这个账号能用什么”,9900 管“具体做什么”。下面先看整体分层,再展开规则引擎与自动业绩两条核心链路。
注入面板 · plugin.bundle.js
聊天 / 客户 / 历史消息
同账号 · 不注入插件
切客户 · 读 store · 截图
工具包 / 每日数据 / 网页页卡
独立分区 · 登录记忆
窗口 / 页签 / 协议代理 / 注入幂等 / Python 守护 / 自动更新 / 通知
凭据由本机服务保管;页面拿不到上游 tokenFastAPI · 按域拆包:运营商后台 / 售后 / 订单 / 业绩 / 物流
登录 · 权限快照 · 离线判定 · 身份同步
9900 ↔ 9901 · 本机令牌互认;权限快照 TTL 60s,面板以注入时的快照为准。
登录态由本机服务保管;页面不直接持有上游 Cookie。
账号 · 设备上限 · 功能开关 · 版本门禁 · AI 配置
Docker + Nginx + SQLite写操作路径:面板 → 主进程 / 9900 → 外部系统;页面永远不直接持有上游凭据。
9900 / 9901 用本机令牌互认,令牌不写进网页;面板只调 localhost。
授权快照不落盘,改本地文件不能自授权;设备上限与版本门禁在云端决策。
DPAPI / Keychain;登出=换人,一次清干净售后身份与分区存储。
提交体由服务端拼,面板只传设备号/订单号/截图;重复提交由三层幂等兜底。
不是让大模型自由发挥:事实来自真实系统,判断写在 YAML,执行有开关与回退。
运营商后台 · 售后系统 · 订单系统
把不同系统的返回翻译成统一事实;每项带来源与时间,取不到就标“未确认”,不用默认值猜。
四类工作流:续费复机 / 新用户激活 / 套餐到期或用超 / 无线定向限速;输出 decision + reason codes。
人工批准或自动开关放行;写操作幂等;结果回写建议状态与执行记录。
发话术 / 复机 / 登记 / 跟进;失败转人工,不把猜测当结论。
大模型可以理解口语、改写客服话术;但不决定是否付款、是否复机、是否退款。AI 不可用时回退固定模板。
每次命中都能追到规则版本、事实来源与执行结果。
先只展示建议,再开放人工批准,最后只对低风险场景开启自动执行;任何异常回退人工。
主窗口照常接待,自动化窗口在后台完成收集、筛查、读会话、出图与提交;每一步都可回查。
星标客户 / 佣金台账;100 个一批,自动接批。
按设备号查运营商后台;判定可登记 / 待观察 / 无效。
切客户、读聊天记录;确认引导与订单锚点。
独立窗口截图;证据图留档,可人工复查。
服务端拼 22 字段提交体;三层幂等防重复。
查登记状态;成功清星标,失败分类处理。
↺ 一批跑完自动接下一批;复查池 / 捡漏从旁路进入收集。
不是把按钮堆在一起,而是把一条真实工作流拆成可复用的段:监听、识别、查事实、给判断、做动作、留痕迹。
WebSocket 主通道,过滤同事、已回复、非客户方向消息;后台标签页用只读 Vuex 快照 + WS 心跳补漏,不增加接口轮询。
257,320 条事件 · 9,664 会话备注/昵称 → 当前消息 → 今日历史 → 图片识别;多设备号手动选择;识别后缓存 openid → 设备号并预取后台信息。
4 级来源 · 自动索要最多 2 次运营商后台的单卡/设备/订单/复机停机;每项事实带来源与采集时间,取不到就是“未确认”,不用默认值猜。
来源 + 时间可追溯续费复机、新用户激活、套餐到期/用超、无线定向限速四类工作流;YAML 判断表 + 计算器 + 事实翻译三层。
21,230 条建议 · 4,700 次执行收集 → 筛查 → 读会话 → 出图 → 提交 → 复核;100 个一批自动接批;两个复查池 + 捡漏 + 订单系统双记。
1,328 客户 · 469 笔登记单换货、补发、芯片、出省、代申请、电客工单、工单跟进;地址校验、收件人识别、重复登记核对。
7 类登记 · 一条表单链4 种定价模型试算;线上退款;线下退费(图片、multipart、重复核对);自定义收款文案与支付链接。
试算 → 提交 → 追踪好评引导按话术 ID 判定;跟进列表、响应统计、快递查询、9 个自定义网页页卡 + 登录记忆。
好评 / 跟进 / 统计 / 页卡没有文档、会改版、有限流、有交接班、有上游缺陷。下面六个点,是系统落地时最难、也最值得说明的部分。
目标系统只有网页,没有开放 API;登录态是 HttpOnly cookie,提交体有 22 个字段,还带重复登记校验。
大模型能理解口语,但不能决定客户是否付款、能不能复机、该不该退款。错一次就是业务事故。
页面会改版、后台标签页会降频、重复注入会出现两份互不感知的实例。
客服四班倒,通宵班在早上交接。0 点清缓存会打断正在处理的会话;随时清,早班又接不上上一段。
面板 ui.ts 2248 行,AR_createPanel 一个函数 2018 行、46 个嵌套闭包;每次改弹窗都怕碰坏别的弹窗。
账号在业务系统,功能权限在自建云,版本发布也在业务系统;客户端要能离线判定,又不能被本地改文件自授权。
以下数字来自本机 SQLite(agent_observe.sqlite / claim_automation.sqlite),统计截至 2026-10-28;不是估算,也不是演示数据。
source: agent_observe.sqlite · claim_automation.sqlite453 = 414 笔单记 + 39 笔双记;其余 16 笔为上游拒绝、异地已登、状态不符/无证据。成功提交均留有证据截图与判定依据。
Python 5.0 万 + TypeScript 4.8 万;不含依赖与构建产物。文档按总览 / 接口契约 / 桌面端 / 客服 Agent / 云端与发布分类。
真实业务里的三个关键取舍,决定了系统今天的形态。
每个客户要截图、填 22 个字段,还要判断部门、跨月、双记、重复登记。人工一天只能登几十单,且容易漏。
把流程拆成五步状态机;订单事实改运营商后台原站直查,10 台筛查从 28.2s 降到 4.7s;100 个一批自动接批;三层幂等 + 证据截图 + 两个复查池 + 捡漏。
1,328 个客户、4,305 条任务、469 笔登记单、453 笔成功落库;主窗口不受影响,客服照常接待。
全自动的前提不是“敢点”,而是可回滚、可复核、可追责。
面板 ui.ts 2248 行,一个函数 2018 行;线上每天几十人在用,不能停机重写。
先补 883 条 CSS 基线和 114 条无头 Electron 断言,再拆 11 个模块;宿主只做装配,模块各自负责;每次提交跑基线。
宿主 798 行、函数 171 行(−92%);视觉零变化;后续新增弹窗不再改一处崩三处。
重构的勇气来自测试,不是来自“我觉得没问题”。
东莞、中山是直筒子市(不设区县的地级市);上游地址校验把这种结构判成“地址冲突”,提交被拦。
没有硬绕校验:把冲突降级为一次人工确认(“我已核对”),保留原始校验证据;同时把问题提给后端并行修复。
真机可提交,操作从多次来回降到一次点击;后端修复不阻塞业务。
遇到上游缺陷,先分清“我能安全降级”与“我必须推动修复”,不要用绕过换短期顺利。
独立开发最容易欠的是发布纪律。这个项目的做法是:把检查写成命令,把口径写进文档,把版本收成一个来源。
npm run checktscTS strict · 0 anyeslint0 warningruffPython 静态检查test:modules38 个 TS 模块测试test:python45 个 Python 测试test:desktop35 个 Electron 测试smoke:panel261 / 267 通过NSISWindows 安装包面板冒烟有 6 条既有的展开动画断言未通过,作为已知基线单独跟踪,不计入业务回归。
查设备、回话术;先让每天少点 100 次重复操作。
注入面板进同窗;首位外部用户开始使用。
事实 / 判断 / 执行分层;售后登记与云端授权上线。
469 笔登记;面板重构 −92%;视觉基线建立。
30–50 人使用;v2.4.9;云端交接与每日数据。
没有为了技术而技术。每一项选型,都能对应到一个具体的交付约束或踩过的坑。
需要同时托管多个登录态、注入客服页面、管理本地服务与自动更新;Electron 是能同时满足 Windows 交付与浏览器能力的方案。
凭据、上游请求与写操作收在本机;FastAPI 轻量、类型友好,PyInstaller 可以把整个服务打进 Windows 安装包。
不依赖浏览器扩展安装;esbuild 产出单文件 IIFE,壳按内容哈希幂等注入,页面只保留按需片段。
业务判断必须可解释:规则用 YAML 写、Python 计算、事实带来源;AI 只做理解与措辞,不碰写操作。
云端只做授权与配置下发,权限判断在内存;客户端用 NSIS 安装、自动更新、版本门禁与证书指纹钉扎。
重构和发布都依赖可重复的检查:契约 fixture、视觉基线、无头 Electron 断言、Python 单测与面板冒烟。
不是 demo,是 30–50 人每天用的生产工具;每个功能都能追到一个具体的人、班次或单据。
事实有来源,判断有规则,写操作有批准、证据与回退;AI 只做它擅长的事。
调研 → 架构 → 编码 → 测试 → 打包 → 部署 → 推广;遇到不会的就拆小、验证、再落地。
已交付 30–50 名客服使用;客户端 v2.4.9;云端策略服务已做交接准备。
售后客服团队;需要跨多个后台查询、判断与登记的岗位;批量业绩/工单登记;新人培训与口径统一。
规则可视化编辑;多租户云端配置;更细的权限与审计;可观测性看板。
经验总结
更早建立契约 fixture;更早把 UI 与业务逻辑分层;更早做结构化日志与看板,少靠 grep。
项目说明
项目介绍;已隐去客户个人信息、账号凭据与接口密钥。界面为示意或脱敏截图。