先说结论
Odoo CRM 里的活动系统,绝不是“给商机挂一个待办日期”这么简单。
如果你只盯着 kanban 上的 next activity,你其实只看到了最表层的一层提示。源码真正提供的是一条更完整的跟进节奏链路:
- 用
mail.activity.plan把一套标准动作批量铺到 lead / opportunity 上 - 把活动中的会议动作继续接到 CRM 上下文里
- 再用
crm.activity.report从消息层面回看活动完成情况
所以 Odoo CRM 的活动机制,更像一个“节奏系统”,而不是一个单点提醒器。
如果你现在遇到这些问题:
- 团队每个人都在做跟进,但动作顺序不一致
- 预约会议时老是丢客户、团队、商机上下文
- 管理层能看到商机金额,却看不到执行动作质量
那大概率不是 CRM 不会做,而是你只用了 next activity,没把活动计划、会议接力和报表这一整条链路串起来。
一、先别把 CRM 活动理解成“写一条待办”
crm.lead 继承了 mail.activity.mixin,这意味着商机天生就在 mail.activity 体系里。
表层上你会看到:
- 下一步待做什么
- 截止日期是什么
- 是否逾期
- 谁负责做
但如果只到这一步,系统就只是个提醒盒子。
Odoo CRM 往前多做了一件非常重要的事:
它把活动从“单条提醒”往“标准流程模板”推进了。
这个模板入口,就是 mail.activity.plan。
二、activity plan 的意义,不是省点几次点击,而是固化节奏
在 crm/views/mail_activity_plan_views.xml 里,官方明确给 CRM 提供了独立入口:
Lead Activity Plansdefault_res_model = 'crm.lead'
帮助文案也写得很直白:
- 用几次点击就能批量布置一串活动
- 例如 Qualification、Demo Preparation Process
这代表官方对 activity plan 的定位不是“高级用户才会碰的配置”, 而是 CRM 的正式玩法。
业务上它解决的不是“点按钮少一点”, 而是下面这类真正影响转化率的偏差:
- 有的人拿到线索先打电话,有的人先发邮件
- 有的人做完 discovery 就约 demo,有的人会先补资格信息
- 有的人跟进节奏是一周 3 次,有的人是 10 天没动
当你没有 activity plan 时,这些差异都被藏在个人习惯里。
当你用了 activity plan,系统才开始表达:
对某类线索,我们希望按什么节奏推进。
这是 CRM 从“看板工具”走向“执行系统”的分界线。
三、next activity 只是界面信号,真正重要的是动作串有没有被标准化
之前很多实现会把 next activity 当成核心 KPI:
- 有下一活动就是好
- 没下一活动就是差
这个判断太粗。
因为 next activity 本质只是一个结果态提示,它不会自动回答这些问题:
- 这个动作是不是本阶段该做的动作
- 它是不是过早、过晚或顺序颠倒
- 不同销售做的是不是同一套动作
而 activity plan 的价值就在于,它把“接下来要做什么”从个人临场判断,变成一种团队级默认节奏。
所以更成熟的理解应该是:
next activity负责可见性activity plan负责一致性
如果只追求前者,你只能看到“有人在动”; 如果把后者也做好,你才能看到“团队在按同一套节奏动”。
四、会议为什么不该被当成和 CRM 脱节的独立日历动作
很多团队的实际问题不是“不会建会议”, 而是会议一旦从商机跳出去,客户和上下文就丢了。
Odoo 在 crm/models/mail_activity.py 里专门补了一层:
- 如果 activity 关联到
crm.lead - 并且通过
opportunity_id找到商机 - 那么从活动创建 calendar event 时,会把商机侧的会议上下文一起带过去
这层 override 的业务含义非常明确:
活动里的“约会议”,不是通用日历动作,而是 CRM 节奏中的一个连续步骤。
也就是说,会议并不应该和商机脱钩。
五、action_schedule_meeting() 真正在保护什么上下文
crm.lead.action_schedule_meeting() 里会往日历 action context 里塞很多默认值:
default_opportunity_iddefault_partner_iddefault_partner_idsdefault_team_iddefault_name
这几个字段一起看,意思就很清楚了:
- 会议不是无主事件,而是有明确商机归属
- 参会人不是重新手填,而是优先带出商机客户
- 团队上下文也跟着走
- 会议名称会继承机会标题
换句话说,Odoo 不希望你把会议当成“另起一条记录的动作”, 而是把它设计成:
商机推进动作的自然延续。
这能显著减少一个常见问题:
- 会议是开了
- 但会后回看 CRM 时,这个会议像是和商机没什么关系
官方显然不想让这种断裂发生。
六、Smart calendar 不是花活,而是在帮销售更快回到“相关时间段”
action_schedule_meeting() 还有一个很容易被忽略的设计:smart_calendar=True。
_get_opportunity_meeting_view_parameters() 会根据当前商机已有会议去决定:
- 该用
week还是month视图 - 初始日期落在哪一天
逻辑也挺像真实人的思路:
- 如果没有会议,就回到通用默认
- 如果只有一场会议,就以那场会议时间为中心
- 如果有多场会议,但都集中在一周,就打开周视图
- 如果跨度更大,就打开月视图
- 如果已有未来会议,就优先看未来而不是过去
这不是 UI 小聪明, 它在解决的是:
销售在安排后续动作时,系统应尽量把人带回“跟当前商机最相关的时间窗口”。
这能显著减少从 CRM 切到日历后的上下文跳跃。
七、活动执行的管理视角,不该只靠商机列表,而要看 activity report
crm.activity.report 这个模型经常被忽略。
它不是直接去读 mail.activity 当前状态,
而是基于 mail_message 生成一个 CRM 活动分析视图,并联到:
lead_create_datedate_conversiondate_deadlinedate_closeduser_idteam_idstage_idmail_activity_type_idwon_status
这说明官方想让你分析的,不只是“现在挂着哪些待办”, 而是:
- 哪类活动最常发生在什么阶段
- 哪些团队执行动作更密集
- 哪些类型的活动在赢单 / 丢单机会里更常出现
- 转化前后活动的分布是不是合理
这和很多团队常见的粗暴管理很不一样。
粗暴管理只会问:
- 今天打了多少电话
- 发了多少邮件
但 CRM 节奏管理更该问的是:
在什么阶段,由谁,以什么动作,把商机推进到了什么结果。
crm.activity.report 提供的就是这种视角。
八、为什么活动节奏设计要和 team/pipeline 一起看
活动计划如果脱离团队和 pipeline,最后会变成“统一模板压所有机会”。
这通常会出问题。
因为不同销售队伍、不同业务形态,节奏本来就不该一样。
举例:
- 新客入站线索,前期动作更偏 qualification
- 复杂 B2B 项目,前中期更偏 discovery、demo、solution fit
- 老客扩容机会,可能一开始就应直接进入报价 / 商务推进
所以 activity plan 的最佳用法不是“公司只有一套计划”, 而是:
- 以 team 或 pipeline 语义区分不同节奏
- 再让 next activity 成为这个节奏的实时可见层
否则你会得到一种很假的秩序:
- 每个人看起来都很忙
- 但并不一定在做当前阶段最关键的动作
九、实战里最容易踩的 4 个坑
1. 只看 next activity,不做 activity plan
你看到的是提醒,不是流程。
2. 会议从活动里创建,却不保留 CRM 上下文
会后复盘时,日历和商机就会两张皮。
3. 用商机金额看执行质量
金额能说明价值,不说明动作节奏是否健康。
4. 把所有团队都套进同一个活动模板
表面统一,实则制造噪音。
最后一句
Odoo CRM 的 mail.activity 体系真正厉害的地方,不是它会提醒你“今天该做点什么”, 而是它已经把节奏系统的骨架给你搭好了:
用 activity plan 规定动作顺序,用会议上下文保持动作连续,用 activity report 回看执行质量。
如果你把这三件事连起来,CRM 才会从“有提醒的看板”进化成“能复制节奏的销售系统”。
DISCUSSION
评论区