企业 电话工单

Odoo 企业版电话 + Helpdesk 为什么不是“来电弹出工单”而已:partner 上下文、open ticket 计数与建单入口边界讲透

基于 voip_helpdesk 源码与测试,讲清来电窗口为何直接复用 partner 的 ticket 计数、何时跳到已有工单、何时打开新建单表单,以及 related_sudo=False 为什么很关键。

企业 协同办公
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

很多人把电话集成 Helpdesk 理解成“响铃时弹一张工单”。但 /home/ubuntu/odoo-temp/enterprise/voip_helpdesk 真正做的是一层很轻、却很关键的上下文桥接:电话对象不自己维护客服事实,而是复用 partner 的 Helpdesk 语义。

参考入口:

  • enterprise/voip_helpdesk/models/voip_call.py
  • enterprise/voip_helpdesk/models/res_partner.py
  • enterprise/voip_helpdesk/tests/test_voip_call.py

一、来电上的工单计数,本质上是 partner 视角的投影

voip.call 上的 ticket_countopen_ticket_count 都是 related 字段,直接指向 partner_id.ticket_countpartner_id.open_ticket_count,并且设置了 related_sudo=False

这意味着来电弹窗不是自己重算工单,而是借用联系人已有的客服上下文;同时它不会偷偷 sudo 越权,把用户看不到的工单数字硬显示出来。

二、为什么 open_ticket_count 单独算

res.partner 上新增了 ticket_ids_compute_open_ticket_count(),逻辑很简单:fold=False 的 stage 才算 open。简单归简单,但业务含义明确:客服接电话时最重要的不是客户一生建过几张单,而是当前还有几张没关。

三、入口不是永远新建单,而是先看有没有上下文可复用

voip_action_open_helpdesk_ticket() 只有在 ticket_count == 0 时才打开 Helpdesk 新建表单;否则直接走 partner_id.action_open_helpdesk_ticket()

这体现了企业现场一个很务实的优先级:先承接已有问题,再决定要不要开新 case。否则同一位客户重复来电,很容易被拆出多张孤立工单。

四、新建单默认值里为什么带 partner_phonepartner_id

在没有既有工单时,动作会传入:

  • default_partner_phone = self.phone_number
  • default_partner_id = self.partner_id.id

这看似只是省手工录入,实际上是在把电话事实可靠地落到 Helpdesk 入口。很多团队只传联系人,不传本次号码,后面就很难判断这次来电是主号码、分机还是临时回拨号码。

五、测试说明了什么

test_voip_call_ticket_count_usertest_voip_call_ticket_count_manager 都验证:call 上看到的计数应与 partner 一致。也就是说,官方刻意避免“电话对象一套数、联系人对象另一套数”的双重真相。

六、实战注意事项

  • 如果来电页计数不对,先查 partner 工单权限,再查 related_sudo 行为,不要先怀疑电话模块。
  • 想减少重复建单时,重点优化 partner_id 识别准确率,因为入口分流完全依赖它。
  • 不要把“来电即新 case”当默认流程,已有 open ticket 才是更优先的客服上下文。

七、结论

voip_helpdesk 的价值不在于多一个按钮,而在于让电话场景自动站到正确的客服上下文里:看同一个联系人、继承同一套工单计数、优先打开已有问题、必要时再创建新单。

DISCUSSION

评论区

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