DM 私信自动回复 · 0→1 复盘

抖音私信双向闭环 · 无影云电脑通道 · 数据快照 2026-06-19(更新至 2026-06-23:both 全自动链路打通 · 就地回复不搜号 · 三通道同机串行,详见 §5)· 部署见 部署指南
✅ both 全自动链路打通(06-23) 就地回复 · 不搜号 三通道同机串行 · 自动回复最优先 齐活:DM首触 + both + route-B
01 · 第一个跑通的案例

客户「QQL」:从问"能发设计图吗"到自动回复发出

2026-06-19,账号小文(野荞)给客户 QQL 发了开场白;QQL 回了一句五个字的问题。系统自动捕获 → 生成回复 → 按抖音号精确找到本人 → 发出,全程无人工。这是整套链路第一次端到端跑通。

你好,哈哈这条挺多人催。主卧套完全可以做,咱们衣柜、床头柜、梳妆台一体设计,收纳和颜值都能拉满。你家是几室几厅?
① AI 开场白 · 小文(野荞)发出 · 已读
能发一下设计图吗
② 客户 QQL 回复(系统自动捕获 → 写回 messages)
可以的,主卧套的实拍和户型清单可以发——抖音图压糊了 方便给个 v 让设计师按你家面积发你 你家几室几厅?
③ 系统自动生成 + 发出 · 按抖音号 660311342 搜索 + 号核身 conf 0.98 命中本人 · ✅ 已确认气泡发出
关键点:QQL 同名账号很多,按昵称搜会发错人(首次测试就发错了一个同名陌生人);改用抖音号反查 + 号精确核身后,OCR 比对到主页「抖音号:660311342」与目标一致,确定本人才发,根治撞名。

样本 2 · 系统生成草稿(半自动 · 人工确认发)

客户 w@y 回了「4房两厅」,系统据上文(160 平意式轻奢报价铺垫)自动生成接话草稿——接住户型、给方向、留报价钩子。话术质量达标;当前通道半自动,由人工确认后发出(both 全自动暂缓,原因见 §3)。

你好,哈哈这条挺多人催,160平做意式轻奢确实能出大效果,标配落地大概七八万,高配十万内能收住,实际按方案走,你家户型是几室几厅?
① AI 开场白 · 已发出
4房两厅
② 客户 w@y 回复(自动捕获)
4室2厅160平空间很舒展,意式轻奢正好压得住场子~ 主卧可以做衣帽间、客餐厅拉通开放式,整体效果会很高级。全屋定制点位多,具体报价得看你做的板材和五金。
③ 系统自动生成的接话草稿(命中"涉及价格"护栏 → 自动改写口径后再发)· 人工确认发出
说明:这是话术质量样本,不是"全自动直发"案例——草稿由 cron 自动生成,发送目前走人工把关(见 §3「both 暂不安全」)。截至本快照,系统记账里确认完成直发的仅 QQL 1 例,其余草稿多为下方状态行误捕获/短回复兜底,不计入真实对话。
02 · 0→1 逻辑原理图

一条客户回复,如何被自动接住并回出去

三个角色协同:无影云电脑(GUI 操作抖音)、Vercel 云端(生成话术)、Supabase(共享状态)。无影只负责"读屏 + 发送",大脑(判断/生成/护栏)在云端。全程只动 DM,不碰首触/反评/二次触达。

① 无影 · 捕获
扫私信会话列表(UIA只读)
三道过滤定位真回复
② 写回 DB
record_dm_inbound
messages(role=customer)
③ 云端 cron 生成
找待回对话(24h窗口)
chatReply 出草稿
④ 护栏改写
价格/微信/负面
按口径自动改写再发
⑤ 无影 · 发送
claim → 抖音号搜+号核身
找对本人才发
⑥ 回写 + 回执
complete_dm_reply
webhook 推群:回了谁/发了啥
图例:蓝=无影云电脑(GUI) · 紫=Vercel 云端(LLM) · 绿=完成回写。三道过滤 = ①指纹比对(剔我方消息) ②系统消息白名单(剔"只能发一条"等) ③spam/表情/无关剔除。

关键设计原则

