CRM 深度

Odoo CRM 里选了公司为什么不一定立刻挂成联系人:commercial_partner_id 预选、联系方式比对与 partner 真正落链边界讲透

很多人以为在线索上选了商业公司就等于 partner_id 已经定了,但源码把 commercial_partner_id 当成 UX 辅助字段。创建时若电话或邮箱和该公司不一致,系统宁可只保留 partner_name,也不会强行挂错 partner。

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

先说结论

在 Odoo CRM 里,commercial_partner_idpartner_id 不是同一个语义层。

  • commercial_partner_id 更像用户界面上的公司候选/预选
  • partner_id 才是正式挂上的联系人或客户记录。

源码在 create() 里处理得很谨慎:

  • 如果你只给了 commercial_partner_id,系统会拿 lead 的邮箱、电话和该公司做比对;
  • 若联系方式不一致,系统不会强行把 partner_id 指向这家公司
  • 它宁可只保留 partner_name,让你后续再确认。

这是一种典型的“宁可晚挂,也别错挂”。


一、为什么要把两个字段分开

真实销售场景里,销售常常只知道:

  • 这条线索大概属于某家公司;
  • 但联系人是谁还不完全确定;
  • 或邮箱/电话看起来像外包、分支机构、个人号。

如果系统把“选了公司”直接等价成“正式挂到 partner”,风险很大:

  • 把错误联系人绑定到老客户主数据;
  • 后续同步地址、邮箱、电话时误伤主数据;
  • 重复检测和归因都可能跟着偏。

所以 Odoo 先给你一个商业公司视角,再决定是否真的落链。


二、创建时到底检查了什么

create() 里,源码会对只提供 commercial_partner_id 的情况做检查。

关键判断是:

  • lead 上有电话或邮箱;
  • 且这些联系方式与商业公司的已知联系方式不一致。

一旦不一致,系统不会直接把 partner_id 指向这个商业公司。 而是:

  • 保留 partner_name 作为公司信息;
  • 等待后续人工确认或转化流程再处理。

这说明 Odoo 不是在追求“自动挂得越多越好”,而是在追求“别把错关系写死”。


三、为什么这和“联系人同步边界”是两回事

很多人会把它和 lead-partner 同步混在一起。

但这里讲的是建链前的保守策略:

  • 先决定要不要认这个 partner;
  • 再谈认了以后哪些字段同步。

如果第一步都错了,后面的同步再精细也没有意义。


四、这套设计最能避免什么坑

它主要避免三类事故:

  1. 把陌生联系人硬挂到老客户公司;
  2. 因为公司名相似就误认主数据;
  3. 后续 conversion 时误以为客户关系已经确认。

也正因为如此,用户有时会觉得: “我明明选了公司,为什么表单里没直接变成那个联系人?”

答案通常是:

因为源码在替你防止误绑。


五、排错顺序

当你发现 commercial_partner_id 没有自动落成 partner_id 时,先查:

  1. lead 上是否带了邮箱或电话;
  2. 这些联系方式和目标商业公司是否一致;
  3. 系统是否因此只保留了 partner_name
  4. 业务上是否本来就应该等后续转换或人工确认再落正式联系人。

一句话记忆

Odoo CRM 里的 commercial_partner_id 更像“我猜你属于这家公司”,partner_id 才是“我确认把你正式挂到这条客户主数据上”。

DISCUSSION

评论区

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