触达护栏:确定性流水线
归属:理想汽车 · 跟进/话术落地 — 服务简历「差异化客户跟进」护栏,不是腾讯 SSC 或字节招聘。入口 理想。
AI 会写不是难点;难点是重复发送、脏数据、非工作时间、越权群发。用代码护栏回答「能不能发」。
Demo · 场景回放 GitHub1. 架构图
flowchart LR
U[一句话 / 定时任务] --> R[意图路由]
R --> L{幂等锁 · 时间窗}
L -->|过| F[刷新数据 · 失败重跑]
F --> H{健康检查}
H -->|过| C[计算 + 渲染]
C --> P{预览确认}
P -->|确认| S[按白名单顺序发送]
S --> A[(audit.jsonl + message_id)]
L -->|拦| A
H -->|拦| A
2. API / 流水线步骤(逻辑接口)
| 步骤 | 输入 | 失败行为 |
|---|---|---|
| 意图路由 | 自然语言 / 任务 ID | 越权「发全部」→ 拒绝 |
| 幂等锁 | task + day + halfday | 已执行 → 跳过 |
| 时间窗 | 当前时间 | 窗外 → 停止 |
| 数据刷新 | 数据源 | 超时重跑 1 次,仍失败不发 |
| 健康检查 | 覆盖率/新鲜度/数值 | 任一不过 → 拦截 |
| 预览授权 | 首跑或大批量 | 未确认 → 等待 |
| 发送 | 白名单群序 | 禁言/敏感群跳过 |
| 留痕 | 每步事件 | 写入 audit + message_id |
产品化 HTTP 建议
POST /v1/outreach/preview { task_id }
POST /v1/outreach/approve { preview_id, actor }
POST /v1/outreach/run { task_id } → { status, message_ids[] }
GET /v1/outreach/audit { message_id }
3. 技术栈梳理
Python 标准库 场景回放 HTML · 无第三方 IM SDK(公开版模拟发送)
4. Best practices
- 护栏配置与代码同审;只改文档不算上线。
- 健康检查阈值由业务签字(如达成率 >100% 必拦)。
- VOC 话术必须先过禁止检查,再进本流水线。
5. Demo 路径
- 打开场景回放,走一遍「重复触发被幂等拦住」。
- 演示窗外时间 / 健康检查失败不发。
- 展示 audit 中的 message_id。