先说结论
Odoo 的 mail.canned.response 不是“我自己存一段常用文本”这么简单。
它本质上是一套可共享的协作回复片段:既要让输入足够快,也要让团队口径尽量统一,还要控制谁能看、谁能改。
所以它的设计天然带权限和广播,而不是一个本地浏览器收藏夹。
一、它到底存了什么
在 addons/mail/models/mail_canned_response.py 里,核心字段很少:
source:快捷词substitution:替换内容group_ids:授权群组last_usedis_sharedis_editable
这套结构说明它关注的不是“文本很长还是很短”,而是三件事:
- 如何被触发
- 替换成什么
- 属于谁的协作空间
二、为什么快捷词要单独建模
源码帮助文本已经说得很直白:输入 ::shortcut 时,可以自动替换成更长内容。
这意味着 Odoo 的目标不是做一个“模板中心页面”,而是让用户在聊天和协作输入过程中直接插入标准化内容。
这特别适合:
- 客服常见答复
- HR 邀约话术
- 项目交接提醒
- 财务催款或确认模板
所以 canned response 的本质不是“文档”,而是对话里的可复用动作。
三、为什么共享是按群组,而不是人人可见
group_ids 的存在非常关键。
它说明 Odoo 不希望所有预设回复天然全员共享。
这很合理,因为团队回复模板往往带边界:
- 销售话术不一定该给所有人随便用
- 财务回复可能涉及固定措辞
- HR 模板可能含流程敏感内容
因此它不是“共享/不共享”二元开关,而是“共享给哪些角色”。
四、为什么创建、修改、删除都要广播
源码里 create()、write()、unlink() 都会调用 _broadcast()。
这说明 canned response 不是后台静态配置,而是前台协作界面的一部分。
一旦模板变动,相关用户或群组要尽快收到更新,否则会出现:
- A 看到旧模板
- B 看到新模板
- 团队回复口径短时间分裂
广播机制的意义,就是把模板更新尽快同步进当前协作现场。
五、为什么 is_editable 不是简单看创建者
源码里可编辑性不是只看 create_uid,而是结合创建权限、写权限来算。
这很像一个成熟协作系统的态度:
- 创建者通常有天然控制权
- 但如果当前用户有对应访问权,也可能允许编辑
- 没权限就算看得到,也不该随便改
这比“只有创建者能改”更灵活,也比“谁都能改”更安全。
六、最容易踩的误区
误区 1:把它当成个人便签
结果团队没有统一话术,重复造轮子。
误区 2:把所有模板都全员共享
结果低质量模板泛滥,输入候选噪音很大。
误区 3:把它当成正式知识库
它适合短促、可插入的回复,不适合承载完整 SOP。
七、落地建议
如果你想把它用好,建议按这个思路:
- 高频、短句、可复用的内容才放 canned response
- 需要统一口径的模板按群组授权
- 模板正文保持“可直接发出去,但允许临场改一句”
- 复杂流程说明仍然放知识库、文档或 playbook
最后一句
Odoo 预设回复真正优化的,不只是打字速度,而是团队在高频沟通里的表达一致性。
这也是它为什么必须同时管快捷词、共享范围和编辑权限。
DISCUSSION
评论区