先说结论
很多人讨论群发分析时,只盯着打开率、点击率这些结果数值。但 Odoo 的源码告诉你,真正重要的是:这些数值是如何被试验、发送、留痕、再汇总出来的。
第一层:A/B 抽样为什么不只是多建两封邮件
_get_recipients() 在 A/B 测试开启且不是 winner mailing 时,会按百分比随机抽取剩余受众,而且还会扣掉同一 campaign 已经触达过的人。也就是说,A/B 的难点不是版本数量,而是要保证抽样不串人、不重发。
第二层:winner mailing 为什么单独复制一封 final mailing
action_send_winner_mailing() 最终不是在原稿上继续发,而是复制出一个 final mailing,再以 100% 受众去发送。这个动作很有意义:它把“实验稿”和“正式胜出稿”分开留痕,后续复盘时不会把两者混成同一封邮件。
第三层:trace 状态机在记录什么
mailing.trace 不是一个单纯日志表,它维护了 sent、open、reply、bounce、error、cancel 等状态,并通过 set_sent()、set_opened()、set_replied()、set_bounced() 等方法推进。分析报表之所以可信,是因为背后有一套明确事件语义。
第四层:为什么 24 小时后还要再发一封统计邮件
_action_send_statistics() 会在 mailing 完成一段时间后,把 24H 的 KPI 与 link tracker 信息再发送给负责人。这个设计非常务实:很多营销或内部运营动作,真正要看的不是发送当下,而是发送后一天的回响。
第五层:为什么“开信率”不足以代表效果
因为 opened 只是 trace 状态机的一部分。一个活动是否成功,还要看 delivered、replied、clicked、bounce,以及 A/B winner 选择是否合理。只盯一个 opened ratio,很容易把“曝光”误当“效果”。
最容易误解的三个点
- 误区一:A/B 就是发两个版本看谁高。真正难的是抽样不重叠、winner 不混账。
- 误区二:统计表就是事实。没有 trace 事件语义,统计只是表面数字。
- 误区三:24 小时统计邮件是锦上添花。对负责人来说,它往往才是复盘入口。
实战上怎么用更稳
- 做 A/B 时,先关心样本切分和去重逻辑,再讨论文案差异。
- 查分析异常时,先看 trace 状态推进是否完整,再看仪表盘。
- 如果业务方只盯 open rate,建议同时拉 delivered、reply、click 和 bounce 一起解释。
最后总结
真正的群发分析,不是看一眼报表,而是沿着“抽样、发送、留痕、汇总”这条链把结果读明白。Odoo 的 A/B 和 trace 设计,就是在支撑这件事。
DISCUSSION
评论区