const icon=n=>` `;
const people=[["高","高瑞@微信","处理中","00:00:12",""],["小","一个小迷糊@微信","等待中","00:01:45","green"],["李","李先生@微信","等待中","00:02:10",""] ,["陈","陈女士@微信","待重试","—","violet"],["张","张小明@微信","等待中","00:03:22","cyan"]];
let listening=true;
const head=(title,sub,actions)=>``;
const connected=(extra="",primary="")=>` 企业微信已连接 AI 服务正常 ${extra}Ⅱ 暂停监听 `;
const ribbon=items=>`${items.map(x=>`${icon(x[2])}
${x[0]} ${x[1]}
`).join("")} `;
const queueList=(archive=false)=>`
${people.map((p,i)=>`
${p[0]}
${p[1]} ${archive?(i===0?"请问你们的灵芝孢子粉怎么服用…":i===1?"每天吃几次比较合适?":i===2?"有不良反应吗?":"会话已归档"):` ${p[2]}`}
${archive?["16:31","16:18","15:42","14:20","13:35"][i]:p[3]} ${archive?`${i===2?"已转人工":"AI 已回复"} `:`${icon("message")} ${i===3?1:0} `}
`).join("")}
`;
const activities=(more="查看完整日志")=>`${[["16:33:27","扫描未读","检测到客户未读消息","activity","成功",""],["16:33:28","提取聊天记录","已提取最近 6 条聊天记录","log","成功",""],["16:33:29","AI 服务","正在请求 AI 生成回复","brain","进行中","blue"],["16:33:31","人工保护","检测到人工鼠标操作,暂停 5 秒","user","警告","orange"]].map(x=>`
${icon(x[3])}
${x[0]} ${x[1]} ${x[2]}
● ${x[4]} `).join("")}
${more} › `;
const journey=()=>`${[["扫描未读","已完成","0.3s"],["提取聊天记录","已完成","1.2s"],["合并连续消息","已完成","0.4s"],["发送至 AI","已完成","0.6s"],["生成回复","进行中","2.4s"],["回填企业微信","等待","—"],["自动发送与归档","等待","—"]].map((x,i)=>`
4?"wait":""}">
${i<4?"✓":i+1}
${x[0]} ${x[1]}
${x[2]}
`).join("")}
`;
const statusCells=items=>`${items.map(x=>`
${icon(x[0])}
${x[1]} ${x[2]}
`).join("")}
`;
function autoView(){return `${head("桌面自动化控制台","监听企业微信未读消息,并由 AI 自动生成与发送回复",connected(`
${icon("send")}自动发送 `,"danger"))}${ribbon([["监听状态","运行中","activity","green"],["排队","3","users"],["今日回复","128","message"],["失败","1","alert","red"]])}
任务队列 3 ${icon("filter")}${icon("sort")}
${queueList()}当前处理任务 ${icon("user")}高瑞@微信 已读取 6 条消息 AI 生成中
复制的聊天内容
16:32:11 请问你们的灵芝孢子粉怎么服用?
16:32:18 每天吃几次比较合适?
16:32:26 有什么注意事项吗?
AI 回复预览
您好!灵芝孢子粉建议每日 1–2 次,每次 2–3 克,温水冲服,饭前半小时或睡前服用效果更佳。 如有特殊体质或正在服药,建议咨询专业医生后再服用哦。
${icon("shield")}置信度 96% ${icon("clock")}模型耗时 2.4s
${icon("stop")}终止本任务 ${icon("user")}转人工
自动化执行状态 总耗时 5.01s ${journey()}
企业微信窗口状态 ${[["folder","窗口","已识别"],["message","当前会话","高瑞@微信"],["monitor","DPI","200%"],["shield","人工保护","5 秒"],["refresh","最小化恢复","已开启"]].map(x=>`
${icon(x[0])}${x[1]} ${x[2]}
`).join("")}
`}
function queueView(){return `${head("任务队列","查看排队、处理中与待重试的自动回复任务",connected(`
${icon("send")}自动发送 `,"danger"))}${ribbon([["处理中","1","check","","blue"],["等待中","3","clock"],["待重试","1","refresh","orange"],["平均等待","12s","clock","green"]])}
全部任务 全部 处理中 等待中 待重试
${queueList()}
任务详情 客户 高瑞@微信
会话 ID 7bc26546… ${icon("copy")}
已等待 12 秒
重试 0 次
来源消息
✦ AI 生成回复中
${[["入队","16:32:11"],["读取消息","16:32:11"],["请求 AI","16:32:12"],["生成回复","进行中"],["回填发送","等待中"],["完成","等待中"]].map((x,i)=>`
${i<3?"✓":i+1}
${x[0]} ${x[1]} `).join("")}
× 取消任务 ${icon("refresh")}立即重试 ${icon("users")}转人工
`}
function archiveView(){return `${head("会话归档","保存客户上下文、自动回复与回访线索",`
企业微信已连接 AI 服务正常${icon("download")}导出记录 `)}
会话记录 ${icon("user")}高瑞@微信 6 条消息 AI 已回复 ${icon("clock")}16:31 更新
${icon("user")} 16:32:11 请问你们的灵芝孢子粉怎么服用?
${icon("bot")} 16:32:18 每天吃几次比较合适?
${icon("user")} 16:32:26 有什么注意事项吗?
${icon("bot")} 16:32:42 温水冲服,饭前半小时或睡前服用效果更佳。 如有特殊体质或正在服药,建议咨询专业医生后再服用哦。
${icon("user")} 16:33:05 好的,谢谢!
${icon("bot")} 16:33:12 不客气!如有其他问题,随时为您服务~
客户记忆 饮食控制 体重管理 长期回访
客户关注灵芝孢子粉的服用方法与注意事项,希望优化服用时间与剂量,同时注重产品安全性与体质适配。
◔ 上下文 8 轮
业务沉淀 ${icon("user")}
人工跟进 未分配客服
0 次 ·
最近更新 ${activities("复制全部记录")} `}
function aiView(){return `${head("AI 设置","配置模型、客服人格、知识库与工具能力",`
配置已同步▷ 测试 AI ${icon("send")}保存并发布 `)}
基础设置 知识与工具 安全策略
客服人格 AI
✧ 实时预览 您好!我是甄养堂贴心管家, 很高兴为您服务 😊
请问有什么可以帮您的吗?
▰ 企业知识库 1,284个知识片段
● 刚刚同步 ✓ 已连接 ${icon("refresh")}立即同步 ${icon("folder")}管理知识
${icon("shield")} 安全边界 🛡 不做医疗诊断
💊 不修改用药方案
♙ 高风险转人工
当前模式: ${icon("shield")}严格模式
配置状态 ${statusCells([["cloud","云端模型正常","最后检查:刚刚"],["folder","知识库已同步","1,284 个知识片段"],["folder","3 个工具可用","全部运行正常"],["shield","安全策略已生效","严格模式"]])} `}
function automationView(){return `${head("自动化设置","配置企业微信监听、消息合并与自动发送规则",`
企业微信已识别 规则已生效${icon("save")}保存设置 `)}
${icon("send")} 自动发送 ${icon("users")} 审核后发送
监听与发送策略 ${icon("activity")} ● 规则运行中 ${[["activity","扫描未读"],["log","提取消息"],["folder","合并消息"],["brain","请求 AI"],["send","回填发送"]].map(x=>`
`).join("")}
企业微信窗口 ▣ 主窗口: ● 已识别
${icon("user")} 当前账号: 甄养堂客服
◎ DPI: 200%
${icon("monitor")} 最小化恢复: ● 已开启
${icon("refresh")}重新检测
人机共存 鼠标静止 5 秒 后恢复
${icon("bot")}AI 运行中 ➤
Ⅱ检测到人工操作 AI 暂停
消息处理 ✓ 同一客户连续消息自动合并
✓ 保留最近 8 轮上下文 8 轮
✓ 一次只处理 1 个会话 1 个
异常与兜底 ${icon("clock")} AI 超时:重试 2 次 2 次
${icon("alert")} 发送失败:自动重试 已开启
${icon("message")} 固定回复:在的,请稍等 编辑
高风险转人工 ● 已开启 ⚕ 诊断 ◇ 用药调整 ¥ 投诉退款
${icon("settings")}规则管理
启动前检查 ${statusCells([["check","企业微信已登录","检查完成"],["cloud","AI 服务正常","检查完成"],["activity","窗口坐标已校准","检查完成"],["shield","规则配置有效","检查完成"]])} `}
function logsView(){return `${head("运行日志","实时追踪连接、消息识别、AI 调用与自动发送事件",`
${icon("refresh")}实时刷新 ${icon("download")}导出日志 ▱ 清空日志 监控中`)}${ribbon([["企业微信","99.9%","message","green"],["AI 成功率","98.6%","brain","","blue"],["平均响应","2.4s","clock","","blue"],["警告","1","alert","red"]])}
实时事件流 全部 连接 识别 AI 发送 警告 ${icon("search")}
${[["16:33:27","未读扫描","检测到客户未读消息","activity","成功","green"],["16:33:28","提取聊天记录","已读取最近 6 条消息","message","成功","green"],["16:33:29","AI 服务","正在生成回复","brain","进行中",""],["16:33:31","人工保护","检测到鼠标操作,暂停 5 秒","user","警告","orange"],["16:33:36","自动发送","回复发送成功","send","成功","green"]].map(x=>`
✓
${x[0]} ● ${icon(x[3])}
${x[1]} ${x[2]}
${x[4]} `).join("")}
系统健康 ${[["企业微信连接","正常"],["AI 服务","正常"],["窗口识别","正常"]].map(x=>`
${icon("check")}
${x[0]} ${x[1]} `).join("")}
${icon("clock")}运行时长 02:18:46
当前回复链路 ${[["activity","扫描未读","0.3s"],["message","读取消息","1.2s"],["brain","请求 AI","2.4s"],["send","回填发送","0.6s"]].map(x=>`
${icon(x[0])}
${x[1]} ${x[2]} `).join("")}
事件详情 ${icon("user")}
人工保护 检测到人工鼠标操作,自动回复暂停 5 秒
模块:人机共存 会话:高瑞@微信 已自动恢复
最近活动 ${activities("查看完整记录")} `}
function systemView(){return `${head("系统设置","管理软件启动、数据存储、通知与系统维护",`
当前版本 v2.0 ⓘ ${icon("refresh")}检查更新 ${icon("save")}保存设置 `)}
基础设置 ${icon("activity")}
启动后自动监听
${icon("log")}
关闭窗口时保持后台运行
◎界面语言: 简体中文 ⌄
${icon("monitor")}缩放比例: 自动 ⌄
数据与存储 286MB 已使用
● 会话归档 128 MB
● 运行日志 86 MB
● 缓存数据 72 MB
数据保留 90 天 ⌄
${icon("folder")}打开目录 ${icon("cloud")}立即备份 ⌁ 清理缓存
通知提醒 ♟
发送失败提醒 消息发送失败,已加入重试队列
16:33●
安全与隐私 ${icon("shield")}敏感信息脱敏: 已开启 ●
${icon("lock")}本地数据加密: 已开启 ●
${icon("lock")}日志隐藏聊天正文: 已开启 ●
${icon("log")}退出时清理剪贴板: 已开启 ●
网络与服务 ${icon("cloud")}云端 AI: 已连接 ●
${icon("folder")}企业知识库: 已连接 ●
⌁网络延迟: 28ms ●
⌁ 连接测试
维护与诊断 ${icon("refresh")}
检查更新 已是最新版本
${icon("shield")}
查看许可信息 查看软件许可详情
系统状态 ${statusCells([["shield","配置已保存","所有设置已生效"],["cloud","数据已备份","最近备份:16:33:28"],["shield","安全策略正常","所有安全策略已启用"],["monitor","后台服务运行中","系统运行状态良好"]])} `}
const views={auto:autoView,queue:queueView,archive:archiveView,ai:aiView,automation:automationView,logs:logsView,system:systemView};
const glyphIcons=[["✦","sparkles"],["✧","sparkles"],["✣","brain"],["⚑","flag"],["▣","clipboard"],["☎","phone"],["⌕","search"],["▤","clipboard"],["◇","package"],["🛡","shield"],["💊","pill"],["♙","users"],["⌛","hourglass"],["◎","globe"],["⚕","shield"],["¥","coins"],["⌁","wifi"],["♟","bell"],["▰","tray"],["▷","play"],["↻","refresh"],["➤","cursor"],["Ⅱ","pause"],["◔","clock"],["ⓘ","info"],["⌄","chevron"]];
function polishedIcons(html){return glyphIcons.reduce((value,[glyph,name])=>value.replaceAll(glyph,icon(name)),html)}
function render(name){
if(!views[name])name="auto";
document.querySelectorAll("[data-view]").forEach(b=>b.classList.toggle("active",b.dataset.view===name));
document.getElementById("main").innerHTML=polishedIcons(views[name]());
const listen=document.querySelector('[data-action="toggle-listen"]');
if(listen)listen.innerHTML=listening?`${icon("pause")}暂停监听`:`${icon("play")}恢复监听`;
location.hash=name;
}
function toast(msg="操作已完成"){const t=document.getElementById("toast");t.textContent=msg;t.classList.add("show");clearTimeout(window.__toast);window.__toast=setTimeout(()=>t.classList.remove("show"),1600)}
document.addEventListener("click",e=>{const nav=e.target.closest("[data-view]");if(nav){render(nav.dataset.view);return}const action=e.target.closest("[data-action]");if(action){const a=action.dataset.action;if(a==="toggle-listen"){listening=!listening;document.getElementById("orb").classList.toggle("paused",!listening);document.getElementById("orb-label").textContent=listening?"监听中":"已暂停";render(location.hash.slice(1));toast(listening?"已恢复监听":"监听已暂停")}else if(a==="logs")render("logs");else if(a==="clear-logs"){const list=document.getElementById("log-list");if(list)list.innerHTML='日志已清空
';toast("日志已清空")}else toast()}const sw=e.target.closest(".switch");if(sw)sw.classList.toggle("on");const pill=e.target.closest(".filter-pill,.tab");if(pill){[...pill.parentElement.children].forEach(x=>x.classList.remove("active"));pill.classList.add("active")}});
function fit(){const s=Math.min(innerWidth/1630,innerHeight/965);document.getElementById("stage").style.setProperty("--scale",String(s))}addEventListener("resize",fit);fit();render((location.hash||"#auto").slice(1));