还没对真实客户开跑(明早灰度)。本例是联调首验:读消息、大脑生成、GUI 发送三段都用真实链路跑通了——下面三块都是真实产物,不是示意。
is_external → 内部群 正确跳过{"ok":true,"reply":"284元/㎡…"})、发(消息进群)。串成全自动后即「客户发问 → 自动读 → 自动想 → 自动回」。五段流水线,分布在三台主体上。两个地基约束决定了形态:(1) 企微 PC 客户端 UIAutomation 树黑盒 → 只能截屏 OCR;(2) 云电脑(国内)连不上 Vercel,但能连 Fly → 大脑调用走 Fly 中转。
akke-worker-prod · 透传到 Vercel(云电脑连不上 vercel.app,Fly Tokyo→Vercel 必通);不持密钥messages(role=customer) + 会话;Langfuse/成本注入messages(role=ai) status=sent;显式失败:没真发出就不记,DB 不假阳性目前 联调三段验通,批量真发未跑(主号无隔离,灰度明早开)。所以统计区为联调实测 + 批量待回填,不编造批量数字;bad case 全部是这次 0→1 真实踩到的,逐类列根因 / 优化 / 进展。
| Bad case(真实踩到) | 根因 | 优化方式 | 进展 |
|---|---|---|---|
| 企微窗口 UIAutomation 树整个读不出(只有标题栏) | 企微 PC 自绘 Duilib/DirectUI 表面,不吐无障碍树(探针实测深扫 12 层 列表/输入框全 0) | 放弃 ③UIA 路线,改截屏 → Qwen VL OCR 读消息(复用抖音 grounded 的 VL 管道) | 探针裁定 + 已落地 |
| VL 定位输入框坐标两次飘很大(fx=499 vs ≈105) | VL 实时定位点击点漂移 ±一大截、偶发点空(抖音家族早有此教训) | 点击坐标量准一次写死 .env(measure_wecom_coords.py);VL 只做读消息 + 核身,不做点击定位 | 已量 + 写死 |
| 中文回复打不进输入框(pyautogui 只能 ASCII) | pyautogui.typewrite 不支持中文;整段粘贴又是机器人特征(spec 禁止) | ctypes SendInput + KEYEVENTF_UNICODE 逐字打 Unicode(绕 IME)+ 随机字间延迟;paste 兜底 | 自家群实发验通 |
| 云电脑调端点超时(WinError 10060) | 云电脑(国内阿里云 IP)连不上 akke.vercel.app(Vercel 大陆不可达;openrouter 却通→非断网) | Fly worker 加透传中转 /wecom/chat/reply,端点改指 Fly URL(Fly Tokyo→Vercel 必通) | PR fc25cdcd 部署验通 |
| 带正确 secret 仍 401,怎么都不通 | Vercel 只存了 env 没 redeploy(其实 WECOM_CHAT_SECRET 压根没加上,查 REST API 才发现) | REST API 加 env → rerun vercel-deploy 才生效;存 env ≠ 生效,必须重部署 | 已加 + 重部署验通 |
| 迁移 workflow 失败(db push 没跑到) | supabase/setup-cli 拉 CLI release 撞 GitHub API 限流(transient flake,非 SQL 问题) | 重跑 workflow(限流窗口过了即过) | 重跑 success |
| VL 把会话标题读成「杭州辰焰科技有限公司」 | 当时打开的是内部测试会话,标题本就是公司名——VL 读对了,不是 bug | 真实外部客户会话标题=客户昵称,VL 同样能读;本例证明标题区读取本身准 | 已澄清 |
| 重名客户可能认错人 / 串台 | GUI 拿不到稳定 external_userid,身份只能按显示名定位 | V1 接受(单账号客户量可控);按 (org_id, 显示名) 幂等。后续探无障碍树/会话存档拿稳定 id | V1 接受 · 待后续 |
| 客户连发多条,只读到最新一条 | 读适配器每轮只 OCR 最下面最新一条气泡 | V1 先接受(漏前面几条);后续 VL 读「自上次回复以来的多条」合并成一轮 | V1 接受 · 待后续 |
| 主号被封 = 好友+记录+认证主体全失 | 用户拍板主号也上、不做承接号隔离 | 非代码可消除;以「降概率×降损失」补偿:夜间不发/拟人节奏/日限从严/灰度试水/一键停发 | 灰度盯防 |
AKKE_WECOM_DRY_RUN=0 + AKKE_WECOM_HOURS=9-21(收回测试用的 0-24),9 点起开着终端看头几条真实客户的读/回质量,手放在建 wecom_reply_STOP 秒停上。AKKE_WECOM_TYPE_MODE=paste;发送键不对切 ctrl+enter)。external_userid,替「显示名认人」;量大前必做。起点是「云电脑 + 低风险」两个互相打架的诉求;逐层裁定后落到方案B + 风险最小化。