云电脑【浏览器 Edge】DM 自动回复 · 0→1

在阿里无影云电脑上,用 Edge 浏览器(抖音网页版)+ 像素红点检测 + Qwen 视觉读取, 自动接住客户在私信里的回复 → 生成话术 → 就地发出。复用首触 web 通道的整套发送机器, 新写「红点像素捕获 / 点开会话读消息 / web 就地回复」三段。 本页 = ① 第一个案例 · ② 0→1 原理图 · ③ 批量统计 + Bad Case + 优化进展 · ④ 下一步待办。
日期 2026-06-24 账号 有大有小 (shawsnk) · 9535e31c 通道 第 4 条·浏览器自动回复 首触自动发 ✅ 已上线运行 派单时效 ≤10min 新鲜窗口 回复·发送 ✅ 实测 4/4 通 回复·捕获 🚧 已部署 agent · 读取收尾中 回复模式 ⚙️ both 全自动(监控中) 更新 2026-06-25
一句话结论:后端(找待回 → chatReply 生成草稿 → 置信度门 → 回执)通道无关、现成可用; web 发送复用首触 process_web 已实测 100% 发出;web 捕获已部署到 agent、`capture` 只读模式跑起来了—— 红点检测准、固定坐标自动开私信、点开会话读消息通路打通,剩"点开后读对【对方昵称+对方那条回复】"这一个读取精度收尾点。

2026-06-25 更新 · 进展 & 当前卡点

今日进展

派单 ≤10min 新鲜窗口账号设 fresh_window_minutes=10:只 claim「评论入库 ≤10min」的新鲜 lead,超窗不发("不满足时效性的不发送")。✅已设
agent 版本根因云电脑跑的是旧版 agent(横幅无 v=)→ 没有自动回复分支,CAPTURE=1 配了也不读私信。已更新到 v=2026-06-24+captcha-char-sample✅已修
自动回复部署到 agent.env 配齐 CAPTURE=1 / MODE=capture / AUTOOPEN=1 / C_DM_ICON / LIST_X·Y,agent 每 15s 自驱开私信→红点检测→点开会话读。✅运行中
固定坐标自动开私信私信是焦点敏感右侧浮层,手动跑会失焦收起;改用固定坐标 (0.939,0.109) 程序自开自截,无人值守成立。✅已修
滚动落点 / 滚回顶部滚轮要落在【会话行内容】(x≈0.64)才滚列表、不穿透到背景抖音页;每轮开跑先滚回列表顶部,避免接着上轮位置往下漂漏掉最新;刷屏数 5→3。🚧调试中
切 both 全自动发读取通路跑起来后,MODEcaptureboth:新捕获到客户回复 → 生成草稿 → 直接自动发出,不再经人工审。靠 Lark 回执卡监控、发错随时改回 capture 急停。⚙️已开·监控中
恢复派单账号 dispatch_paused_until 之前被设到 2030(无限期暂停)→ 首触派单实际停了;已清回 null 解除暂停,保留 fresh_window_minutes=10(只发评论→触达 ≤10min 的新鲜 lead)。✅已恢复
公开报告上线本页发布到 upio.ai,团队/客户可直接看。✅已上线

当前卡点(capture 只读模式,安全,不会误发)

① 头号卡点 · 点开会话后读取精度:点开红点会话后,VL 有时读到的是我们自己账号名「有大有小」(头部)+ 我方开场白,而不是对方昵称 + 对方那条回复(实测 nick 读成"有/大云"、preview 读成我方开场白)。读不对昵称就匹配不上 by_name → 真回复会被跳过。需要再调聊天窗读取区(CHAT_L)与提示。
② 缺真回复测试样本:当前收件箱里待回的真客户回复已被手动回过、红点消了,剩下的红点多是"我方开场白无回复"的会话——不是好测样本,看不出读取调没调对。需要等一个新的真客户回复来对着日志把读取调准。
③ 重复草稿风险:VL 每次读字略有差异 → 同会话可能产生多条客户消息/草稿。正式 both 同轮"捕获→即发→红点消"可缓解,但仍需 record_dm_inbound 去重加固。
④ 环境 · 网络间歇抽风:运营本机到 Supabase/GitHub/paste.rs 的 fake-IP 间歇 ECONNRESET/SSL 断流,拖慢查库与脚本下发(已用重试+空读重试+后台循环硬扛)。
当前模式:MODE=both 全自动发(已开)。新捕获到的回复会直接发给客户、不再经人工审。 因读取精度卡点未完全收尾,偶尔可能自动发出答非所问/重复的回复(收不回)——务必盯 Lark 回执卡,发错立刻改回 MODE=capture 重启急停。

