| name | leads-reactivation |
| description | 激活沉睡线索(超过 30 天未联系的客户),通过个性化 WhatsApp 首触消息引导回复, 识别高意向线索并转交人工跟进。当用户提到激活沉睡客户、唤醒老线索、沉睡线索跟进、 老线索回访、线索重新联系、WhatsApp 批量触达、线索激活、外展营销、客户唤醒、 导入联系人、生成触达计划、起草首次消息、查看激活效果、复盘触达数据时, 必须使用此 skill。也适用于用户想做 A/B 测试不同话术和发送时段、分析线索回复率、 优化外展策略的场景。如果用户说"联系之前那些没回复的客户""把那些旧线索盘活一下" "做个 WhatsApp 外展"“冷线索激活”等类似表达,都要用这个 skill。
|
Skill: 沉睡线索激活 (Leads Reactivation)
目标
系统化激活沉睡线索(超过 30 天未联系),通过个性化首次触达消息,引导对方回复,识别高意向线索并转交人工跟进。
核心思路:把"群发垃圾消息"变成"小规模探测 → 分析信号 → 优化策略"的迭代循环。每批 10 人是一轮信号探测,不是批量轰炸。
工作流
导入线索 → 门控检查 → 生成计划(自动起草话术) → 批量人工审批 → WhatsApp 直发 → 复盘
关键约束
- 所有数据操作必须通过
scripts/leads_cli.py 执行,LLM 严禁直接读写 CSV 文件 — 这是为了保证去重、门控、状态转换的一致性。data 目录下的所有 .csv 文件已设置为只读权限(444),直接写入会失败。
- 所有写操作(import / plan / release)默认 dry-run,只预览不执行。必须加
--yes 标志才会真正修改数据。LLM 不得在未经人工确认的情况下执行任何数据写入操作。
- 人工确认流程:LLM 生成 plan 或执行操作时 → 输出预览 → 人工确认 → 人工加
--yes 执行 → LLM 继续后续步骤。
- 消息起草由 DeepSeek v4-flash 完成,用 Agent 真实风格生成,不要直接套用模板 — 客户能分辨机器味
- 首次激活消息审批后由 dispatch cron 自动发送,禁止用
openclaw agent --deliver — 后者会让 Agent 二次改写已审批话术,且消耗 ~9 万 token
- 未回复的线索不重复跟进,只记录数据用于策略复盘 — 避免骚扰
- 回复由 operator 在 WhatsApp 界面直接观察判断,不需要自动化回复检测
- 数据文件的任何新增、修改、删除都必须经过人工确认,没有例外。
- 所有操作必须通过
leads_cli.py CLI 执行,LLM 严禁编写临时脚本、Python 代码或任何其他方式直接操作数据文件。需要特殊调度或批量操作时,通过 CLI 参数实现,不写旁路逻辑。
使用方式
1. 导入线索
python scripts/leads_cli.py import <csv_path> --source <来源> --owner <负责人> --yes
导入 CSV 线索,自动去重、手机号标准化、门控检查(缺来源/授权的联系人会被隔离)。
2. 生成今日计划
python scripts/leads_cli.py plan --limit 10 --yes
存量优先:如果已有 planned 状态的任务未执行,plan 命令会复用这些任务,重新分配四维变量(话术版本、发送时段、调度时间),而不是追加新行。只有当 planned 任务数不足 --limit 时,才从联系人中补充新任务。
防重复保护:生成新任务时,已联系人的联系人(last_contact_at 有值)和已有 approved/sent/planned 任务的联系人不会被重复计划,避免同一联系人被多次触达。
从尚未触达的联系人中生成今日触达任务(gated 阶段和 do_not_contact 被排除)。系统自动分配四维测试变量:
| 变量 | 值 | 为什么 |
|---|
| 话术版本 | V1-V4 | 测试哪种开场最有效 |
| 发送时段 | 早/中/晚(10/15/20点当地时间) | 找到最佳打开率时段 |
| 国家 | 客户所在国 | 不同市场响应习惯不同 |
| 来源 | 线索来源(展会/阿里/官网等) | 来源影响信任基线 |
发送时段会自动转换为客户当地时间 → 北京时间调度。同一北京小时内的任务自动错开 5-10 分钟,避免整点发送触发 WhatsApp 风控。
返回结果包含 variable_breakdown,列出每个联系人的变量分配。
3. 起草消息(自动完成)
plan 命令已自动为每个任务调用 DeepSeek v4-flash 生成话术,返回结果中 messages 数组即为草稿。LLM 自动将草稿汇总为表格呈现给人工确认,无需手动调用 draft-prompt。
默认行为:plan --limit N --yes 一次性完成「生成计划 + DeepSeek 起草话术」。
逐条起草(仅在需要针对某条任务单独重新生成话术时使用):
python scripts/leads_cli.py draft-prompt --task-id <task_id> <agent_dir>
返回结果示例:
{
"tasks_created": 10,
"messages": [
{"task_id": 72, "contact_id": "44", "contact_phone": "+61...", "contact_name": "Alonso", "message": "Hi Alonso 👋"},
...
]
}
LLM 汇总为表格呈现:
| 序号 | 联系人 | 国家 | 话术版本 | 草稿内容 |
|---|
| 1 | Bradley | AU | V3 | Hi Bradley 👋 |
| 2 | Karan | US | V4 | Hi Karan 👋 we met at... |
话术版本的风格指引见下方「话术版本」。
4. 审批与发送
当用户确认计划通过时(如说"通过"、"OK"、"可以发"),你必须执行批量审批,将所有 planned 任务转为 approved。
批量审批(默认方式):
python scripts/leads_cli.py batch-approve --yes
重要:batch-approve 会在审批前强制从 CSV 回读实际 approved_message,逐条展示给操作者确认。这不是形式化步骤——它确保你看到的和 CSV 里的一致,消除 LLM 声称修改但实际未写入的验证真空。如果回读的消息与之前讨论的不一致,不要批准,先用 approve <id> "<正确消息>" 修正。
- 不带
--yes:交互式确认 [y/N],非交互终端拒绝执行
--dry-run:仅预览 CSV 实际内容,不修改
--yes:跳过确认直接批准(用于已验证无误的批量审批)
逐个审批(仅在用户明确要求修改某条话术时使用):
python scripts/leads_cli.py approve <task_id> "<最终消息>"
此命令会同时修改 approved_message 并批准该条任务。修改多条消息时,先逐条 approve,再 batch-approve --yes 批掉剩余。
审批后消息交由 dispatch cron(每分钟)自动在 scheduled_at 时间发送,LLM 不得自行发送。dispatch 会同时完成:WhatsApp 发送 + Agent session 注入 + 联系人状态更新。
5. 回复判断
Operator 在 WhatsApp 界面直接观察客户是否回复。有意向线索手动转交人工跟进。
6. 复盘
python scripts/leads_cli.py recap
获取数据后用自然语言总结。复盘数据包含四维变量分解(国家/来源/话术/时段的回复率),找出当前最优组合。
话术版本
| 版本 | 策略 | 风格 | 适用 |
|---|
| V1 | identity_confirm | 身份唤起:提及来源+不确定对方状态 | 展会名片、官网表单 |
| V2 | casual_checkin | 轻松问候:No pressure | 软性市场 |
| V3 | hi_name | 极简:Hi + 名字 | 优先投放(占 30-50%) |
| V4 | short_intro | Hi + 名字 + 一句话来源+问候 | 平衡版 |
测试策略:V3 权重最高,优先探测。若回复率高则放大;若回复率低但对话质量高,则增加 V1/V4 权重。
数据层命令速查
| 命令 | 用途 |
|---|
import | 导入线索(去重+门控) |
plan | 生成触达计划 + 自动 DeepSeek 起草话术(批量默认操作) |
draft-prompt | 逐条重新生成话术(仅在需要针对单条任务调整时使用) |
approve | 逐条审批(仅在需要修改话术时使用) |
batch-approve | 批量审批当日所有 planned 任务(默认审批方式) |
sent | 标记已发送(内部状态) |
progress | 查看进度 |
recap | 复盘数据(含四维变量分解) |
gated | 查看隔离线索 |
release | 释放隔离线索 |
context | Agent 上下文摘要 |
环境依赖
系统 Python (/usr/bin/python3) 必须安装 openai 包,否则 DeepSeek 消息起草会全部静默失败:
/usr/bin/python3 -m pip install openai
OpenClaw exec 沙箱走 /usr/bin/python3,不是 Homebrew 的 /opt/homebrew/bin/python3。执行 plan 前验证:
/usr/bin/python3 -c "from openai import OpenAI; print('OK')"
ModuleNotFoundError 被 call_deepseek() 的 except Exception 静默吞掉,不会报错到终端。唯一能发现的方法是检查 plan 返回的 messages[].fallback 字段——如果 fallback: true 说明 DeepSeek 调用失败,不要审批这批任务。
配置
配置文件位于 data/config.json。
| 参数 | 说明 | 默认 |
|---|
daily_limit | 每日触达上限 | 10 |
strategies | 启用的策略类型 | identity_confirm, source_callback, value_hook |
gating.require_source | 是否检查来源 | true |
gating.require_consent | 是否检查授权 | true |
与其他系统的集成
- CRM cron:
patrol.py 每 30 分钟巡检外勤会话(本地 crontab),将活跃会话数据回写到 CRM
- 消息发送: dispatch cron 每分钟巡检 approved 任务,调
openclaw message send + session 注入,不依赖 LLM
- Agent context: 从外勤 Agent workspace(
~/.openclaw/workspace-external)读取 SOUL.md / IDENTITY.md / AGENTS.md
参考文档