企业 Social Push

Odoo 企业版 Social Push 为什么不是“给网站访客群发通知”:timezone 分批、Firebase fallback 与 token 清理讲透

基于 social_push_notifications 源码,讲清网页推送如何按访客时区过滤、走 Firebase/IAP fallback,并在发送后清理失效 token。

企业 其他
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 4 阅读

网页推送最容易被误解成“给所有访问过网站的人群发一条通知”。但 enterprise/social_push_notifications/models/social_live_post.pysocial_account.pywebsite_visitor.py 其实在做一件更谨慎的事:先筛真正可触达的访客,再按时区批次发送,发送时还要在 Firebase 配置和 IAP 通道之间兜底,最后把失效 token 清掉。

一、Push post 不是普通社媒帖子,它要先走专门投递逻辑

social_push_notificationssocial.live.post 做了扩展,核心方法是 _post()_post_push_notifications()。这意味着网页推送虽然挂在 Social 应用下,但它并不复用普通社媒发帖的心智,而是有一条单独的投递流水线。

业务上这很合理:微博、LinkedIn、Facebook 面向的是平台账号;网页推送面向的是你自己站点上的 visitor 订阅关系,数据边界完全不同。

二、访客筛选不是按“全部订阅用户”,而是考虑时区和活跃性

social_live_post.py 里定义了 get_filtered_timezone_visitors(visitor)website_visitor.py 又提供 _inactive_visitors_domain()。这说明 Odoo 在做网页推送时,首先关心的不是名单越大越好,而是“这个访客在当前时区、当前活跃状态下,是不是值得现在推”。

这点非常企业化。跨时区站点如果不分批,亚洲凌晨和欧美工作时段会被一锅端;长期不活跃的订阅者继续推,也只会拉高失败和退订。

三、Firebase 不是唯一通道,系统准备了 fallback

social_account.py 里同时有 _firebase_send_message()_firebase_send_message_from_configuration()_firebase_send_message_from_iap()。这表示官方默认承认两件事:

  1. 企业可能自己配好了 Firebase;
  2. 企业也可能需要通过 IAP 或托管方式兜底。

所以推送体系不是“有没有 Firebase 就结束”,而是“先判断当前可用发送路径,再选择最合适的那条”。

四、token 清理是主链路的一部分,不是后期卫生工作

_clean_unregistered_tokens()website_visitor._register_push_subscription() 放在同一模块里,透露出很明确的设计:注册订阅和清理失效订阅同样重要。如果一条 token 已经无效,还继续保留在 visitor 侧,后续每次推送都会浪费请求并污染成功率统计。

这也是为什么企业做网页推送时不能只看“注册量”,还要持续看“活跃订阅量”。

五、实战注意事项

  1. 先把 visitor 订阅质量看清楚:不是有 token 就等于有效用户。
  2. 按时区投递:跨区域站点尤其要避免单批群发。
  3. 把 Firebase fallback 作为正式设计:外部通道出故障时必须有兜底路径。
  4. 定期清理无效 token:否则投递成功率和用户画像都会失真。

新手误区

  • 误以为网页推送和普通社媒发帖是同一类对象。
  • 误以为订阅人数越多越好,不必关心活跃度和时区。
  • 误以为 Firebase 配好后就没有运营问题。
  • 误以为 token 清理只是系统维护,不影响业务效果。

主要源码参考

  • enterprise/social_push_notifications/models/social_live_post.py
  • enterprise/social_push_notifications/models/social_account.py
  • enterprise/social_push_notifications/models/website_visitor.py

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。