CRM 深度

Odoo CRM 自动分配为什么既看 24 小时又看 30 天:assignment_max、daily quota 与成员容量口径讲透

很多团队只盯着 Odoo CRM 里的 assignment_max,以为那就是今天还能分多少线索。源码其实把 30 天平均容量、近 24 小时已分配量和 force_quota 三层逻辑分开了。

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

先说结论

Odoo CRM 自动分配不是“给每个销售写一个每天上限”。

源码把容量拆成三层:

  • assignment_max:成员30 天平均容量
  • lead_day_count:最近 24 小时 已分到多少;
  • _get_assignment_quota():把前两者折算成这次还能不能继续分。

再加一个特例:

  • force_quota=True 时,手工分配可以忽略今日已分量,直接按日配额满额发。

所以它设计的不是“绝对限流器”,而是平滑投放机制


一、assignment_max 不是“今天最多几条”

crm.team.member.assignment_max 的字段说明写得很清楚:

Average Leads Capacity (on 30 days)

也就是说,它描述的是一个成员在 30 天尺度上的平均承载能力。

随后 _get_assignment_quota() 会把它除以 30,再做四舍五入,得到每天大致可接量。

所以如果你把 assignment_max=60,系统更接近理解成:

  • 平均每天 2 条;
  • 而不是“某一天可以一次性塞 60 条”。

二、为什么看的是最近 24 小时,不是自然日

lead_day_count 用的是“当前时间往前 24 小时”的窗口。

这比按自然日更真实,也更连续。

好处是:

  • 不会因为刚过午夜就瞬间清零;
  • cron 一天跑多次时,不会把同一天的负载假装成多天;
  • 更适合滚动式分配。

代价是业务上会出现一种体感:

昨晚分过很多,今天上午看起来“今天还没开始”,但系统仍认为你很忙。

这不是 bug,而是滚动窗口语义。


三、30 天统计的作用,不是直接限流,而是给管理层看节奏

lead_month_count 统计的是最近 30 天已分配数量。

它主要用于:

  • 让 team 看成员长期接单量;
  • 判断 team 总分配量是否超过总容量;
  • 形成 lead_all_assigned_month_exceeded 这类管理信号。

所以 24 小时计数更偏即时节流,30 天计数更偏中期容量观察


四、为什么还要保留 force_quota

源码在 _cron_assign_leads()action_assign_leads() 里故意分了两种场景:

  • cron 场景:默认考虑今天已经分了多少;
  • 手工分配:常带 force_quota=True,允许这次把额度补满。

这很符合实际运营。

因为管理员手工点“现在就分配”,往往是在处理积压,不希望系统再说: “抱歉,这个人过去 24 小时已经接过两条了,所以今天先不派。”


五、最常见的误解

1. 把 assignment_max 当作今日上限

错,它本质是 30 天平均能力。

2. 以为零点后额度会重置

错,窗口是滚动 24 小时。

3. 以为手工分配和自动 cron 口径完全一样

错,force_quota 会改变行为。

4. 以为“月度超额”一定代表今天不能再分

也不对。月度超额更多是管理提醒,不等同于即时硬阻断。


六、排错顺序

当你发现“为什么这个销售今天还没接单却不给他分”时,先查:

  1. 最近 24 小时内是否已大量分配;
  2. assignment_max 是否太低;
  3. 是否走的是 cron 而不是手工强制分配;
  4. 该成员有没有 assignment_optout 或 domain 限制;
  5. team 总容量是否已被其他成员吃掉。

一句话记忆

Odoo CRM 的自动分配不是按自然日清零的日上限,而是用“30 天平均能力 + 近 24 小时已接量”来做平滑投放。

DISCUSSION

评论区

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