提醒这件事有一个不太舒服的对称性:实现它最便宜的部分,恰好是用户最反感的部分。在同一条判断外面套一个定时器,就能”再提醒一次”,代码改动几行,测试用例甚至不用更新。接收方付出的是三样东西:手上操作被打断之后的重启成本、在旁人面前被公开提示的面子成本、以及一条判断反复出现所带来的被监督感。绝大多数被投诉的提醒不是因为内容写错了,而是因为它没有停止条件。

提醒链路的触发呈现确认与抑制四段频控示意

把提醒当成一种要分配的稀缺资源而不是一种功能,后面的问题会变得可解:谁有资格占用注意力、占用几次、什么条件下必须归还、额度用完之后怎么办。

一、每条提醒都由四段构成,第四段最常被省略

一条完整的提醒至少有四个环节:触发条件、呈现方式、用户可做的动作、停止条件。前三段几乎每个团队都会做,第四段最常被漏掉,漏掉的直接表现就是”关掉之后还会再弹”和”同一件事一天弹五次”。

判定一条提醒设计是否完成,可以看一句很硬的话:它能不能说出”在什么情况下不再出现”。说不出,就说明这条规则只有一个入口没有出口,剩下的都是运气。停止条件通常有四类来源,写规则时要明确是哪一类:

  1. 已有效应答:用户的下一步行为与提醒内容一致(看到改期通知后真的改了预约)。
  2. 条件本身消失:触发前提不再成立(待办已完成、风险已解除)。
  3. 用户显式关闭:点了”不再提醒”,这是承诺而不是偏好。
  4. 过期失效:提醒承载的信息有时效,过期后继续呈现只会误导。

其中第一条最容易做错。系统习惯把”已展示”当成”已送达”,把”已读”当成”已应答”,于是停止条件绑在了展示次数上:弹了三次就算提醒过了。真实情况是一条没人注意的横幅既没停止也没生效,用户要么没看见,要么看见了但没做任何事。必达类提醒的停止条件应该绑在应答上,绑在展示上只能得到”重复曝光”。

二、意图分级与打扰预算

预算的意思是:一个用户在一次会话里、一天里能承受的打扰总量是有上限的,这个上限是共享的,不是每条规则各自申请、系统免费发放。没有预算概念时,十条各自”一天提醒两次”的规则叠加起来就是二十次,而每一条单独看都很克制。

先按意图分级,因为不同意图的目标函数根本不同。

意图等级 判定问题 典型内容 必达性 允许的呈现上限
L0 安全与风险告知 不提醒会造成人身、设备或资金损失 异常状态、超温、支付风险 必达,可中断当前操作 阻断式、语音、人工提示
L1 合规保护类 规则要求必须展示到用户 使用时长提示、青少年保护说明 必达,不可关闭但可降噪 送达并记录,不占营销额度
L2 本单必须确认 用户不选就无法继续 履约信息核对、改期确认 必达,但只在本单生命周期内有效 流程内嵌,不外溢到其他渠道
L3 服务与经营建议 提醒了大概率省一步、避一次错 保养到期、补货、待办 可牺牲,预算内投递 角标、列表内嵌、弱横幅
L4 营销与召回 目的是业务方拿转化 优惠、活动 可牺牲,需显式同意 只在弱呈现档位,不进阻断式

预算分配要落到三个粒度上:每会话、每日、每周。L3 与 L4 合并计数,L0 到 L2 不占额度但占次数上限——否则会出现”每条都合规、加起来是骚扰”。额度用完之后的动作也要定义清楚:是降级成弱呈现、延迟到下一个合适窗口,还是直接丢弃。丢弃必须是可查询的状态,不能是静默失败,否则规则改完无法解释为什么某条提醒没出现。

三、触发、呈现、确认、抑制四段状态机

第一节的四段讲的是一条提醒的内容结构,这一节的四段讲的是它在系统里的运行状态:前者回答”这条提醒由什么组成”,后者回答”命中之后由谁决定说不说”。

条件命中不等于要弹。这是抑制层存在的理由:它把”该不该说”从业务规则里独立出来,集中在一处判断。

  • 触发:条件成立后先看上下文——用户此刻是否正在输入或处在流程的关键步、是否刚拒绝过同类提醒、屏幕上是否已经有一条同类在展示、当前是否处在不可中断的操作里(比如正在核对单据)。这四问任何一问为真,都应该走抑制而不是走呈现。
  • 呈现:同一时刻只呈现一条,其余排队;同类合并成一条并带计数,而不是并排三条说同一件事。
  • 确认:把展示、送达、应答三个状态分开记账。展示是渲染成功,送达是用户有机会看到(在可视区域且停留足够久),应答是行为与内容一致。必达类提醒要等到”送达”以上才算完成,等到”应答”才能停止。
  • 抑制:规则要能写成可测的断言——同类合并、时间窗冷却、拒绝后降级为弱提示、显式关闭后不得再强提示。最后一条例外要写死:合规必达项不因用户关闭而消失,但可以因关闭而降噪。

