“筛到WhatsApp活跃号码”不是一个可直接执行的营销分组。它只是一条带观察时间的平台信号。稳健的CRM会把客户事实、WA/WS活动观察、当前触达资格拆成三层:第一层回答“这是谁”,第二层回答“系统观察到了什么”,第三层才回答“此刻能否因某个目的联系”。
为什么单表设计一定会出问题
如果在contacts表直接加入active=yes,下一批导入可能覆盖旧值,却没有检查日期;映射手机号可能覆盖客户主号码;营销人员也容易把活跃误解成许可。单表看似方便,实际丢失了时间、来源与否决条件。
第一层:稳定的客户事实
身份层保存contact_id、原始与标准化号码、国家证据、客户来源及必要业务关系。手机号不是永恒身份,变更要保留历史。该层不保存“最近活跃”这样的易变观察,也不因为一次Excel导入合并两个人。
第二层:不可覆盖的活动观察
WS筛活跃输出手机号、活跃时间、活跃天数和WhatsApp映射手机号。每次任务追加一条observation,而不是更新唯一一列。记录task_id、checked_at、输入号码、返回号码、状态、未知原因和schema_version,才能回看变化。
| 层 | 代表字段 | 更新方式 |
|---|---|---|
| 客户事实 | contact_id、phone_normalized、source | 受控变更 |
| 活动观察 | activity_time、active_days、checked_at | 只追加 |
| 触达资格 | purpose、channel_scope、opt_out、valid_until | 实时计算 |
第三层:触达资格视图
资格不是活动字段。视图同时检查用户选择、用途、地区政策、抑制表、客户阶段、频率与观察是否过期。任何硬性否决都优先于活跃得分。这样即使底层观察很新,退出营销的人也不会进入队列。
从TXT到观察表的导入链
先从获批cohort生成一行一个号码的TXT,同时建立batch_row到contact_id的内部crosswalk。爱普筛导出Excel后,文件先进入staging,完成行数、字段、类型、重复和回连验收,再写入观察表。TXT与Excel均保存批次hash,防止拿错版本。
映射冲突用队列解决
| 冲突 | 可能原因 | 处理 |
|---|---|---|
| 输入与映射不同 | 格式、迁移或历史录入 | 保留两值并复核 |
| 一个返回对应多人 | 共享或重复客户 | 禁止自动合并 |
| 一人出现多个返回 | 多号码或历史变化 | 建立时间线 |
| 无法回连 | 行丢失或格式异常 | 隔离批次记录 |
用衰减函数而不是永久标签
不同业务的“新鲜”含义不同。可将观察划分为fresh、aging、stale,阈值由销售周期定义;进入stale后不再贡献排序。不要为了保持绿色仪表盘每天重跑全库,只刷新仍有合法目的且接近决策点的小集合。
一个可解释的评分例子
允许评分的前提是eligible=true。之后才组合需求匹配、客户阶段、服务互动和活动观察,并给每项显示理由。活动只占有限权重,未知不等于低质量,映射冲突直接送人工。最终列表显示“为何进入”,而不是只显示一个神秘分数。
把业务动作写成状态机
记录可从candidate进入eligible、review或suppressed;消息发送后进入cooldown;退出立即进入suppressed;观察过期则回到needs_refresh或不再使用。状态转换有触发事件与操作者,避免不同团队在Excel里各自发明口径。
运营仪表盘看什么
核心指标是回连率、未知率、冲突积压、观察年龄分布、许可否决比例、频控命中、回复质量和投诉,而不是“活跃号码越多越好”。如果排序提升却没有带来更好的客户对话,应调整用途或停止该信号。
三层模型的真正价值
它让团队可以删除过期观察而不破坏客户档案,可以改变许可规则而无需重跑筛号,也能解释一次名单为何被允许或禁止。WA/WS筛活跃由此成为可审计的运营信号,而不是一列会无限扩张的营销标签。