1 第一个案例 · 铁匠铺掌柜(自动回复全链路跑通)

客户在首触私信下追问「什么材料」→ 系统捕获写库 → chatReply 结合对话上下文生成话术 → 置信度门放行 → web 就地发出 + 气泡核对。

客户
铁匠铺掌柜
河南·济源 / 抖音号 891151666
触发
客户主动追问
首触后回复「什么材料」
结果
✅ 气泡确认发出
OCR 身份门 match 0.98

对话还原

有大有小(首触·脚本自动发)
你好,掌柜。视频里那个延伸书桌挺实用的,胡桃色配灰很耐看,想给你做套配套的收纳方案。
铁匠铺掌柜(客户回复 → 被自动捕获
什么材料
有大有小(chatReply 自动生成 → 自动发出
你好,掌柜。视频里那个延伸书桌挺实用的,胡桃色配灰很耐看。284 一平全包板材+五金+柜门+安装,多层板基材配 PET 肤感门,耐用好打理。你家是新房还是翻新?
全链路日志(节选):
[红点像素检测] 右侧面板找到 1 个红点[点开会话] 读聊天窗record_dm_inbound(写 role=customer)→ cron chatReply 生成草稿(approved) → claim_dm_repliesprocess_web(sec_uid 直达主页 → 身份门 0.98 → 私信面板 → 发 → ✅气泡核对)→ complete_dm_reply(写 role=ai sent)。全程零搜号、零人工。

同批 1507971106 / 917 同样捕获→生成→发出;发送侧实测 4/4 全通,证明发送机器在 web 上稳定可靠。

2 0→1 逻辑原理图

两层:宏观自动管线(客户回复 → 发出,全 cron + 公告板驱动)+ 微观 web 捕获/发送流程(脚本在 Edge 里逐步点)。

宏观 · 自动回复管线(与首触零冲突、独立队列)

①客户回复
在私信里回了我们一句
②捕获 (S1)
云电脑红点像素检测
+点开会话读消息
每 3min
③写库
record_dm_inbound
role=customer
④生成
cron 找待回
chatReply 出草稿
5min+webhook
⑤置信度门
护栏词/兜底串拦截
→approved/needs_human
⑥认领
claim_dm_replies
(账号锁,15min回收)
⑦发送 (S3)
process_web 就地回
⑧回执
complete + Lark 卡
公告板模型(无直连):Vercel cron 写 dm_reply_drafts,云电脑 agent 主动来认领 claim_dm_replies, 没有任何节点持有云电脑的直连。与首触完全独立的队列(首触走 dispatch_queue,回复走 dm_reply_drafts),互不抢。

微观 · web 捕获流程(本次新建的关键段,"只读红点")

focus Edge
置前
固定坐标开私信
点 (0.939,0.109)
右侧浮层展开
红点像素检测
只扫右侧面板区
找 #FE2C55 圆点
点开红点会话
列表小条字挤→
点进聊天窗读
VL 读消息
聊天窗里对方
最后一条+昵称
匹配+写库
by_name 匹配
record_dm_inbound
为什么不直接 DOM / API:抖音网页私信无稳定 read API、且 Fly 海外 IP 被封;云电脑国内 IP + 真鼠标点击天然绕过反自动化。 为什么不读列表小条:列表行字小密集,VL 读不稳(误读昵称/串行)→ 改"点开会话进聊天窗读",字大清楚。
# 文件(worker/scripts/wuying-dm/)
douyin_dm_web_capture.py   # 新建:红点像素检测 + 点开会话读消息 + 写库
douyin_dm_web_reply.py     # 新建:web 就地回复(复用 process_web,关注/点赞关)
douyin_dm_autoreply.py     # 改:capture/send 按 AKKE_DM_SCRIPT 走 web 分支
wuying_poll_agent.py       # 零改动:subprocess 调 autoreply,自动走 web

3 批量化执行统计 · Bad Case · 优化进展

发送实测
4/4
全部气泡确认发出
身份门
0.98
每条 OCR match≥0.98
本账号已发记录
132
by_name 匹配池
红点检测
精准
锁右侧面板后 1 红点=1 真回复

0→1 过程踩到的 Bad Case(按"现象 / 根因 / 优化 / 进展"):

现象根因优化方式进展
VL 把没回复的会话(青山不归客/童)判成"未读"→ 给没回的人误发让 VL 对整列判 unread 布尔不可靠,把"我们自己的开场白"当客户回复① 改红点像素检测(只认 #FE2C55 小圆点)② we_sent_last 指纹兜底:预览=我们最后发的就排除(短回复不误伤)✅已修
草稿开头"你好,昨天。"——把时间戳当成称呼列表预览带时间尾巴"你好 · 昨天"被当客户消息写库_strip_ts 剥掉尾部「· 时间」再写库✅已修
读到的全是"抖音精选/小红书/页面标题",不是会话假设会话列表在屏幕左侧,实际在右侧浮层,扫错了区域锁定 PANEL_L/R 只扫右侧私信面板,排除背景主页✅已修
截图截到的是个人主页、不是私信focus_douyin 抢到了"主页"那个标签页手动模式不抢焦点;自动模式自开浮层后立刻截✅已修
手动跑永远读不到私信私信是焦点敏感浮层,切到 PowerShell 就收起AUTOOPEN+固定坐标(0.939,0.109):程序自己 focus→点开→立刻截,全程不失焦✅已修
红点抓到了,但读成隔壁行的"什么材料的板材"列表小条裁剪串到上一行 / 串进右边聊天窗大方向改为点开会话进聊天窗读(字大清楚),并收窄扫描区排除聊天窗🚧收尾
点开会话读到"律公约》"(页脚) / 滚动太快误点别的会话聊天窗裁剪左界偏 / 多红点时连续点击节奏太快CHAT_L 裁准聊天窗;点击间加确认+间隔,只点红点那一行🚧进行中
同一客户生成多条草稿反复手动跑捕获,VL 每次 OCR 略不同→多条客户消息→多草稿正式 both 模式同轮"捕获→即发→红点消",同会话不重抓;DB 去重加固🚧监控
本机查库/传脚本间歇失败(ECONNRESET/SSL)运营本机到 Supabase/paste.rs 的 fake-IP 间歇抽风查询加重试+空读重试;传脚本多服务+循环重试⚠️环境
.env 配了 CAPTURE=1 但 agent 不读私信云电脑跑的是旧版 agent(横幅无 v=),没有自动回复分支去读这个开关更新 agent 到 v=2026-06-24+...(含自动回复分支);横幅有 v= 才算更新成功✅已修
点开会话后 nick 读成"有/大云"、preview 读成我方开场白聊天窗读取区读到了我们自己账号名(头部)+我方开场白,不是对方昵称+对方回复CHAT_L 读取区到对方那条气泡;昵称读对才能匹配 by_name(需真回复样本验证🚧头号卡点
滚的是抖音背景页、不是私信列表 / 每轮接着往下漂滚轮落点在徽标/缝隙处穿透到背景页;上轮停在下面本轮接着滚漏掉最新滚动落点改到【会话行内容】(x≈0.64);每轮开跑先滚回列表顶部;刷屏 5→3🚧调试中

规律:web 自动化的坑几乎都在"定位对区域 + 读对那一行"——红点像素检测解决了"哪些行要处理","点开会话读聊天窗"解决了"读什么内容",剩两个收尾点都在后者。

4 下一步待做优化

NOW · 读取精度收尾
  • 头号:点开会话后读对【对方昵称 + 对方那条回复】——现在会串到我方账号名/开场白,调 CHAT_L 读取区
  • 等一个真客户回复样本,对着日志把读取调准并验证能匹配 by_name
  • 滚动落点(行内容 0.64)+每轮滚回顶部 已加,盯"累计去重"随滚增长确认生效
LATER · 质量&扩展
  • chatReply 短回复兜底 bug(客户≤5 字易吐"网络卡了下")
  • 长回复预览截断 → 点开会话已读全文,可去截断限制
  • 复制到其他 web 通道账号(同套脚本,只调坐标)
  • 评估 DM read API(国内 IP)做更稳的捕获兜底

生成于 2026-06-24 · 账号 有大有小(shawsnk) · 代码 worker/scripts/wuying-dm/ · 首触自动发已上线运行,自动回复发送已实测通、捕获收尾中。