论坛分流真正难的不是“把工单按钮放到论坛页面”,而是同一个问题在论坛、工单和团队之间如何保持可追踪的关系。
核心链路
controllers/website_forum.py里的helpdesk_forums()先根据 team 的website_forum_ids和当前website_domain()过滤论坛;如果最终只剩一个论坛,用户会被直接 302 跳转。也就是说,入口页本身就承担了网站级隔离。create_ticket_and_view()不是简单返回一个按钮,而是先通过_read_group()反推“这个论坛对应哪些 helpdesk team”。若论坛没有绑定团队但存在“全局可用团队”,返回值会把团队列表全给前端。- 在后台分享场景里,
helpdesk.ticket.select.forum.wizard的default_get()、_compute_post()和_search_filter_for_helpdesk_wizard()共同决定可选论坛、默认标题/描述、以及 ticket tag 如何映射为 forum tag。 _create_forum_post()会创建 forum 问题贴;如果客服已经写好answer_content,还会立刻补一条is_correct=True的答案。随后它把 forum_post 追加回ticket.forum_post_ids,并在消息线程中留一条可点击链接。- 这条链路的重要含义是:论坛不是工单的“出口”,而是企业支持流程里的另一个知识沉淀终点。客服把票据内容沉淀成论坛问答后,系统仍保留 ticket 到 post 的双向关联。
关键源码位置
/home/ubuntu/odoo-temp/enterprise/website_helpdesk_forum/controllers/website_forum.py/home/ubuntu/odoo-temp/enterprise/website_helpdesk_forum/wizards/helpdesk_ticket_select_forum.py
容易误解的地方
- 误区一:用户总能看到“创建工单”按钮。实际上
teams_per_forum_dict决定了按钮是否出现,论坛没接 team 时不一定开放。 - 误区二:forum tag 与 helpdesk tag 是两套无关体系。源码会按名称小写匹配并复用已有 forum_tag。
- 误区三:把 ticket 分享到 forum 就等于关闭工单。事实上这里只是建立关联,并没有自动结案。
实战注意事项
- 如果想让论坛先承接简单问题,再升级复杂问题为工单,关键不是改模板,而是规划
website_forum_ids与 team 的映射关系。 - 为避免标签污染,helpdesk 与 forum 侧最好约定统一的小写标签命名。
- 客服把标准答案沉淀到
answer_content时,要把一次性工单语气改成可复用问答,否则论坛资产质量会很差。
结语
企业版这些代码共同说明一件事:真正可上线的业务流程,靠的不是“页面上看起来能点通”,而是权限、状态、时机、对账口径和跨模块回写都被收紧。理解这些边界,实施和二开时就不容易走进“功能演示能跑、真实业务一用就散”的坑。
DISCUSSION
评论区