原则怎么落地
大脑在云端无影只读屏+发送,话术/护栏/判断全在 Vercel chatReply,无影不跑 LLM
复用现成、不造轮子捕获复用反评的列表读取脚本;发送复用首触的"搜人+号核身+发"链;新增仅一个编排脚本
独立车道、零干扰独立表 + 独立 RPC,串行窗口锁排队,不抢首触/反评/二次触达的账号与窗口
开关分层云端总开关 + 无影支线开关 + capture/both 模式,可逐级灰度,一键全停
03 · 批量化执行 · 统计 / Badcase / 优化进展

跑通即踩雷:十余类 badcase 全在实机暴露并逐个修掉

当前处0→1 验证完成、批量化刚启用阶段——下方统计为已验证的单条 + 链路指标,大批量数据待积累(不虚构)。真正的价值在 badcase 清单:把这套逻辑铺开会撞到的坑,已逐个修到 / 在修。截至本快照系统记账里确认完成直发仅 QQL 1 例,另生成 25 份草稿但多为状态行误捕获 + 短回复兜底(见下表),正是这些坑卡住了全自动。

1
端到端验通(QQL)
13
单轮扫到会话行/正确分流
0.98
号核身命中置信度
24h
时效窗口(不翻老对话)
说明:开场白(首触)已规模化在跑(单账号日限 10-20、多账号);本复盘聚焦其上叠加的"双向回复"这层。回复量随客户回复自然产生,铺开后再补转化漏斗(回复率/加微率)。

Badcase × 优化方式 × 进展

