减少重复计算的核心,是把“一次咨询”的判定权从各设备各自为政,改为由服务端按同一事件标识归并。手机、平板、电脑分别产生点击和表单动作时,只要缺一个跨设备可对齐的标识,同一咨询就会被算成多次。判断该不该做这件事,先看你的转化动作发生在登录前还是登录后:登录后可用账号ID归并,登录前只能依赖匿名标识加时间窗,两者代价不同。
如果咨询提交发生在用户登录之后,归并条件最清晰:以账号ID为主键,设备只是同一账号的入口。此时重复计算的来源通常是同一账号在不同设备上多次提交,处理动作是在服务端对“账号ID+咨询类型+时间窗”去重,时间窗按业务实际响应周期设定,例如客服首次回复前的等待期。动作结果是:同一账号的多次提交只落一条咨询记录,后续分配客服时不会出现同一人接到两通回访。
如果咨询发生在登录之前,账号ID不存在,只能用设备标识、浏览器标识、IP与时间窗组合。这里的取舍是:标识越稳定,归并越准,但可采集范围越受限。可行做法是给每个首次到访的匿名访客发一个服务端生成的标识,写入cookie或本地存储,咨询提交时一并回传。需要说明的例外是:用户清除本地存储、换浏览器、用隐私模式,都会让匿名标识断裂,这部分重复无法靠前端完全消除,只能靠时间窗加联系方式做二次归并。
多角色对“算几次咨询”有不同理解时,争论通常停留在口径,而不是数据。把分歧转成可核对项目,是让每个角色说出自己认定的判定字段,再逐条对照。
把这三方的字段并列成一张核对表:点击标识、匿名访客标识、账号ID、提交时间、联系方式、落库时间。每个咨询记录必须能填满其中至少一组可归并字段,否则标记为“待归并”。这个动作的结果是,分歧从“谁的数字对”变成“哪条记录缺少哪个字段”,下一步就是补字段而不是互相说服。
假设某业务把匿名归并时间窗设为30分钟。用户在电脑上提交咨询,20分钟后用手机再次提交同一问题。30分钟窗内两条记录被归并为一次,客服只回访一次。若把时间窗改为10分钟,两条记录会被算作两次,客服可能重复回访。这个例子不证明哪个窗口更优,只说明窗口长度直接改变归并结果,因此窗口值必须写进口径文档,并与客服响应节奏对齐。
反过来,如果业务本身允许用户在不同设备上就不同问题分别咨询,那么归并过强会把两次真实咨询压成一次,造成漏跟。此时应把归并键从“联系方式”改为“联系方式+咨询主题”,让不同主题各自成单。选择依据是:你的业务更怕重复打扰,还是更怕漏掉真实需求。
第一步,在咨询提交接口增加一个服务端生成的访客标识字段,与账号ID并列存储。第二步,在落库前做一次归并判断,命中已有记录则更新而非新增。第三步,保留原始提交日志,归并结果与原始日志分开存放,便于核对。
验证时不要只看咨询总数是否下降。总数下降也可能来自流量减少、页面改动或提交失败,这些都与归并无关。更可靠的核对方式是抽样:取一批已知在同一账号或同一联系方式下多次提交的记录,检查归并后是否只剩一条,同时确认没有把不同用户的记录错误合并。若抽样中发现误合并,先放宽归并键,而不是直接关掉归并。
当咨询量很小、客服能人工识别重复时,投入归并逻辑的收益有限,维护成本反而更高。当业务涉及多人共用同一设备或同一联系方式时,强归并会掩盖真实需求。这两种情况下,更合适的做法是保留原始记录,仅在客服侧提供“疑似重复”提示,由人工决定是否合并。判断标准是:归并错误的代价是否高于重复计算的代价。若重复回访的打扰成本更高,就做自动归并;若漏跟一个真实咨询的损失更大,就只做提示。
无论选哪种,都要把归并规则、时间窗和例外情况写进同一份口径文档,并让投放、客服和数据三方确认后再上线,否则下一次对数字的分歧仍会回到起点。