DM 自动回复 · 部署指南(PC 客户端 + 浏览器 Edge)

云电脑自驱 DM 自动回复的端到端部署:客户在私信里回复 → 捕获写库 → chatReply 生成话术 → 就地发出。 两条通道:PC 客户端版(UIA 读私信列表)和浏览器 Edge 网页版(红点像素检测 + 视觉读取)。 本指南含两通道具体操作 + 通用诊断;并重点说明饭粒"部署了但没实现自动回复"的根因与修复。
更新 2026-06-26 通道 PC 客户端 / 浏览器 Edge agent 版本 ≥ v=2026-06-24 配置 C:\akke-wuying\wuying-dm\.env
一句话原理:poll agent 每轮串行跑「捕获(扫私信列表) → 生成草稿(后端 cron) → 发送(就地回复)」。 capture 模式 = 只捕获+生成草稿、不发(安全,供审);both 模式 = 捕获+自动发判活只认 accounts.last_poll_at 心跳(≤5min=在线),不看窗口/进程。

0 先选通道 · PC 客户端 vs 浏览器 Edge

维度PC 客户端版浏览器 Edge 网页版
看私信用红点门控(UIA):UIA 读会话列表,未读靠会话行右缘的数字徽标 TextControl(已读行没有)判,再读预览文本红点像素检测:UIA 读不到徽标,改截图找抖音红 #FE2C55 圆点 + 点开会话 VL 读消息
红点机制同样靠"红点(未读徽标)"当闸,但走 UIA 读徽标数字(CEF 构建暴露在树里)同样靠"红点",但走 像素颜色检测(Edge 网页 UIA 不暴露徽标)
发送方式就地回复 douyin_dm_reply_inbox.py就地回复 douyin_dm_web_reply.py(开私信→VL定位昵称→点开→打字→发)
适用抖音 PC 客户端可登的号只能/只在网页版操作的号(如有大有小 shawsnk)
捕获脚本douyin_inbox_uia.pydouyin_dm_web_capture.py
成熟度✅ 已验证(饭粒/野荞/文哥在跑)🚧 已部署运行,读取精度收尾中
共同前提:① agent 版本 ≥ v=2026-06-24(旧版没有自动回复分支,配了也白配);② accountschannel_pref=cloud_pc + status=active + type=messaging(后端才会给它生成草稿);③ 后端 Vercel DM_AUTO_REPLY_ENABLED=1(全局,已开)。

1 PC 客户端版 · 部署步骤

