企业 CRM 电话

Odoo 企业版电话到商机入口:voip_crm 如何按机会数量与权限决定跳转

voip_crm 真正有价值的地方,不是弹一个电话侧栏,而是它会根据 partner 的机会数量和读权限,在新建、表单、列表三种动作之间安全切换。

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

电话侧栏最怕做成“看起来很聪明,实际上乱跳转”。销售接电话时,系统必须在几秒内决定:这通电话是新机会、老机会,还是一组历史机会?voip_crm 在这件事上做得很克制:它只暴露必要信息,并且把跳转逻辑做得很明确。

主要参考:

  • enterprise/voip_crm/models/res_partner.py
  • enterprise/voip_crm/models/voip_call.py
  • enterprise/voip_crm/tests/test_voip_crm_access_rights.py

一、机会计数不是默认公开数据

_voip_get_store_fields() 明确给 opportunity_count 加了 predicate,只有能读 crm.lead 的用户才会拿到这个字段。这个设计非常值得注意:电话 UI 虽然追求快,但企业版并没有因此牺牲权限边界。

换句话说,系统不会因为“这是个侧栏”就把销售机会数偷偷暴露给没权限的人。对企业来说,这种克制比炫技更重要。

二、0 / 1 / 多个机会,系统会走三种不同动作

get_view_opportunities_action() 的逻辑非常直白:

  • 没有 partner:直接打开新建 opportunity,并带上默认电话;
  • 有 partner 且 opportunity_count == 0:打开新建表单,并预填 partner;
  • opportunity_count == 1:直接进入唯一那条 opportunity;
  • 多于 1 条:打开列表并带 domain。

这背后的业务含义是:电话场景最怕用户多想一步。系统宁可多写几段条件分支,也要把最可能的下一步直接准备好。

三、voip_call 只是桥,不是另一套 CRM 逻辑

voip_action_view_opportunity() 本质上还是调用 partner 侧的机会动作。它没有偷偷复制一套“电话版商机逻辑”,而是把电话上下文(例如来电号码)转交给已有 CRM 动作。

这类设计很稳健:真正的业务判断集中在 partner/action 层,电话模块只负责把用户带到正确入口。这样后续想改机会跳转规则,不必在多个模块里同时修补。

四、新手最容易忽略的边界

  • 机会数不是纯展示字段,它本身就是权限敏感信息。
  • 电话入口不是“总是打开列表”,而是根据机会数量做分流。
  • 来电号码只有在没有 partner 时才更像“潜在线索起点”;一旦有 partner,系统会尽量复用既有客户上下文。

五、实战建议

  1. 如果销售反映电话侧栏跳错,不要先怪前端,先核对 partner 匹配和机会数量统计。
  2. 对混合权限团队,重点验证无 CRM 读权限用户是否仍能看到机会计数。
  3. 培训销售时说明:电话入口只是入口,最终仍要回到机会对象上维护上下文。

六、结论

voip_crm 的成熟之处,在于它没有把电话侧栏做成一个“绕过 CRM”的快捷通道,而是用机会数量、partner 上下文和读权限,把用户准确送到新建、单条或多条商机入口。快,但不越界,这才是企业版电话入口该有的样子。

DISCUSSION

评论区

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