多次触达(= 二次触达 / 潜在触达) 已落地 · 待真发验证
对「DM 过、≥3 天仍没回」的高+中意向用户,节奏大脑算出今天该触达谁,本机脚本用 ADB 打开对方主页最新视频,点赞 + 公开评论,并把触达状态记进库防止天天重列。
snssdk1128://user/profile/?sec_uid=)按抖音内部 ID 直达,点首格作品进最新视频,连「抖音号反查」都不用。这条链路本就有(之前没提交),现已正式化并接上节奏大脑。pip install langfuse ② 生成话术并人工审稿 ③ 先 --commit 试 1 条。整条流水线全在本机(电脑连安卓手机)跑,与无影无关。「算清单」和「执行」解耦:节奏大脑(只读库、算候选)随时能跑,执行那步用 ADB/u2 在手机上点。
| # | 步骤 | 脚本 | 干什么 |
|---|---|---|---|
| 1 | 节奏大脑出候选 | scripts/second-touch-worklist.ts | ≥3 天没回的高/中意向 → 候选;接 second_touch_state 表去重(排除已触达/冷却中/已停) |
| 2 | 生成公开评论话术 | worker/scripts/gen-second-touch-comments.py | qwen3 + Langfuse 生成轻钩子话术(复用生产反评提示词,见 04)→ 写进清单 → 人工审 |
| 3 | 触达前重扫 | scripts/dm-phone-sender/scan-dm-replies.py | 扫收件箱确认这些人确实没回(别骚扰已回的) |
| 4 | 点赞 + 评论 | worker/scripts/recomment_noreply.py | ADB/u2:deeplink 进主页 → 最新视频 → 点赞(幂等)→ 公开评论。每人间隔 75–105s |
| 5 | 回写节奏状态 | scripts/mark-second-touch.ts --from-file | 把已触达的写进 second_touch_state(touch_count++ / 下次可触达时间 / 阶梯升降),下次不重列 |
每天怎么跑(一次性先 pip install langfuse;.env.local 的 LANGFUSE / OPENROUTER key 已配好):
# D=日期,手机连着电脑、抖音停在 messaging 号 D=$(date +%F) pnpm tsx scripts/second-touch-worklist.ts --min-days=3 --max-days=5 # 1 出候选 python3.11 worker/scripts/gen-second-touch-comments.py --date $D # 2 生成话术 → 人工审 python3.11 scripts/dm-phone-sender/scan-dm-replies.py \ --file=scripts/dm-phone-sender/data/second-touch-$D.json # 3 触达前重扫 python3.11 worker/scripts/recomment_noreply.py --date $D --idx 1 # 4a DRY 看链路 python3.11 worker/scripts/recomment_noreply.py --date $D --commit --sleep 90 # 4b 真发 pnpm tsx scripts/mark-second-touch.ts \ --from-file=scripts/dm-phone-sender/data/second-touch-$D.json # 5 回写状态
节奏阶梯(状态表 second_touch_state 落地):触达 1 次 → active(隔约 4 天);触达 ≥2 次仍没回 → low_freq(隔约 10 天养着);对方回复/回访 → stopped(升级人工);拒绝/删评/拉黑 → stopped。
| 环节 | 模型 / 机制 | 费用 | 耗时(40 人估算) |
|---|---|---|---|
| 出候选(worklist) | 纯查库,无模型 | 0 | 几秒 |
| 生成话术 | qwen3-235b-a22b(Langfuse 提示词 comment.reverse-comment-system-py-single,含反杜撰/称呼审计,最多 retry 4 次) | ~80k token ≈ 0.1–0.3 元/天 | 3–6 分钟(串行) |
| 触达前重扫 | ADB 扫收件箱,无模型 | 0 | 1–2 分钟 |
| 点赞 + 评论 | ADB/u2 GUI,无模型 | 0 | 70–130 分钟(每人 ~2 分钟,含 75–105s 间隔,风控限速是瓶颈) |
| 回写状态 | 纯写库,无模型 | 0 | 几秒 |
.env.local 配了 LANGFUSE_PUBLIC_KEY + LANGFUSE_SECRET_KEY(你已经配了)② 本机装了 langfuse 客户端(pip install langfuse,你还没装,所以话术那步暂时跑不起来),就能 fetch 到同一套生产提示词。装上即有,不用谁单独给你建。| 叫法 | Langfuse 提示词名 | 用在哪 |
|---|---|---|
| RC(反评 / 公开评论) | comment.reverse-comment-system-py-single | 视频下公开评论。多次触达的话术直接复用它(反评=视频公开评论,同构),不另起炉灶 |
| DM(私信) | dm.ice_break.system | 私信破冰阶段(首轮搭话) |
dm.nurture.system | 私信培育阶段(持续对话) | |
dm.decision.system | 私信决策阶段(临门一脚) | |
| 意向分类 | analyze.comments.system / analyze.decision_signal.system | 评论意向打标(高/中/低),上游 analyze 用 |
为什么多次触达不新建提示词:「反评」本质就是「在高意向用户的视频下贴公开评论,勾去看私信」,和多次触达的公开评论一模一样。复用 comment.reverse-comment-system-py-single 直接拿到同事调好的人设、反杜撰锁、称呼规则,少维护一套、少一处漂移。生产模型生成不手搓,是团队规范。
提示词版本随时在更新:同事会往 Langfuse 推新版(标 production label)。脚本每次跑都 fetch 最新 production,不写死——所以你不用同步任何东西,跑就是最新的。
| 维度 | 定下来的规则 |
|---|---|
| 目标 | DM 过、≥3 天没回的高+中意向用户(按状态表去重,不重复触达) |
| 动作 | ADB 脚本点赞 + 公开评论(先赞后评) |
| 话术 | 公开评论只走「轻钩子+勾私信」(回应视频内容 + 暗示私信过 + 软钩子);报价/正经话术留私信,不公开晒;qwen3+Langfuse 生成,人工审稿后再发 |
| 评哪条视频 | 对方主页最新视频(执行时 deeplink 进主页点首格);无公开作品/私密号→跳过 |
| 时机 | 每天定时跑 1–2 次(v1);按当初抓到评论的高峰时段 |
| 节奏 | 规则阶梯(不打分):没回→触达1→隔 3–5 天触达2→转低频养(1–2 周/次,不删);回复/回访→升级;拒绝/删评/拉黑→停。已落地为 second_touch_state.ladder_status |
| 账号 | 各运营自己的号(发过 DM 那个)触达,不设专号;盯每日动作额度(DM ~25–30 + 点赞评论额度别撞顶) |
| 送达门 | v1 不卡(视频评论是独立通道,DM 没送达照样通知到,见下方名词解释) |
名词解释:「视频评论是独立通道」
视频评论和私信是两条互不依赖的触达路径:私信常被抖音拦在「请求箱」里、对方根本没收到通知;视频评论会推一条「XX 评论了你的视频」的通知,走的是另一套机制、不受私信拦截影响。一条路堵了另一条还通——这就是 v1 不纠结私信到底送达没的原因。私信像寄到「陌生人收件箱」(可能被过滤),视频评论像在他家门口贴便利贴(出门必看到)。
名词解释:「转低频养着」
= 不放弃这个潜客,但把触达频率大幅降下来。全屋定制决策周期长(几个月),今天没回的人可能两个月后才动工;删了=他真要买时你已不在视野,高频骚扰=烦了拉黑。「低频养」是中间档:触达 ≥2 次没反应进 low_freq,每 1–2 周做最轻触达(给最新视频点个赞),不占主力额度;一旦有正向反应立刻升级,只有硬信号(拉黑/拒绝)才真停。
① 「没回」不该减分 —— 它是噪音,不是意向信号
「没回」该驱动的是节奏(放慢、设次数上限),不是意向降级。真正该停手的是硬信号:拒绝、删评、拉黑、明说不需要、同行号。
② 公开评论不晒报价 —— 内容跟着渠道可见性走
视频下的评论是公开的。把私信那套报价搬上去:像广告(易被判垃圾删评、连累账号)、同行全看见(报价/打法泄露)、对方尴尬。公开评论的目的不是再推销一遍,只是「重新进视线 + 勾去看私信」。所以:公开场合只做轻钩子,实质留私域。
③ 不上打分引擎,用规则阶梯 —— 别要假精确
打分要给每个信号配权重,而配权重需要数据(哪个信号真预测成交)——现在没有。硬上打分=假精确:一个看着科学、系数全靠拍脑袋的数字,反而被过度信任、调错旋钮。规则阶梯简单、透明、好改。先用阶梯攒「触达→结果」数据,够了再升级成校准过的打分。数据在前,打分在后。
做(✓)
| 做什么 | 为什么 |
|---|---|
| 视频点赞+评论做二次触达 | 独立于私信的新触点,DM 没送达照样通知到对方 |
| 走 ADB/u2 在本机手机上跑 | 主页/视频/点赞/评论接口在服务器机房 IP 被抖音封,只能本机;deeplink 按 sec_uid 直达,不依赖无影、不用抖音号反查 |
| 各运营用自己的号触达 | 身份连贯(发过 DM 的人再点赞=强化关系)+ 触达量摊到 3 个号降风控 |
| 话术复用生产反评提示词 | 反评=视频公开评论,同构;复用同事调好的人设/反杜撰锁,少维护少漂移 |
不做(✗)
| 不做什么 | 为什么 |
|---|---|
| 不在公开评论晒报价 | 像广告、同行可见、对方尴尬;实质留私信 |
| 不「没回就减分」 | 没回是噪音信号(没看到≠没意向),长决策行业易误杀真买家 |
| 不上打分引擎(用阶梯) | 没数据校准权重,过早打分=假精确;先攒数据再说 |
| 不强化/不绕过风控 | 每人间隔 75–105s,遇验证码/频繁提示硬停整批,宁慢勿封号 |
| 不做分钟级实时监控新动态 | 常驻轮询重、有风控;v1 每天定时跑 1–2 次够用 |
| 不把 DM 原文当公开评论 | 同行可见/像广告;必须先 qwen3 生成专门的公开评论话术 |
pip install langfuse。话术生成(步骤 2)要它来 fetch 共享提示词。.env.local 的 key 已配,装完即可跑。--commit 试 1 条看真实效果,再放量。gln / 评论框 eor / 作品首格 cover)是抖音版本相关的,换机换版前先 DRY 重验。