.env 账号 ID 并验活 →
我方回去关掉分享开关让码失效 + 轮换 key → 旧机关机保留 7 天。
个人版(EDSP)的镜像管理,支付宝/微信小程序和 Windows/macOS/Web 客户端上都有, 但两边的界面路径、前置条件都不同,照错平台的步骤会找不到按钮。下表是官方两套流程的对照:
| 平台 | 做镜像 | 拿分享码 | 用分享码导入 | 删镜像 |
|---|---|---|---|---|
| 小程序 支付宝/微信 |
云资源 → 卡片「管理」→ 镜像页签 → 新建镜像 要先手动关机,按钮是「确认关机并创建」 |
同一个镜像页签 → 打开分享开关 → 选生成方式 | 「通过分享码导入」→ 输码 → 确定 没有「选择镜像」这一步 |
❌ 不支持 |
| 客户端 Windows/macOS/Web |
云电脑列表界面左下角「镜像管理」→ 立即创建 官方步骤里没有「先关机」这一步 |
左侧「镜像管理」→「我的镜像」→「云电脑」页签 → 找到镜像 → 打开卡片左下角「镜像码」开关,码即刻显示 | 镜像管理页右上角「通过镜像码收藏」 → 输入镜像码 | ✅ 支持 |
%APPDATA%\douyin、%LOCALAPPDATA%\douyin、
注册表 HKCU\Software\ByteDance)被一起复制过去 →
抖音判定「同一台设备挂 3 个号、从 3 个 IP 同时活动」→ 三台搜人集体软封
(搜索结果为空、但联想下拉有结果、浏览器能搜)。
更重的一层是:多个号「出现在同一台设备」会形成账号关联,某个号违规有连坐封号风险。
个人版支持把自定义镜像分享给别的阿里云账号,靠的就是镜像分享码。 两端具体点哪里按平台不同,见上面 ① 的对照表。分享码本身的规则:
C:\akke-wuying\wuying-dm\.env 里有 Supabase 数据库 key 和 OpenRouter API key,
C:\akke-edge-debug 里有抖音登录态。分享码流出去 = 别人导入镜像就拿到这些。
所以:①码只在私聊里点对点发给目标账号的操作人,别发群、别截图;
②对方导入成功后立刻回去把「分享镜像」开关关掉,让码失效;
③迁完必须找 Claude 轮换 .env 里的 Supabase key 和 OpenRouter key —— 这是收尾必做项,不是"怀疑泄露才做"。
C:\akke-wuying\ 这种自建目录里的 key,也不能假设它不会误删你要带走的东西。
要确保安全就自己手动确认目录内容,别赌这个开关的行为。
我方 Step 1–3 已完成,两个镜像都做好、镜像码已生成。接下来是接收方的 Step 4。
| 镜像名 | 对应账号 | 创建时间 | 镜像范围 | 系统盘/数据盘 | 镜像码 |
|---|---|---|---|---|---|
Yizhu0728 | 饭粒(一筑·全屋定制)c5d236e1-…69b |
07-28 22:37 | 系统盘 + 数据盘 | 60GiB / 40GiB | 见 Lark 私聊 |
xiaoxing0728 | 夏夏(小星/零星)8af08f10-…bda |
07-28 22:35 | 系统盘 + 数据盘 | 60GiB / 40GiB | 见 Lark 私聊 |
.env 里的 Supabase key、OpenRouter key 和抖音登录态。
码走 Lark 私聊点对点给到接收方操作人。
measure_nav.py 量坐标)。
找 Claude 做三件事,缺一件新机开机就可能自己发消息出去:
dispatch_paused_until 设成未来时刻(比如今晚 23:00)。dispatch_queue 里这个号 status='pending' 的残留行。dm_reply_drafts 里这个号 status='approved' 的待发回复。dispatch_paused_until 挡不住已经在队列里的单 —— 这点很容易误解。
查过 claim_dispatch 的实际定义(20260726203953_claim_dispatch_safe_comment_time_cast.sql):
它认领时只判 account_id + status='pending',
压根没有读 dispatch_paused_until(它引用 accounts 只是为了盖心跳和读时窗)。
也就是说这个字段挡的是「以后还往队列里写不写新单」,
挡不住 agent 把队列里已经躺着的 pending 行领走发出去。
pending_approved_replies()
直接查 dm_reply_drafts?status=eq.approved,同样不看暂停字段,
而且它在主循环里是绝对优先、最先跑的一条。
| 谁的机器 | 镜像名称建议 | 描述里写 |
|---|---|---|
| 饭粒(一筑) | akke-yizhu-20260728 | 饭粒 一筑全屋定制 DM+二触 环境克隆 |
| 夏夏(小星/零星) | akke-xiaoxing-20260728 | 夏夏 零星 DM+二触 环境克隆 |
C:\akke-wuying\wuying-dm 在 C 盘)。有数据盘就一起选。AKKE_ACCOUNT_ID 跑起来。导入入口两个平台不一样,别照错:
导入成功后这个镜像就出现在可选列表里,选它开新云电脑,或给已有云电脑变更镜像。
开机配置两个硬约束:
AKKE_C_*),
按旧机分辨率标定的。新机分辨率对不上又没重测 → 退回默认坐标 → 二触全部 wrong_user(点到别人主页去了)。
新机分辨率和旧机不一致时,必须在新机上跑一遍 measure_nav.py 重新量坐标。
AkkeDomDmStart 延迟 30s 拉 akke-start.ps1、
AkkeRouteBStart 延迟 120s),镜像克隆会把它们一起带过来。
所以新机第一次进桌面什么都不做也会开始发消息,那时脚本可能还是旧版、账号 ID 还没人核过。
进桌面第一件事就是先掐掉,核完再放开:
Get-ScheduledTask *akke* | Disable-ScheduledTask Get-Process python,py,msedge -ErrorAction SilentlyContinue | Stop-Process -ForceStep 5、6 都过了之后,再
Get-ScheduledTask *akke* | Enable-ScheduledTask 放开。
接着核对账号 ID。镜像是整机克隆,.env 会原样跟过来,理论上不用改,
但必须核一遍 —— 这是唯一能拦住「按 A 号领单、却在 B 号前台发」那类事故的地方:
cd C:\akke-wuying\wuying-dm Select-String .\.env -Pattern AKKE_ACCOUNT_ID
| 这台机是谁的 | AKKE_ACCOUNT_ID 必须是 |
|---|---|
| 饭粒(一筑·全屋定制) | c5d236e1-fd80-4cff-b349-506dfd09699b |
| 夏夏(小星/零星) | 8af08f10-6db5-4d83-8942-b908349efbda |
8af08f10,另一条 d7ac1384 是早就停用的手发号。
对不上就是搬错了,别自己改,先找 Claude 确认。
cd C:\akke-wuying\wuying-dm
# ① 必须先单独拉一次 update.bat 本身,再跑它
curl.exe -fsSL -o update.bat "https://raw.githubusercontent.com/upioai/wiki/main/public/akke/wuying-dm/update.bat"
.\update.bat
update.bat 的下载列表里不包含它自己,所以机器上那份会永远停在被摆渡下来那天的版本,
之后仓库里新加的文件永远拉不到 —— 而它照样会打印「all downloaded」。
[2/3] 段应该打出 11 行 OK(=当前镜像里 $files 的长度,
这个数字会随仓库演进变化,对不上先去数一眼线上 update.bat 的列表再判断);
只打 1-2 行 = 机器上是远古版更新器,按上面第 ① 条重拉一次再跑。
douyin_dm_grounded.py 是几个月前的截断版,
把整条捕获链炸掉了很久没人发现 —— 因为 DM 发送腿照常在发,看着一切正常。
update.bat 现在已经包含浏览器 DOM 通道的脚本了
(douyin_dm_web_send_dom.py / capture_dom / web_reply /
web_capture / douyin_dm_autoreply.py 都在列表里),
不用再像以前那样单独补拉。(老资料里「update.bat 只下 PC 客户端脚本」的说法已过期。)
Select-String .\.env -Pattern AKKE_DM_SCRIPT
curl.exe -fS "https://raw.githubusercontent.com/upioai/wiki/main/public/akke/wuying-dm/<文件名>.py" -o <文件名>.py但
akke-start.ps1 不在 update.bat 的列表里,它是随镜像整体带过来的,更新不到 —— 要改得单独拉。
powershell -ExecutionPolicy Bypass -File C:\akke-wuying\wuying-dm\akke-start.ps1
然后逐项对:
| # | 检查项 | 合格标准 |
|---|---|---|
| 1 | 调试版 Edge 通了 | 浏览器开 http://127.0.0.1:9222/json/version 返回版本 JSON |
| 2 | agent banner 绑对号 | account= 与 Step 5 表格一致,second_touch / rc 开关和旧机一样 |
| 3 | 抖音登的是本人号 | Edge 里抖音登录的账号,和 banner 里的 account 是同一个人 |
| 4 | 回复捕获腿活着 | py douyin_dm_web_capture_dom.py 出 web capture[DOM] + conversation-item N>0 + COMMIT 写回 |
| 5 | 开机自启真的跑成功过 两个任务都要查 |
Get-ScheduledTaskInfo AkkeDomDmStart | Select LastRunTime,LastTaskResultGet-ScheduledTaskInfo AkkeRouteBStart | Select LastRunTime,LastTaskResult两个都要 LastTaskResult=0。只看 Ready 是假验证 ——
Ready 只说明任务还在、处于两次运行之间,上一次跑崩了它照样显示 Ready。
漏查 AkkeRouteBStart 的话,二触/RC 会静默死掉而 DM 一切正常,很久都发现不了 |
| 6 | DB 侧心跳 | 让 Claude 查 last_poll_at,5 分钟内有刷新 |
| 7 | 肉眼核私信气泡 | 发出第一批后人工翻抖音私信,对方会话里真有气泡 |
sent 只代表「点了发送」。
抖音对陌生人私信有静默限流(约 24 小时冷却),命中时日志一片绿、消息根本没送到。
新机第一批必须人工核气泡。
conversation-item=0 时先别慌:如果 by_name 有数字、只有 conversation-item 是 0,
那是私信面板还没加载完的时序问题,不是登录过期(真过期连 by_name 都读不到),下一轮会自愈。
dispatch_paused_until,恢复派单。这步忘了 = 新机器一条都不发。.env 里的 Supabase key 和 OpenRouter key
—— 必做,因为对方账号已经落地的那份镜像副本收不回来(见第 ① 节 ③ 那条)。三条理由,按重要性排:
.env 里是同一个 AKKE_ACCOUNT_ID,
两个 poll agent 会同时去领同一个号的派单队列,结果是抢单、重复发给同一个客户、
本地发送记录互相打架。这不是风控问题,是当场就会出的数据问题。dispatch_paused_until 让新机开始接单。
全程不存在两台同时在跑的时刻。
| 症状 | 八成是什么 | 怎么办 |
|---|---|---|
| 新机一条都不发 | dispatch_paused_until 忘了清 |
找 Claude 清空这个字段。这是最高频原因,先查它再查别的 |
| 脚本报「不认这个参数」 或者行为像旧版 |
本地脚本是旧的,不是代码有 bug | 按 Step 5 单文件 curl.exe 重拉,别去调试逻辑 |
某时刻起连续 dm_panel_failed,之前一直正常 |
Edge 窗口卡死,不是号出问题 判据:账号仍 active、失败计数没涨 |
重跑 akke-start.ps1。别在卡死的 Edge 里手动点私信或导航走(是常见诱因) |
| 搜人返回空,但浏览器能搜到 | 搜索软封(搜人量过线) | 立刻停掉所有搜人动作养 24-48 小时。06-28 夏夏那次纯停发 ~2 天自愈了。换机器对这个没用,别重装 |
| 突然要短信/滑块验证、会话被登出 或日志 sent 但对方没收到 |
异地登录风控(新机 IP 段和旧机差太多) 不是搜索软封,别套那套排查 |
先停发观察,别反复重试撞验证。日志 sent 不代表送达这件事本身是已知的(陌生人私信会静默限流),必须人工核气泡确认 |
二次触达大量 wrong_user |
新机分辨率和旧机不一致,坐标没重测 | 跑 measure_nav.py 重新标定 |