先把重复触发当成“数据异常”而不是“代码错误”,往往会让修复后的记录被覆盖。更稳妥的做法是:在修复前冻结一份原始触发日志,修复后再生成一份带版本标记的新记录,两份都保留,用同一个业务单号关联。这样无论后续是投放复盘还是客户对账,都能回答“这条转化到底算一次还是两次”。
在东莞百度广告的实际投放中,重复触发常见的来源有两类,但表现相似,很容易被混为一谈。
第一类是前端重复提交:用户点击咨询按钮后网络延迟,页面没有及时给出反馈,用户又点了一次,于是同一通对话或同一份表单产生了两个请求。第二类是回传链路重复:页面只提交了一次,但回传脚本被加载了两遍,或者页面跳转与异步回传同时执行,导致同一个事件被上报两次。
两者的区别不在数量,而在请求来源是否唯一。前者在服务端能看到两条内容几乎相同的原始请求,时间戳接近;后者往往只有一条业务请求,却对应两条上报记录。如果不区分就统一去重,可能误删真实的两笔咨询。
发现重复后最忌讳的动作是立刻改回传逻辑再观察。因为一旦修改,修复前的触发形态就再也无法还原,后续无法判断重复是偶发还是持续。
建议先执行一个具体动作:把当前一段时间内的原始触发记录导出为只读文件,包含事件ID、触发时间、页面标识、业务单号四个字段,命名中带上冻结日期。这份文件不做任何清洗,保留重复项。
冻结之后,再在测试环境复现一次重复场景。如果测试环境无法复现,说明重复可能与真实用户的网络或操作节奏有关,这时更不该在没有原始记录的情况下直接上线修复。
判断两条记录是否该合并,关键看它们能否对应到同一个业务单号。
可以假设一个例子:某条咨询在上午十点产生单号 A001,系统里出现两条上报,一条带 A001,一条不带。带单号的那条进入正式转化统计,不带单号的那条进入“待核查”列表。这样既不会漏掉真实咨询,也不会让重复记录污染整体转化口径。这个例子只用于说明比较方法,不代表任何真实账户数据。
修复动作完成后,不要直接把新数据写回原来的记录表。更清晰的方式是让修复后的触发带上一个版本标识,例如在事件参数里增加fix_version字段,值为修复批次编号。
这样做的结果是:后续核对时,可以按版本筛选,修复前的记录和修复后的记录各自成组,互不覆盖。如果修复后仍然出现重复,也能立刻判断是新逻辑没生效,还是存在另一条未被发现的触发路径。
这一步会直接影响下一步决策:如果修复后重复消失,冻结的旧记录作为历史留档即可;如果重复仍在,说明需要回到冻结文件里继续找触发源,而不是反复调整同一条回传代码。
多个角色对“这笔转化算不算”有不同理解时,争论往往停留在口径上。把分歧落到具体字段,就能变成可核对的项目:投放方看的是上报次数,客服方看的是有效对话数,财务方看的是可结算单号。三者不一致并不一定是数据错误,而是各自统计的对象不同。
实际动作是:在冻结文件和新记录之间建立一张对照关系,标明每条记录属于哪个口径、是否计入转化。核对完成后,再决定下一轮投放是否需要调整转化目标。保留修复前后两份记录,是让这个核对过程可追溯的前提,而不是额外的负担。