DEEP DIVE · 触达

DM 投递与引导加微

从评论筛选、话术生成、WDA 真机投递到自动回复、决策阶段引导转微 —— AI 链路里「被人看见」的最后一公里。

最后更新 2026-05-06适用于 技术对接人 / 客户审计

五段闭环

从一条评论到一个加微好友,链路五段:筛选 → 话术 → 投递 → 回复 → 转微。前 4 步全自动化;第 5 步带人工护栏(Operator 在 dashboard 审稿后才发)。
V1 投递率
85.7%
round 1+2 累计 14 发 12 中
Fast-flick
9 / h
schema 跳风控单小时上限
话术模板
V3 4 段
招呼 / 视频 / 地域 / 价格
ice_break
1500 字
知识注入预算 · 砍半后稳定

意图筛选 · analyzeComments

评论批量送入 Qwen3-235b-a22b:输出 intent_score 0-100 + intent_label,高意向的同步调 generateOpener 直出首条 DM 草稿,并调 worker enrichCommentCity 推断城市。

// src/app/api/cron/analyze/route.ts max_tokens = 8192 // 50 条会撞 4k 截断 batch_size = 15 // 504 阈值经验值 schedule = */15 * * * * // 96 calls/day budget_loop = 270 s // 单次榨干 pending

2026-04-27 cron 大修战果(4 层并发 bug 修复):

指标修复前 → 修复后
积压清空1822 条 / 74 min
高意向总数39 → 456
待审核私信0 → 429
今日高意向0 → 282

四道前置闸 · 高意向不等于该发

① 同行剔除

昵称含「定制 / 工厂 / 源头 / 批发 / 招商 / 加盟 / 官方号」等 7 类关键词全部排除。失败案例:「长春豪格家居有限公司官方号」intent=95,靠人工兜底剔除。

② 新鲜度过滤

评论 created_at < NOW − 7d 全部剔除,无视 intent 多高。实测旧评论 4 条 → 0 条投递成功。

③ per-pair 配额

排除 message_queue 已有 sent / sending / approved 的 sec_uid。重发返 7462 永久作废 sec_uid。

④ 24h 软上限

单 messaging_account 24h 内已 sent < 12 才允许新批次。超过约 20 条触发 silent drop。

排序规则:ORDER BY intent_score DESC, comment_time DESC —— intent 高 + 评论新鲜双指标,单一指标会把 1 周前的 100 分排在 1 天前的 95 分前面,误伤窗口期。

话术 V3 · 4 段式单行模板

[招呼][昵称][哥/姐] [视频细节挂钩+评论 callback]。[IP 属地]这边[业务覆盖]。[价格区间][反问]

① 招呼 + 昵称 + 哥/姐

10 个招呼词全异 · 性别由 f2 user.gender 推断 · 0/未知时按昵称特征兜底。

② 视频挂钩 + 评论 callback

videos.description 命中率 60% · 降级用评论关键词挂钩 · 严禁杜撰视频内容。

③ IP 属地 + 业务接住

f2 user.ip_location 命中率 93% · 讲业务覆盖能力,不讲气候/民俗。

④ 价格区间 + 反问

区间不报具体单价(6-10w / 8-12w / 15-20w)· 反问落到客户当下决策(推翻 vs 改局部 / 新房 vs 二装)。

硬约束(不可破):单行无 \n · 5 维度散度对照 · 不报具体地址 · 不报具体单价 · 不杜撰视频细节。
WDA send_keys 遇到 \n 会拆成 N 条独立 DM —— 已永久作废过 1 个 sec_uid,sender 加自动折叠安全网。

投递通道演进

WDA 投递架构:

message_queue (Supabase, approved 行) ↓ scheduled_for ASC dm_queue_helper.py (claim → mark sending) ↓ dm_send_v3.py (fast-flick 预热 → schema deeplink) ↓ WDA · localhost:8100 (tap / send_keys / source XML) ↓ iPhone 抖音 App → mark_sent / mark_failed
配置项数值
设备iPhone 13 Pro · iOS 26.3.1
签名Personal Team · 7d 证书边界
桥接pymobiledevice3 9.12+(RSD QUIC 隧道)
Bundle IDcom.kara.WebDriverAgentRunner

风控信号矩阵

状态码含义处置
7173对方关闭陌生人私信永久 mark_failed
7462per-pair 1 条配额已用完永久 mark_failed
7911短期 burst 限频全队列暂停 12-24h
22102账号观察期整号停发 72h
silentinput 清空但 bubble 不出现本号 24h 软上限到了

三层节流:

限制数值
L1每条间隔90 ~ 180 s 随机
L2单小时≤ 9 条(fast-flick 上限)
L3单号 24h≤ 15 条(留 5 条余量)
2026-05-05 突破:fast-flick feed 预热绕过 schema deeplink 风控 —— schema 跳之前模拟真人侧边快滑 feed 3 次(duration ≤ 0.15s),可避开抖音 automation 识别。实战 18 条 batch · 15 SENT · 3 隐私(83.3%)。

双向闭环 · 收件箱轮询

WDA 主动轮询「消息」Tab,把对方回复镜像回 Supabase,Operator 在 dashboard 看到回复后点「生成回复」走 chatReply → 审批 → sender 投递。

conversations.stage 五态状态机:

ice_break → nurture → decision → handed_off → closed 入队首次 收到回复升 检测决策信号 转交微信 关闭
Phase状态说明
Phase 1+2DELIVEREDwda_helpers + dm_ios_wda_inbox_poll.py 已 ship
Phase 3PENDINGLLM 自动回复 — 等 nickname 反查防错号
Phase 4PENDINGdecision 切换 — 同上链路依赖 Phase 3

微信引导 · decision 阶段

每个 org 在 brand_profile 里独立持有 wechat_id + wechat_qr_urlchatReply 在 decision 阶段注入引导块:

配置了 wechat_id

system prompt 注入:「客户高意向时,自然地告知微信号「{wechatId}」,引导加微深聊」。

未配置 wechat_id

system prompt 注入:「严禁编造任何微信号,客户问加微信时只能说『请留下联系方式,设计师会主动联系您』」。这条护栏极关键 —— 没有它 LLM 在 decision 阶段大概率会自行脑补一个微信号。