CRM 深度

Odoo CRM 邮件进线为什么不会直接“认领给网关用户”:alias、message_new 和 team 入口链路讲透

很多人以为外部邮件进 CRM 后,系统只是在 crm.lead 新建一条记录。源码实际上非常讲究:team alias 先注入 type/team 默认值,message_new 刻意清空 default_user_id,再让后续分配机制接管负责人。

CRM
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

先说结论

Odoo CRM 的邮件进线,不是“收件箱收到一封邮件,然后 root 用户名下多一条 lead”。

源码刻意把这条链路拆开:

  1. team alias 决定入口上下文
  2. message_new() 负责把邮件变 lead
  3. 但它故意不把网关用户当负责人
  4. 最后再让 team 内的分配逻辑接管 owner

所以邮件进 CRM 的本质,不是“谁收了邮件谁负责”, 而是:

哪个 sales team 收到这封邮件,这条线索就先进哪条 pipeline,再按 CRM 规则继续分配。


一、team alias 不是邮箱别名那么简单

crm.team 继承了 mail.alias.mixin

_alias_get_creation_values() 里,Odoo 会把 alias 指向:

  • alias_model_id = crm.lead
  • alias_defaults['team_id'] = 当前 team
  • alias_defaults['type'] = lead 或 opportunity

也就是说,team alias 自带两层含义:

  • 这封邮件进来要创建 crm.lead
  • 而且要默认属于哪个 team、是什么类型

所以邮箱地址本身就是 pipeline 入口设计的一部分。 它不是通知邮箱,而是 建档入口


二、为什么 Odoo 不想把网关用户变成负责人

message_new() 里有一段非常关键的处理:

  • self = self.with_context(default_user_id=False)

源码注释写得很直白:

  • 不想显式把某个用户设成 responsible
  • 否则往往会变成 root / gateway user
  • 这样会破坏自动分配或人工分配语义

这一步非常像“先别急着认领”。

因为邮件网关用户只是技术通道, 它不代表真正负责跟进这条商机的人。

如果系统一进来就把负责人锁成网关用户,后面很多 CRM 机制都会变味:

  • 自动分配会失效
  • 负责人口径会被污染
  • 报表会出现一堆假 owner

三、邮件变成 lead 时,到底写了哪些默认值

message_new() 会先准备 defaults:

  • name = subject
  • email_from = from
  • partner_id = author_id(如果能识别)
  • priority(如果邮件里带了合法优先级)

再叠加 alias 传进来的 custom_values

于是整个建档逻辑就非常清楚:

  • 邮件主题变线索标题
  • 发件人变联系邮箱
  • 若系统能识别作者伙伴,就直接挂 partner
  • team/type 则由 alias 上下文决定

这就是为什么同样是一封外部邮件, 发到不同 team alias,会落进不同的 CRM 管道。


四、为什么新 lead 创建后还会再触发一次 team 内分配

message_new() 最后还有一句:

  • new_lead._assign_userless_lead_in_team(_('incoming email'))

这说明 Odoo 的思想不是“邮件网关即分配器”, 而是“邮件网关只是入口,team 规则才是分配器”。

换句话说:

  • 邮件先落到对的 team
  • 如果这条 lead 还没有 owner
  • 再尝试用 team 规则补上负责人

这和前面文章讲的 rule-based assignment 是一条大逻辑, 只是这里的入口变成了 incoming email。


五、reply-to 为什么也会跟着 team 走

_notify_get_reply_to() 又把 lead 的 reply-to 映射回 team_id 的 alias。

这点非常关键。

它意味着:

  • 不只是进入 CRM 时按 team 收口
  • 后续从 CRM 发出去的邮件回复地址,也尽量回到对应 team

这样一来,沟通线程不会轻易从团队入口漏出去, 而是继续被 team 的 alias 承接。

这对于共享邮箱式销售协作很重要。 不然客户回复可能飞回个人邮箱,团队视角就断了。


六、为什么发消息后有时会“顺手挂上 customer”

_message_post_after_hook() 里还有一个常被忽略的机制:

如果 lead 还没有 partner_id,但你在 chatter 发消息时指定了收件对象, 系统会尝试把匹配到的 partner 回写到相关 lead 上。

也就是说,Odoo 不只在“建 lead 那一刻”理解客户归属, 它还会在后续邮件互动里继续补全客户关系。

这很像一种渐进式建档:

  • 先让线索进来
  • 再在互动过程中逐步把客户身份钉实

七、实战里最容易误解的 5 件事

1. 以为 incoming mail 一定归网关用户

错。源码特意避免这种脏 owner。

2. 以为 alias 只是收邮件地址

错。它还决定 team 和默认 type。

3. 以为邮件进线和普通建 lead 没区别

不完全。它有专门的 message_new() 入口和 team 分配补偿。

4. 以为 reply-to 随便配都行

错。reply-to 与 team alias 一致,协作才不容易断线。

5. 以为 partner 只能在建 lead 时确定

错。后续 chatter 消息也可能补挂 customer。


八、一句话记忆法

Odoo CRM 的邮件进线是“team alias 定入口,message_new 建记录,分配逻辑补 owner,reply-to 再回 team”,而不是“谁收邮件谁负责”。

理解这个设计,才能把共享邮箱、销售团队和 CRM 分配机制真正串起来。

DISCUSSION

评论区

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