# wechat-viewer 集成改动(环节4 策略 + 审批/白名单 UI) > 落地在手机端 Flask 应用 `~/wechat-viewer`(该 app 有自己的 git 工作树,本文件只记录本次为 > 微信自动回复新增的部分;两个新模板全文见同目录 `viewer_templates/`)。 ## 新增数据表(`local_db.py` init_db) ```sql CREATE TABLE reply_whitelist ( -- 自动回复白名单 id INTEGER PK, kind TEXT, -- 'contact'|'group' wxid TEXT UNIQUE, name TEXT, added_at TEXT); CREATE TABLE reply_queue ( -- 策略判定后落地 id INTEGER PK, msg_id INTEGER, talker TEXT, sender TEXT, sender_name TEXT, kind TEXT, incoming TEXT, draft TEXT, action TEXT, -- 'auto'|'review' reason TEXT, status TEXT, -- pending|sent|cancelled|auto_sent|failed created_at TEXT, sent_at TEXT); ``` `local_db.py` 新增辅助函数:`whitelist_list/add/remove/wxids`、`reply_add/list/get/update`。 ## 新增路由(`app.py`) | 路由 | 作用 | |---|---| | `GET /whitelist` | 白名单管理页 | | `GET /api/whitelist` / `POST /api/whitelist` / `POST /api/whitelist//delete` | 白名单增删查(`xxx@chatroom` 自动识别为群) | | `GET /approvals` | 自动回复审批页 | | `GET /api/replies?status=` | 队列列表(pending / sent / auto_sent / cancelled / 全部) | | `POST /api/reply//send` | 用(可编辑的)草稿发到会话 → `send_text_via_hook(talker,text)` → 标 sent/failed | | `POST /api/reply//cancel` | 标 cancelled | 发送复用 `~/.hermes/event_bus/wechat_hook_send.py` 的 `send_text_via_hook`(LSPosed 内部 API 广播 `SEND_MSG_INTERNAL`)。 ## 新增页面(`templates/`,见 viewer_templates/) - `approvals.html`:待审批列表,每条含对方原文 + **可编辑草稿框** + 【✅发送】【🗑取消】;另有已发送/自动已发/已取消筛选 tab。 - `whitelist.html`:白名单增删列表。 `base.html` 抽屉导航加两个入口:✅自动回复审批 / ⭐回复白名单。 ## 真机验证(2026-07-10) - 页面 `/whitelist` `/approvals` 均 200。 - 白名单:加「测试好友」→ 列表可见 → 删除 OK。 - 审批:插入 pending → `/api/replies` 返回 → 点发送 → `send_text_via_hook` 广播到 filehelper(result=0, status=sent)→ 草稿按编辑后内容更新、状态转 sent、sent_at 记录。 - 取消:pending → cancel → status=cancelled。 - 测试数据已清空。 ## 待接(环节5 / 编排) - **编排器**:把环节1 队列 `incoming.jsonl` → 上下文 → Hermes 生成 → 策略 `decide()`(白名单读 `reply_whitelist`)→ auto 直接 `send_text_via_hook` 并 `reply_add(status=auto_sent)` / review 写 `reply_add(status=pending)`。 - 群 @回复的 `@昵称` 前缀、原生引用气泡(A11y)。