一个油猴用户脚本(UserScript),用于实时监控征纳互动平台的等待人数与在线状态:有人等待或掉线时自动语音播报,配套常用语快填、飞书快捷短语、待办提醒、网页图片嗅探、手机 ↔ 电脑互传(传输助手),帮助坐席及时响应。
七个功能,每个都配一份使用手册(面向使用者,带示意图,放 docs/,文件名统一为 <功能>-guide.md)。
| 功能名称 | 简易说明 | 使用手册 |
|---|---|---|
| 监控与语音播报 | 每 3 秒看一次等待人数和掉线提示,有人来了播一次;掉线期间每 5 秒重复提醒,直到重新接回。只在监控时段运行 | monitor-guide.md |
| 常用语 | 把右侧栏「常用话术」搬进右侧滑出面板,搜一下点一条,直接填进聊天框 | phrases-guide.md |
| 飞书快捷短语 | 按当前对话自动匹配你飞书表格里的规则,在输入框上方浮出对应按钮,点一下整段替换 | quick-reply-guide.md |
| 待办提醒 | 有「待处理留言 / 预约」时对应卡片红色呼吸,数量归零自动撤 | todo-guide.md |
| 图片嗅探 | 把当前页面的图按会话列出来,可预览、下载、按 A4 打印 | sniffer-guide.md |
| 传输助手 | 手机 ↔ 电脑互传图片 / 文件 / 文字,电脑端一键复制进剪贴板 | transfer-guide.md |
| 运行日志 | 弹窗看脚本每一步干了什么(四色分级),排障时截图即定位 | log-guide.md |
所有入口都注入在站点标题栏(【工作台】【业务管理】右侧):|语音开关|设置 常用语 传输助手 图片嗅探|版本号,点图标打开对应弹窗;不再有悬浮面板。
dist/znhd.user.js 全部内容 → 油猴新建脚本 → 粘贴保存。更新脚本:设置菜单 → 关于 → 「检查源码」—— 直连仓库产物比对版本(不依赖脚本猫商店的同步), 有新版本时点「立即更新」即交由脚本管理器安装。商店同步偶有滞后,这条路总是能拿到仓库里的最新版。
znhd-service/
├── src/ # 业务逻辑层:monitor / speech / storage / relay / sniffer / transfer / phrasesZnhd 等
├── src-vue/ # UI 层(Vue 3):NavBarControls(标题栏注入)+ DialogHost(弹窗群)+ transfer / sniff
├── web/ # 手机上传页(Vue 3 + Tailwind 4 + Nuxt UI 4 + Vite,独立子项目)→ 构建产出到 relay-server/public
├── relay-server/ # 中继服务器(纯 Node 内置模块,零依赖):长轮询转发 / 静态托管手机页;含运行镜像 Dockerfile
├── ci/ # CI 脚本(CNB 流水线调用):冒烟门禁 / 构建推送镜像 / 部署 / ScriptCat 通知
├── shared/ # 脚本端与手机页共用的纯逻辑(图片压缩 / 打印)
├── config/ # 构建配置:common.meta.json 为脚本元信息(含版本号)唯一来源
├── dist/ # 构建产物 znhd.user.js(提交进仓库,勿手改)
├── scripts/smoke/ # 无头端到端冒烟(puppeteer):npm run verify
├── docs/ # 子文档:每个功能的 docs/<功能>-guide.md 使用手册、开发与排障说明、示意图(docs/images)
└── .workbuddy/memory/ # 工作记忆:MEMORY.md(长期结论)、YYYY-MM-DD.md(按日工作日志)
| 技术 | 用途 |
|---|---|
| Vue 3 + Tailwind CSS 4 + Nuxt UI v4 | 脚本端面板(shadow DOM 隔离);经 vite-plugin-monkey 打包为单文件用户脚本 |
| TypeScript + Vite 7 | 脚本主体与构建 |
| Web Speech API | 语音合成播报 |
| GM API | GM_xmlhttpRequest / GM_setClipboard / GM_setValue 等油猴能力 |
| Vue 3 + Tailwind CSS 4 + Nuxt UI v4 | 手机上传页(web/,独立 Vite 子项目,与脚本端共享 `src-vue/components |
| Node.js(零依赖) | 中继服务器(relay-server/) |
Docker(node:22-alpine) |
中继服务的运行镜像(CNB 构建推送,服务器 compose 拉取运行) |
| Puppeteer | 端到端冒烟测试(开发依赖) |
npm install # 安装依赖
npm run build # 生产构建 → dist/znhd.user.js
npm run dev # 开发模式(watch + 本地调试页)
npm run verify # 端到端冒烟(vue 面板 + relay + 手机页)
npm run typecheck # 类型检查(src 层)
版本号规则、调试方式、发布流程见 docs/development.md。
push 到 main 后由 CNB 流水线自动上线(push 即部署):CI 构建中继服务镜像推到 CNB 制品库 → 服务器 docker pull 拉取 → docker compose up -d 重建容器 → /health 版本自证通过才算部署成功。
docker.cnb.cool/bbbbaa/znhd-service,每次构建打两个 tag —— latest 与 sha-<提交前 8 位>(部署与回滚都用后者)。制品公开,服务器匿名可拉。znhd,由服务器上的 /opt/znhd-service/docker-compose.yml 独立管理(端口 5689,restart: unless-stopped,不挂任何卷——中继无运行时写盘,重建容器零数据风险)。该容器已脱离 1panel 的 Node 环境模板,面板里不要再重启该应用。/opt/znhd-service/.env 里的 ZNHD_TAG 改成上一版 sha-xxxxxxxx,再
docker compose --env-file /opt/znhd-service/.env -f /opt/znhd-service/docker-compose.yml up -d。ci/build-image.sh(构建 + 推送)、ci/deploy.sh(SSH 落地 compose 配置 → 拉镜像 → 迁移/回滚 → 健康与版本自证)。见 docs/troubleshooting.md(语音不播 / 常用语抓不到 / 传输助手连不上 / 中继部署与重启等)。
2026-10-10 之后不再维护独立的更新日志文件,变更随提交历史记录;2026-10-10 之前的历史冻结在 CHANGELOG.md。(v26.10.25-v1 起脚本内的「更新日志」弹窗已删除。)
本项目所有代码及脚本仅供学习、研究与个人非商业使用。使用者需自行遵守所在网络环境及相关法律法规,严禁用于非法用途、商业用途或侵犯他人权益的场景。使用本脚本所产生的一切风险与后果由使用者自行承担。
MIT License。随项目分发的第三方依赖均为 MIT 或与其兼容的许可。