Badcase(批量会撞到的坑)对应优化进展
撞名发错人:按昵称搜,同名多→发给陌生人(首测即中) 抖音号反查(共享缓存 sec_uid→唯一号)+ 按号搜 + 主页号精确核身,号一致才发 已修·已验
发送号搜索被风控降权:同一抖音号别的号搜得到、发送号怎么搜都搜空 → 大量 wrong_user(非主页);根因是发送号连日高频「搜人+发」被抖音悄悄削搜索结果,不是撞名/坐标/对方 block 身份门已正确拦截(搜空→落非主页→不误发);运营侧先刷新登录(重扫码/换 cookie)→真风控则冷却 24–48h + daily_limit 30→15–20 拉长间隔→持续不恢复换 messaging 账号。判别:手动连搜 5–6 个号,大部分搜不到=账号级降权 诊断清·方案定(2026-06-20)
短回复全漏:列表预览 <12 字被丢,"能发设计图吗""四个房间"全捕获不到 解析阈值 12→2,时间行才是强锚点,预览非空即取 已修·已验
相关性闸太窄:要求含装修词,"能发设计图吗"无关键词被当噪声丢 改为只挡 spam(互粉/涨粉)+ 系统消息,真人回复一律放行 已修·已验
表情贴纸误抓:客户发 [龙舟载福] 贴纸被当文字回复 纯 [xxx] 表情消息跳过,不抓不回 已修·已验
误把自己开场白当回复:指纹偶尔对不上→把"你好…刷到你…"当客户回复 开场白签名兜底("你好"开头且含"刷到你"→跳过),不误伤客户"你好"真回复 已修·已验
翻老对话 necro-bump:5 月的老回复被翻出来自动回,很怪 RPC 加 24h 时效窗口 + 新的先回,老对话一律跳过 已修·已上线
回复重复开场白:生成的回复开头照搬开场白"你好,哈哈这条挺多人催" 本案人工改"可以的"后发;prompt 层根治待做(见下一步) 临时绕过·待根治
会话状态行被当客户回复:铺开后实测列表预览取到「关闭会话」「在线 / 1小时前在线」「09:58」乃至 26:00 等会话状态/时间文本,被写成 customer 消息并触发草稿——单个会话刷出数十条噪声 inbound(阈值 12→2 + 预览非空即取放得过宽,状态/时间行没全过滤) SYS_NOTICE 黑名单 + 时间/「在线」/「关闭会话」正则前置过滤,状态行一律判 no_reply 不写库;身份门 + 24h 窗口已挡住误发,但仍在白烧 LLM 生成草稿,需从捕获端根治 已暴露·修复中(2026-06-21)
自己发的回复被回读成客户消息:发出后我方气泡又被 capture 当成客户新回复写回("误把开场白当回复"的变体,指纹偶尔对不上) 指纹比对 + 开场白签名兜底已覆盖大部分;待补"我方 outbound 全文指纹"严格去重,避免自问自答 部分已挡·待加固
短回复生成崩兜底 → both 暂不安全:客户回 ≤5 字("4房两厅""L型")时 cron 草稿系统性退化成 这边网络卡了下 稍等我回你~ 兜底话术,且直接落 approved 等发 AKKE_DM_AUTOREPLY_MODE 现只跑 capture(只捕获不自动发);热 lead 靠人工改写 dm_reply_drafts.draft + 手动 send 发兜。根治 = 先治 chatReply self-check 把短回复全削成 fallback,再开 both 已定位·待根治(2026-06-20 文哥机)
迁移 / 工程坑:RLS policy =ANY(set-returning) 致迁移失败 policy 改 IN (SELECT …) 已修
坐标占位符没填.env 出厂带 AKKE_C_DM_INBOX=<nx>,<ny> 没换真值 → 解析失败=不导航 → 扫到推荐 feed(视频标题)当回复 量真实「全局私信图标」千分比坐标(右上角,非用户主页那个发送私信键)填进去;_cappos.py 一量即出 已修·已验(2026-06-20)
点私信仍读 0 行:抖音点开私信只是空框,会话列表不渲染 → UIA 读 列表 0 行 _goto_dm_inbox第二下点击 AKKE_C_DM_FIRST(第一个会话)撑开列表;只读捕获、仅标已读不发送 已修·已验(PR #439, 2026-06-20)
每轮都扫占窗口:capture 每个 loop 都去扫私信、长时间占抖音前台,抢 DM/route-B 的发送窗口 节流 AKKE_DM_AUTOREPLY_INTERVAL(默认 12h=每天 2 次):启动先扫一次、之后每 12h 一次 已修·已上线(PR #438)
脚本下不到无影raw.githubusercontent.com 被机房连接重置、iwr 撞旧 TLS、update.bat 常缺 改走 gist.githubusercontent.com raw(不同域、没被墙)+ curl.exe;长链拆短变量避 PowerShell >> 折行 已修·已验(2026-06-20)
04 · 下一步待做的优化

从"能跑"到"跑好、跑稳、跑量"

🟡
根治短回复崩兜底(解锁 both 的前置)重点
客户回 ≤5 字时 chatReply self-check 把草稿全削成"网络卡了"兜底——这是 both 现在不敢开的根因。先治 self-check,再谈全自动。当前热 lead 靠人工改写 draft 手动发兜。
🟡
抖音号反查覆盖率 + 发送号搜索健康重点
两面卡铺量:①无缓存号回退昵称搜=撞名风险,提高 enrich 命中率(预热缓存)、无号宁可不发;②发送号连日高频搜+发会被风控降权(搜空→wrong_user),需冷却降频/换号轮换护住搜索健康。
🟡
全自动(MODE=both)小范围灰度重点
暂缓——前置是上面两项(短回复兜底 + 号反查/搜索健康)。治好后再单账号开 both 跑几天,盯 webhook 回执看话术质量+发对率,再多账号铺开。
🟡
chatReply 根治"重复开场白"重点
回复别再照搬开场白开头(你好…哈哈这条挺多人催);调 prompt / 跟进态去问候化,让回复像真人接话。直接影响客户观感。
inbound 回写自动化
目前靠 capture 扫列表;check-replies 补云电脑通道,减少对"窗口停在私信列表"的依赖。
长回复取全文
列表预览截断 ~60 字;长回复点进会话 dump 全文再喂 LLM,避免上下文缺失。
捕获端过滤状态行/时间戳
扩黑名单 + 正则前置过滤「在线 / 关闭会话 / 时间戳」,状态行一律不写库,止住白烧 LLM 的噪声草稿(铺量后最高频的脏数据来源)。
列表翻页捕获
capture 当前只读可见会话行;加滚动/翻页,避免回复多时漏掉靠下的。
各机校准两坐标 + 转化漏斗
每台云电脑量AKKE_C_DM_INBOX(私信图标)+AKKE_C_DM_FIRST(第一个会话,撑开列表);部署照 部署指南。铺量后补回复率/加微率统计,量化双向闭环价值。
🟡 = 本周重点(直接卡"能不能安全铺量");○ = 增量优化。下方 §5:04 里标「暂缓」的 both 全自动,已于 06-23 打通。
05 · 2026-06-23 更新 — both 全链路打通

🎉 整条 both 链路打通 — 三通道同机串行齐活

06-21 还卡在「both 暂缓 · 半自动」,06-23 把根因补齐后 both 全自动真打通:客户回私信 → 自动捕获 → 生成(带护栏口径)→ 在收件箱就地点开 TA 发(不搜号) → 回写。同机 DM 首触 + DM 自动回复 + route-B 三条按窗口锁串行、自动回复最优先

全部齐活清单(小文 / 野荞 云电脑实测)

通道 / 配置状态
DM 首触(派单发私信)跑 · claim=2 · 窗口锁 on
DM 自动回复 both(本报告这条)mode=both · 每 1min · capture 13 行
route-B 潜在触达起 · watch+consume 两窗口
RC 反评关(同窗口跑 route-B 必须关 RC,否则抢窗口)
派单口径daily_limit=10 · fresh_window=10min(只派评论抓到≤10min 的新鲜单,空了不回退老单)
both 护栏口径客户没问不提价、问了原样发(PR #484)

三通道分配:同号同窗口、分时抢占

一台无影只有一个抖音前台窗口,三条都靠它驱动 → AKKE_WINDOW_LOCK=1 串行。同一 lead 任一时刻只在漏斗一段,不在「人」上撞、只在「窗口」上抢;客户一回复就出二触池、进自动回复,天然不重碰。优先级按时间敏感度:

优先级通道为什么
① 最高DM 自动回复(both)客户正在对话里等,回复延迟直接砸转化;接窗口锁置 .dm-want、route-B 让位、轮内排在首触前(PR4)
② 次DM 一触(首触)新增高意向 lead,走量主力
③ 垫底route-B 二触捞已 ghost 的人,窗口空 + 鲜视频才跑;自动回复 / 首触一来就让位,最坏等一个在飞单位

就地回复 替代 搜号发:绕开 wrong_user / 风控降权

06-21 的「按抖音号搜人 + 号核身发」撞上 发送号搜索被风控降权(怎么搜都搜空 → wrong_user,见 §3)。06-23 自动回复改走 在私信收件箱直接点开 TA 就地发——对方已在你收件箱、刚回过你,压根不用搜号,结构性绕开撞名与搜索降权。

今日两个卡点(实机暴露 → 当场修)

卡点根因修复
capture 只读 1 行 / 就地回复 no_row:收件箱明明 10+ 会话,脚本只认出 1 行,要发的人全「找不到会话」 会话行靠「名字 + 时间 + 预览」三连识别,时间正则 _TIME_RE 认「昨天 / 天前」却漏「前天」;收件箱里发了 2 天没回的会话时间全是「前天」→ 全军覆没 补「前天」+ 日期格式(PR #495 + gist 已分发)
私信列表撑不开:点完私信图标后,再点「第一会话」撑开列表那一下点空了 AKKE_C_DM_FIRST 归一化坐标量偏(879 落到屏幕偏右、点空),左侧会话列表没渲染 重量坐标 879→717(实测第一会话头像位)→ capture 1 行→13 行
capture 时效太松 / 占窗口:旧 12h 节流远非「回了就回」 红点门控扫描零 LLM 成本,旧 12h 大节流没必要 默认 12h→3min,小文实测压到 1min(AKKE_DM_AUTOREPLY_INTERVAL=60
坐标 + _TIME_RE 两个根因都补上后,小文云电脑 capture[红点门控]1 行13 行,both 抓回复 + 就地发链路全通。下一步真实验证:等真有客户回私信,盯日志出 未读 M>0 + [inbound] + [reply] sent(不再 no_row)。