WhatsApp批量筛号的难点不是把几十万个号码塞进一个TXT,而是让作业可切分、可暂停、可重跑、可对账。一个超大文件中途失败时,团队很难知道哪些行已处理;若重新上传整库,又会产生重复结果与额外成本。工程上应把号码集变成有清单、有状态的多个不可变批次。
先冻结本次作业的范围
为一次业务需求创建job_id,记录来源快照、任务类型、负责人、用途和截止时间。后续新增号码进入新job,不在处理中途向旧文件追加。范围冻结是对账的前提,也是发生错误时能够回滚的边界。
清洗保留三种号码值
保存phone_raw、phone_candidate和phone_normalized。清洗只处理允许的空白、分隔符、国家码和明确规则;缺少国家证据、长度异常或一个值含多个号码时进入exception。不要为了提高通过率丢弃原值或猜测国家。
先去重,但不要丢失业务关系
处理层按标准化号码生成dedupe_key,每个唯一号码只送检一次;关系表仍保留它对应的多个contact_id、订单或线索。Excel返回后把观察广播回关系表,而不是在发送前复制同一号码多次。
如何决定分片大小
| 因素 | 分片较小的理由 | 分片较大的理由 |
|---|---|---|
| 来源复杂度 | 异常多、便于隔离 | 格式高度一致 |
| 恢复要求 | 减少失败重跑范围 | 容许整批等待 |
| 验收人力 | 可边处理边验收 | 集中自动验收 |
| 国家/任务 | 必须分开口径 | 同一规则与schema |
批次清单是控制面
manifest为每个shard保存job_id、batch_id、任务、国家、输入唯一数、TXT文件名、SHA-256、创建时间和状态。状态可为prepared、submitted、returned、accepted、failed或superseded。文件本身不负责表达流程状态。
生成最小TXT
爱普筛只接受TXT,一行一个手机号。按manifest顺序生成,不带表头,不放姓名、标签或许可信息。crosswalk单独保存row_key、dedupe_key和内部contact引用,并置于受控环境。生成后重新数行、验证编码和哈希。
任务决定Excel合同
| 任务 | 预期核心列 | 不能混入的假设 |
|---|---|---|
| WS筛开通 | 手机号、是否开通 | 活跃、真人或许可 |
| WS筛活跃 | 手机号、活跃时间、活跃天数、映射手机号 | 购买意愿 |
| WS全格式 | 活动、画像、头像、商业号等任务字段 | 每列必有值 |
Excel到达后的六步验收
- 通过batch_id和哈希关联输入;
- 确认列集合与任务版本;
- 解析类型并隔离坏值;
- 对比输入唯一数、返回、未知和错误;
- 通过crosswalk回连而非依赖行序;
- 写入暂存表并生成acceptance_report。
任一步失败,批次保持returned或failed,不进入生产观察表。
可恢复运行不等于盲目重试
系统错误只重跑失败shard,并使用新attempt_id连接原batch。格式异常回到清洗队列;字段缺失需要确认schema;未知结果按业务定义保留。重试不能把unknown改写为no,也不能覆盖第一次返回。
保证幂等与防重复
以job_id、batch_id、row_key、task_version形成写入键,同一Excel重复导入不会新增观察。若确实在新时间重查,使用新的batch_id与checked_at形成历史。这样恢复网络或人工误点不会污染统计。
大批量作业的监控面板
显示各状态shard数量、等待时长、异常率、未知率、回连率、重复拦截和重试次数。按国家和来源拆分,快速发现某个数据源异常。不要只显示已处理总数;吞吐量不能代表结果可用。
结束作业前的三张账
数量账确认输入唯一号码如何流向返回、异常和未知;版本账确认每个结果对应正确TXT与schema;业务账确认哪些观察真正进入获准流程、何时过期。三张账都平,才可以关闭job并按保留政策清理临时文件。