① 脚本文件(放 C:\akke-wuying\wuying-dm\

wuying_poll_agent.py      # 主 agent(必须 ≥ v=2026-06-24)
douyin_dm_autoreply.py    # 编排器(capture + send)
douyin_inbox_uia.py       # UIA 只读扫私信列表(捕获)
douyin_dm_reply_inbox.py  # 就地回复发送(不搜号)
douyin_dm_grounded.py     # 冷启动校准依赖(send_arrow/输入偏移)
measure_dm_coords.py      # 坐标量测工具

② .env 配置

AKKE_ACCOUNT_ID=<该号 account_id>        # 必须==云电脑登录号
AKKE_DM_AUTOREPLY_CAPTURE=1              # 自动回复总开关(不设=不跑)
AKKE_DM_AUTOREPLY_MODE=capture          # 先 capture 只读;验稳后 both
AKKE_DM_AUTOREPLY_INTERVAL=180          # 扫收件箱间隔(秒),默认3min
AKKE_DM_AUTOREPLY_TIMEOUT_SEC=240       # 捕获子进程超时(防挂死冻整 agent)
AKKE_C_DM_INBOX=<x,y>                    # 私信图标坐标(measure 量,千分比0~1000)
AKKE_C_DM_FIRST=<x,y>                    # 第一个会话坐标(撑开列表,可选)

③ 量坐标

抖音 PC 客户端登录该号、最大化、前台,停在【私信会话列表】
py measure_dm_coords.py → 鼠标移到「私信图标」回车(量 AKKE_C_DM_INBOX) → 移到「第一个会话」回车(量 AKKE_C_DM_FIRST) → 输 Y 自动写 .env

④ 启动 + 验证

# 杀旧进程(防幽灵 agent 抢单)再起新的:
Get-Process py,python | Stop-Process -Force
py wuying_poll_agent.py
正常横幅:=== wuying_poll_agent v=2026-06-24+... account=xxx… every 60s claim=3 ===
正常捕获日志:[..] 收件箱捕获(每3min一次) mode=capture=== capture: 列表 13 行, 已发记录 2 人 ===[inbound] 小胡: <客户说的话>
改 .env 后必须重启 agent(热改无效)。列表 0 行=抖音没停在私信列表/窗口缩成"抖音挂件"/坐标没量对 → 把抖音拉回前台最大化 + 重量坐标。

2 浏览器 Edge 网页版 · 部署步骤

① 脚本文件

wuying_poll_agent.py        # 同上,必须 ≥ v=2026-06-24
douyin_dm_autoreply.py      # 编排器(按 AKKE_DM_SCRIPT 含'web'走 web 分支)
douyin_dm_web_capture.py    # 红点像素检测+点开会话读消息(捕获)
douyin_dm_web_reply.py      # 就地回复(开私信→VL定位昵称→点开→打字→发)
douyin_dm_web_grounded.py + douyin_dm_grounded.py  # 低层原语(VL/截图/中文键入)
douyin_inbox_uia.py         # web_capture 复用其 load_sent_dms/match_name

② .env 配置(浏览器版关键是 AKKE_DM_SCRIPT 指 web)

AKKE_ACCOUNT_ID=<该号 account_id>
AKKE_DM_SCRIPT=douyin_dm_web_grounded.py   # ★命门:决定走 web 捕获/发送
AKKE_DM_AUTOREPLY_CAPTURE=1
AKKE_DM_AUTOREPLY_MODE=capture             # 先 capture;验稳后 both
AKKE_DM_AUTOREPLY_INTERVAL=180
AKKE_WEB_DM_AUTOOPEN=1                      # 自动点开私信浮层
AKKE_WEB_C_DM_ICON=0.9387,0.0619           # 私信图标(归一化0~1,量准!)
AKKE_WEB_DM_LIST_X=0.64                     # 滚动落点=会话行内容(非徽标)
AKKE_WEB_DM_LIST_Y=0.40
AKKE_WEB_DM_MAX_SCROLLS=3                   # 刷几屏
AKKE_WEB_C_REPLY_INPUT=0.7809,0.5975       # 聊天窗输入框(就地回复)
AKKE_WEB_C_REPLY_SEND=0.9645,0.5994        # 发送按钮

③ 量坐标(归一化 0~1,量法见下)

# 通用量法:鼠标移到目标上跑(私信关着时量图标)
py -c "import ctypes,time,pyautogui; ctypes.windll.shcore.SetProcessDpiAwareness(2); W,H=pyautogui.size(); print('5秒内移到目标上'); time.sleep(5); p=pyautogui.position(); print('%.4f,%.4f'%(p[0]/W,p[1]/H))"
要量:私信图标(私信关着时量)→AKKE_WEB_C_DM_ICON会话行内容(列表中间某行)→LIST_X/Y;打开聊天窗后量输入框+发送按钮REPLY_INPUT/SEND

④ 单条验就地回复(强烈建议先跑)

py douyin_dm_web_reply.py "<某个在私信列表里的昵称>" "你好,测试一下"
预期:[私信] 点图标 → 私信打开 → 滚回顶定位昵称 → 点开 → 核对对象 → 打字 →(回车确认)→ 发送 → status = sent + 屏幕上真发出。

⑤ 启动 + 验证

Get-Process py,python | Stop-Process -Force
py wuying_poll_agent.py
浏览器版前置三件套:Edge 登录该号网页版 + 窗口最大化前台 + 输入法英文。三个对了它才自己开私信、读红点、回复。

重点 · 饭粒"部署了但没实现自动回复"

饭粒(一筑·全屋定制,PC 客户端版,account c5d236e1…)的实测状态——部署其实到位且捕获很旺,问题出在"发送"那一环没开

agent 心跳
在线
last_poll 1min 前
捕获(7天客户回复)
461 条
capture 在猛写、部署到位
草稿·待发(approved)
55 条
生成了却积压没发
实际发出(sent)
仅 3 条
自动回复几乎没发
诊断结论:饭粒不是"没部署",而是"捕获+生成都正常,但没自动发"。

✅ agent 在线(心跳 1min)、✅ 捕获在跑(7 天 461 条客户回复写库)、✅ 后端在生成草稿(55 条 approved + 52 条 needs_human)—— 但 实际只发出 3 条55 条 approved 草稿全积压、没发给客户

= 自动回复链路只跑通了前 2/3(捕获→生成),最后"发送"那 1/3 没开。

根因(按可能性排)

根因判别修复
① MODE=capture(只捕获不发)
最可能
=== capture 日志、草稿一堆 approved,但 sent 几乎 0findstr AKKE_DM_AUTOREPLY_MODE .env;若 capture → 改 both 重启
② send 段报错/未起MODE 已 both,但 approved 仍不减、sent 不涨看日志 send 段是否报错(claim/就地回复/坐标)
③ 52 条 needs_human 是设计内命中护栏(价格/微信/负面)→转人工,本就不自动发这部分需人工,不是 bug;看 approved 那 55 条
④ 子进程挂死(凌晨8.5h案例)日志停在"收件箱捕获"不动、last_poll_at 心跳停 >20min杀进程重启 + 确认 AKKE_DM_AUTOREPLY_TIMEOUT_SEC=240 已配
饭粒的修复动作(按顺序):
findstr AKKE_DM_AUTOREPLY_MODE .env 看是 capture 还是 both
先抽查那 55 条 approved 草稿质量(让 Claude 拉"客户原话→草稿"配对审)——确认话术对题再开自动发
质量 OK → .envAKKE_DM_AUTOREPLY_MODE=bothGet-Process py,python|Stop-Process -Force; py wuying_poll_agent.py 重启
盯 Lark 回执卡,看 55 条积压开始被发出、sent 数上涨;发错立刻改回 capture 急停

3 通用诊断 · "部署了但没自动回复"决策树

Q1 agent 横幅有 v= 吗?(v=2026-06-24+...)
   否 → 旧版 agent,没有自动回复分支 → 更新 wuying_poll_agent.py 重启
   是 → Q2
Q2 日志有「=== capture」行吗?
   否 → 检查 AKKE_DM_AUTOREPLY_CAPTURE=1 + 重启(改 env 必重启)
   是 → Q3
Q3 capture 数字正常吗(列表 ≥1 行 / web 有红点)?
   否(0行) → PC:坐标/窗口前台; web:AKKE_WEB_C_DM_ICON 量准+私信打开
   是 → Q4
Q4 DB 该号近期有新 role=customer 消息吗?
   否 → 检查 AKKE_ACCOUNT_ID == 云电脑登录号
   是 → Q5  (捕获正常,问题在发送侧 ← 饭粒就卡这)
Q5 草稿 approved 一堆但 sent 不涨?
   是 → MODE=capture(只读不发) → 改 both 重启 / 或 send 段报错排查
   否 → 看 last_poll_at 是否心跳停(子进程挂死)
判活铁律:只认 accounts.last_poll_at 心跳(≤5min 在线)。进程活着、窗口开着也可能是子进程挂死冻了循环(饭粒凌晨 8.5h 一夜零发就是这个)——肉眼看不出,只有心跳停能暴露。

2026-06-26 · 适用 PC 客户端 + 浏览器 Edge 两通道 · 配置在 C:\akke-wuying\wuying-dm\.env · 判活看 accounts.last_poll_at · 饭粒 case 实测数据(心跳1min/7天461客户回复/55 approved/3 sent)。