accounts.last_poll_at 心跳(≤5min=在线),不看窗口/进程。
| 维度 | 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.py | douyin_dm_web_capture.py |
| 成熟度 | ✅ 已验证(饭粒/野荞/文哥在跑) | 🚧 已部署运行,读取精度收尾中 |
accounts 行 channel_pref=cloud_pc + status=active + type=messaging(后端才会给它生成草稿);③ 后端 Vercel DM_AUTO_REPLY_ENABLED=1(全局,已开)。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 # 坐标量测工具
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> # 第一个会话坐标(撑开列表,可选)
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] 小胡: <客户说的话>列表 0 行=抖音没停在私信列表/窗口缩成"抖音挂件"/坐标没量对 → 把抖音拉回前台最大化 + 重量坐标。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
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 # 发送按钮
# 通用量法:鼠标移到目标上跑(私信关着时量图标)
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
饭粒(一筑·全屋定制,PC 客户端版,account c5d236e1…)的实测状态——部署其实到位且捕获很旺,问题出在"发送"那一环没开。
| 根因 | 判别 | 修复 |
|---|---|---|
| ① MODE=capture(只捕获不发) 最可能 | 有 === capture 日志、草稿一堆 approved,但 sent 几乎 0 | findstr 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.env 改 AKKE_DM_AUTOREPLY_MODE=both → Get-Process py,python|Stop-Process -Force; py wuying_poll_agent.py 重启capture 急停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)。