CRM 深度

Odoo CRM 为什么有些商机会排到前面:next activity、my_activity_date_deadline 和 meeting 信号

很多人觉得 Odoo CRM 的列表排序有点‘聪明得过头’,明明机会金额不大,却总排在前面。源码里这不是玄学,而是 activity 截止日期、my_activity_date_deadline、meeting_display 和日历入口在一起塑造出来的跟进信号。

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

先说结论

在 Odoo CRM 里,“下一步跟进”不是一段备注, 而是一组会影响列表、看板和日历体验的真实信号。

源码里至少有 3 套相关信息在一起工作:

  • activity_* 字段:谁的下一步、截止什么时候
  • my_activity_date_deadline:当前用户自己的最早待办日期
  • meeting_display_*:这条商机最近/下一次会议是什么时候

所以你看到有些机会总被顶到前面, 往往不是因为金额更大, 而是因为系统在强调:

这条记录“下一步更近、责任更明确、会议动作更临近”。

这其实是 CRM 很实用的一层:

  • 它不是只按商机价值排序
  • 而是在帮你表达“现在谁最该被跟”。

一、activity 在 CRM 里不只是提醒,它是优先级信号

很多人对 activity 的理解停在:

  • 给销售提个醒
  • 到点弹一下

但从 CRM 源码和测试看,activity 的意义更深。

因为它会直接形成:

  • 当前记录有没有下一步
  • 下一步归谁
  • 最早截止时间是什么
  • 我自己的待办是不是已经逾期

也就是说,activity 在 CRM 里更像:

对 pipeline 里的“下一步动作密度”做结构化表达。

这和单纯写一段“下周联系客户”完全不是一个层级。


二、为什么 my_activity_date_deadline 很关键

activity_date_deadline 表示这条记录上的活动截止情况, 但 my_activity_date_deadline 更特别:

  • 它只关心“分配给我自己的活动”
  • 而不是全体人员的活动

这点很关键。

因为一条商机上可能挂着很多人:

  • 销售
  • 经理
  • 售前
  • 客服

如果列表优先级永远按所有人的活动混算, 个人工作台会非常吵。

所以 Odoo 单独保留了“我的最早 activity 截止日”这个信号。

这意味着系统在排序“我的机会列表”时, 不是简单问:

  • 这条记录活跃不活跃

而是在问:

  • 它现在是不是轮到我动作了,而且期限有多近。

三、为什么 Odoo 要专门重写 search_fetch() 支持这个排序

crm.lead.search_fetch() 的 override 非常能说明问题。

源码里明确写了:

  • 默认搜索机制不足以优雅支持 my_activity_date_deadline 排序
  • 所以它专门分两步做搜索

大意是:

  1. 先基于“我的 activities”算出每条 lead 的最早 deadline
  2. 再把这些 lead 按 deadline 重排
  3. 如果还不够,再补其他普通结果

这说明 my_activity_date_deadline 不是 UI 小技巧, 而是官方认可的一类工作台级排序信号

换句话说:

Odoo CRM 不只是存 activity,它还认真地拿 activity 驱动你看到的工作顺序。


四、为什么有些记录会因为逾期 activity 被顶得更靠前

测试 test_crm_activity_ordering 很直观:

  • 我的 activity 截止日期越早
  • 尤其越逾期
  • 那条 lead 越可能排到前面

这其实很符合销售工作现实。

一个金额很大但下周才需要动作的机会, 和一个今天就该回访、已经拖过期的机会, 到底谁更应该先看?

从“防止漏跟进”的角度,后者往往更急。

所以 Odoo 的排序不是在回答“哪个公司最值钱”, 而是在回答:

  • 现在什么最需要你立刻处理。

五、meeting_display 说明 CRM 不只关心待办,也关心会面节奏

crm.lead 里还有:

  • meeting_display_date
  • meeting_display_label

源码逻辑是:

  • 如果将来还有会议,显示 Next Meeting
  • 如果未来没有,但过去有过会议,显示 Last Meeting
  • 如果完全没有会议,显示 No Meeting

这套设计很妙。

因为它没有把所有会议硬塞成一团时间线, 而是提炼成一个更适合 CRM 首页/列表的信号:

  • 这条机会最近有没有见面动作
  • 下一次关键会面离现在多远

这比只看 chatter 留痕更适合销售节奏管理。


六、从 activity 直接跳去排会议,为什么默认参会人会自己带出来

mail.activity.action_create_calendar_event() 在 CRM 上有一个很小但很实用的 override。

如果这个 activity 对应的是某条 crm.lead, 系统会复用 action_schedule_meeting() 的上下文,把这些默认值带过去:

  • default_opportunity_id
  • default_partner_id
  • default_partner_ids
  • default_team_id
  • default_name

翻成人话就是:

  • 你不是从空白日历硬建会议
  • 而是从当前商机上下文里继续排一个正确的会

所以 Odoo 在 CRM 里处理会议,不是把 calendar 当外部工具, 而是把它当跟进链路的一部分。


七、为什么“下一步”比“最后聊过什么”更适合作为 CRM 主信号

真实销售里,最致命的问题不是“历史不够完整”, 而是:

  • 不知道下一步是谁
  • 不知道下一步截止点
  • 不知道是不是已经过期

这就是为什么 activity 在 CRM 里比普通 chatter 更值钱。

chatter 更适合表达:

  • 发生过什么

activity 更适合表达:

  • 接下来谁做什么

而 meeting_display 又把“会面节奏”补了进来。

三者合起来,CRM 才真正能从记录系统变成跟进系统。


八、实战里最容易踩的 4 个坑

1. 只看金额,不看 next activity

这样很容易让高价值但不紧急的记录,压过真正即将漏掉的动作。

2. 把 activity 当备注用

activity 的价值在责任人和 deadline,不在文字本身。

3. 不区分 activity_date_deadlinemy_activity_date_deadline

一个是全局活动信号,一个是当前用户工作台信号。

4. 会议安排不从商机上下文发起

这样很容易丢默认客户、团队和机会关联。


九、一句话记忆法

Odoo CRM 里的 next activity 不是提醒插件,而是排序、优先级和会议节奏的核心信号。

理解这一句,你就会知道为什么有些机会总被系统顶到你眼前。

DISCUSSION

评论区

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