企业 网站客服

Odoo 企业版网站客服为什么不是“聊天记录原样变工单”:session 存档、channel access 与 ticket 回链边界讲透

website_helpdesk_livechat 真正做的是把 livechat 会话裁成可存档、可检索、可回链的 ticket 上下文,而不是把整个聊天频道原样塞进工单。

企业 网站
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 4 阅读

“聊天转工单”看上去最像复制粘贴:把对话存下来,生成 ticket,结束。企业版 livechat 的处理方式更谨慎,因为聊天频道本身带有可见性、参与人和实时窗口权限,不能原样搬进 helpdesk。

主要参考源码:

  • enterprise/website_helpdesk_livechat/models/discuss_channel.py
  • enterprise/website_helpdesk_livechat/models/helpdesk_ticket.py
  • enterprise/website_helpdesk_livechat/tests/test_channel_access.py

一、会话不是整段复制,而是字段级存档

_get_livechat_session_fields_to_store() 先问一个问题:当前上下文对 helpdesk.ticket 有没有读权限。如果没有,直接返回父层字段集合,不做额外 helpdesk 存档。

有权限时,它还会沿着客户 partner 的父子关系扩展同公司伙伴,去搜索可关联 ticket。也就是说,系统存的不是“聊天室所有细节”,而是为了后续 ticket 检索和承接需要的那部分会话字段。

二、建 ticket 时先过 channel access

helpdesk.ticket.create()write() 都检查 origin_channel_id 是否可读。测试 test_cannot_link_ticket_to_restricted_channel() 更明确说明:哪怕用户是 helpdesk 用户,只要对那个聊天频道没有 read 权限,就不能把它挂到工单上。

这个边界非常重要,因为它阻止了两类越权:

  • 把受限 livechat 频道偷偷挂到普通工单;
  • 通过工单反向窥探本不该访问的聊天上下文。

三、回开聊天窗口也不是所有人都行

action_open_livechat() 不是返回一段原始 transcript,而是通过 bus / store 给 origin_channel_id 发送 open_chat_window。这意味着“从工单回开聊天”依赖的是你对原频道仍然有合法访问,而不是 ticket 自己帮你绕过 discuss 权限。

四、命令式建单和关键词取票,本质上是在做上下文裁剪

execute_command_helpdesk()/ticket 命令在聊天里创建工单,fetch_ticket_by_keyword() 则根据关键词、标签和客户资料搜索 ticket。两者都说明 livechat 与 helpdesk 的集成不是全文搬运,而是把聊天上下文抽成标题、客户、关键词、标签、来源频道这些可治理的结构化元素。

五、结论

网站客服不是“聊天记录原样变工单”。真正发生的是:

  • session 字段被挑选性存档;
  • channel access 在 ticket create/write 阶段被再次校验;
  • 回开聊天窗口仍遵守 discuss 权限;
  • 关键词与命令接口把原始聊天裁成工单可用上下文。

这条链路的关键词不是复制,而是裁剪、关联、再授权

DISCUSSION

评论区

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