一条策略可以声明成这样:

- id: maintenance-due
intent: L3
trigger: "next_service_in <= 200h && !closed_by_user"
present: [badge, inline-row] # 允许档位,端上只可降级不可升级
budget: { per_session: 1, per_day: 2, per_week: 3 }
cooldown: 12h
dedup: merge-count # 同类合并并计数
stop_when: [answered, expired, user-off]
overflow: degrade # 超预算时降级而不是丢弃
owner: service-plan

这套声明的价值不在字段多,在于它强制每一条提醒都必须填 stop_when。评审时看这一列有没有值,比讨论文案要不要再客气一点有效得多。

四、呈现强度要按意图选,不能按点击率选

呈现方式 打断成本 被用户忽略的可能 适配等级
角标或未读点 极低 高 L3、L4
列表内嵌一行 低 中 L2、L3
自动消失的横幅 低到中 高 L1、L3
需手动关闭的横幅 中 中 L1、L2
中心弹窗(阻断操作) 高 低 L0、L1
语音播报 高,且旁人可闻、说了收不回 低 L0
人工口头提示 最高,成本转给具体的人 低 L0、L1

把营销内容放到最强档位,是最容易短期有效、长期失效的做法:强档位的注意力是借来的,用完一次,用户对这一档的信任就掉一点。反过来,把必达项放在弱档位,然后用”再弹一次”来补偿,等于用重复次数顶替呈现强度——这是同一个错误的两种写法。

五、有人在场时,提醒的成本会换一种形态付

线下柜台和门店场景里,系统给员工下发的任务提示,本质是让一个人对另一个人开口。如果考核口径是”提醒次数””话术完成率”,那么”顾客被反复提醒”不是执行走样,而是这套指标必然导出的结果:系统把不确定的转化,换成确定的执行动作,成本由现场人员和顾客承担。

处理方式是在系统层面限死次数,而不是在管理层面加压力:

  • 已提醒次数作为字段回传到任务卡上,员工看得见,超过上限就不再派发该动作;
  • 店内场景默认弱呈现——信息对员工可见,不默认对外发声;
  • 语音播报要有场景开关,有第三人在场时降音量、换措辞或改为屏显;
  • 同一件事在同一次到店过程中只允许发生一次,二次提醒需要员工显式确认理由。

合规与保护类提醒有另一套边界:必达、可以被降噪但不能被关闭、频次要有可引用的依据口径(规则要求的展示时机与次数),不能被当成曝光位复用。在同一条必达横幅里塞推广内容,会让这条横幅整体失去可信度,用户学会无视它之后,必达的那部分也一起失效了。

六、洹拓视角:把”少打扰”写成验收指标

度量要成组看,单看任何一项都会给出错误激励。

  1. 关闭率,以及关闭之后是否重新开启。
  2. 投诉与负反馈量,按提醒标识归因,而不是只统计总量。
  3. 有效应答率:应答数除以呈现数,这一项才是提醒质量的分子。
  4. 每用户每日有效打扰次数:把预算用没用满显示出来。
  5. 误触发率:不该弹却弹了的比例,通常来自条件命中但上下文不成立。

点击率高不等于体验好,它只衡量了打扰的收效,没衡量打扰的成本。真正能拿来对比方案的是一个组合口径:每换来一次有效应答,花掉了多少次呈现。这个数越小越好,而且它的改进方向是改判定条件,不是加提醒次数——这正是我们想激励的动作。

一份可以直接落库的提醒配置字段清单:

字段 作用 说明
提醒标识与所属场景 唯一键 抑制与合并按它分组
触发条件 何时算命中 表达式、数据来源、生效时段分开写
意图等级 L0 到 L4 决定预算档位与呈现上限
渠道与档位 在哪儿、用什么强度 端上只允许降级,不允许升级
频次上限 会话、日、周三档 超预算的处理动作必须显式声明
冷却时长 一次呈现后的静默窗口 同类共用冷却
合并策略 合并计数或保留后到的一条 避免并排多条同源提示
停止条件 必填 应答、失效、条件消失、用户关闭,四选一或组合
例外规则 哪一级可突破预算 必达项如何记录与免打扰如何降噪
责任人与复盘周期 谁能改、多久审一次 复盘看命中率与负反馈分布

交付时我们会把两条写进验收条款:每条提醒必须有停止条件,没有的不进发布清单;抑制规则必须可测——给一段用户行为序列,断言第 N 次不再呈现。前者管设计完整性,后者管它是不是真的生效。一个团队会不会主动给提醒设预算和上限,比它能不能做出更醒目的弹窗更能说明工程成熟度。