--- C:\wechat_rpa\backups\review-assistant-20260917\assets\ui\console-app.js
+++ C:\wechat_rpa\assets\ui\console-app.js
@@ -507,6 +507,27 @@
`;
}
+function reviewAssistantPanel(a){
+ const r = a.reviewAssistant || {};
+ const recipient = r.recipient || {};
+ const busy = Boolean(r.busy);
+ const canChoose = r.ready && !busy;
+ const canToggle = canChoose && (recipient.id || r.enabled);
+ return `医疗助理审核提醒
${r.enabled ? "当前账号已开启" : "当前账号未开启"}
+ 客户会话进入待审核时,由当前托管企业微信账号向指定助理的私人微信发送客户咨询、待发送回复和审核原因。
+ 托管企微账号(最近核验)${esc(r.accountName || "尚未核验")}${r.accountId ? `${esc(r.accountId)}` : ""}
+ 助理私人微信${esc(recipient.name || "尚未选择")}${recipient.label ? `
${esc(recipient.label)}
` : ""}
+
+
+ 开启审核提醒
+ ${r.reason ? `${esc(r.reason)}
` : ""}
+ ${r.message ? `${esc(r.message)}
` : ""}
+ ${r.notification && r.notification.message ? `最近提醒(读取账号时刷新):${esc(r.notification.message)}
` : ""}
+ 设置按企微账号分别保存。选择或更换联系人后默认关闭,确认收件人后再开启;同名联系人按列表中的联系编号区分。
+ 人工用同一企业微信账号直接回复客户后结束本次审核;后续自动回复仍逐条风控。此识别以账号发出的消息为准,不区分手机或电脑。在助理私人微信回复提醒,不会解除客户审核。
+ 提醒内容示例(只读,不会发送)
${esc(r.preview || "请先读取当前账号")} `;
+}
+
automationView = function(){
if (STATE.demo) return _automationView();
const a = STATE.automation || {};
@@ -517,13 +538,13 @@
const ready = p.canSend === true && p.status === "native_ready" && p.databaseReady === true;
return `${head("自动化设置","协议模式 · 保留原员工账号与现有客户会话",`
`)}${transportPanel}
-
${ready?"协议自动回复已就绪":"协议模式尚未就绪"}
${esc(ready?"原账号文本单聊":p.label || "正在准备检测")}
+ ${reviewAssistantPanel(a)}
- 发送核对
客户补充消息时重新生成回复;人工已经回复时取消旧任务。发送结果不明确时暂停监听并保留记录,防止重复发送。
协议模式按会话 ID 发送,不操作聊天窗口。切换账号或升级企业微信后,会重新校验可用性。
`;
- }
- return `${head("自动化设置","配置企业微信监听、消息合并与自动发送规则",`
${esc(a.wecom || "企业微信未识别")}规则已生效`)}${transportPanel}
监听与发送策略
${icon("activity")} ● 规则运行中${[["activity","扫描未读"],["log","提取消息"],["folder","合并消息"],["brain","请求 AI"],["send","回填发送"]].map(x=>`
`).join("")}
企业微信窗口
${icon("clipboard")} 主窗口:● ${esc(a.wecom || "未识别")}
${icon("user")} 当前账号:${esc(a.account || "—")}
${icon("globe")} DPI:${esc(STATE.dpi || "—")}
${icon("monitor")} 最小化恢复:● 已开启
消息处理
✓ 同一客户连续消息自动合并
✓ 保留最近 轮上下文${esc(a.context || 8)} 轮
✓ 一次只处理 1 个会话1 个
异常与兜底
${icon("clock")}AI 超时:${esc(a.timeout || 120)} 秒后重试2 次
${icon("alert")}发送失败:自动重试已开启
${icon("message")}固定回复:${esc(a.reply || "在的,请稍等")}
高风险转人工
● 已开启${icon("shield")} 诊断${icon("package")} 用药调整${icon("coins")} 投诉退款
启动前检查
${statusCells([["check","企业微信已登录", STATE.wecomConnected ? "检查完成" : "等待连接"],["cloud","AI 服务正常","检查完成"],["activity","窗口坐标已校准", STATE.wecomConnected ? "检查完成" : "待校准"],["shield","规则配置有效","检查完成"]])} `;
+ 发送核对
客户补充消息时重新生成回复;人工已经回复时取消旧任务。发送结果不明确时保留该会话记录待核对,其他会话继续监听,防止重复发送。
协议模式按会话 ID 发送,不操作聊天窗口。切换账号或升级企业微信后,会重新校验可用性。
`;
+ }
+ return `${head("自动化设置","配置企业微信监听、消息合并与自动发送规则",`
${esc(a.wecom || "企业微信未识别")}规则已生效`)}${transportPanel}
${reviewAssistantPanel(a)}
监听与发送策略
${icon("activity")} ● 规则运行中${[["activity","扫描未读"],["log","提取消息"],["folder","合并消息"],["brain","请求 AI"],["send","回填发送"]].map(x=>`
`).join("")}
企业微信窗口
${icon("clipboard")} 主窗口:● ${esc(a.wecom || "未识别")}
${icon("user")} 当前账号:${esc(a.account || "—")}
${icon("globe")} DPI:${esc(STATE.dpi || "—")}
${icon("monitor")} 最小化恢复:● 已开启
消息处理
✓ 同一客户连续消息自动合并
✓ 保留最近 轮上下文${esc(a.context || 8)} 轮
✓ 一次只处理 1 个会话1 个
异常与兜底
${icon("clock")}AI 超时:${esc(a.timeout || 120)} 秒后重试2 次
${icon("alert")}发送失败:自动重试已开启
${icon("message")}固定回复:${esc(a.reply || "在的,请稍等")}
高风险转人工
● 已开启${icon("shield")} 诊断${icon("package")} 用药调整${icon("coins")} 投诉退款
启动前检查
${statusCells([["check","企业微信已登录", STATE.wecomConnected ? "检查完成" : "等待连接"],["cloud","AI 服务正常","检查完成"],["activity","窗口坐标已校准", STATE.wecomConnected ? "检查完成" : "待校准"],["shield","规则配置有效","检查完成"]])} `;
};
logsView = function(){
@@ -1325,6 +1346,15 @@
"edit-knowledge": () => callBridge("editKnowledge"),
"sync-knowledge": () => callBridge("syncKnowledge"),
"open-data": () => callBridge("openDataDir"),
+ "review-assistant-refresh": () => callBridge("refreshReviewAssistant"),
+ "review-assistant-choose": () => callBridge("chooseReviewAssistant"),
+ "review-assistant-toggle": () => {
+ const r = (STATE.automation || {}).reviewAssistant || {};
+ if (!r.ready || r.busy) return;
+ callBridgeWithFeedback("setReviewAssistantEnabled", [JSON.stringify({expected_account: r.accountId, enabled: !r.enabled})], {
+ pending: "正在核对当前账号与助理联系人…",
+ });
+ },
"save-automation": () => callBridgeWithFeedback(
"saveAutomationSettings", [collectAutomationPayload()], {
button: action, busyLabel: "保存中…",