企业 Google 预约

Odoo 企业版 Google Calendar 预约同步为什么不是“连上账号就不会撞会”:calendar setup、videocall source 与 post-sync 回写讲透

基于 appointment_google_calendar 源码,讲清 Google 连接器、Meet 链接生成、同步前后字段处理,以及用户未同步时的提示边界。

企业 其他
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

Google Calendar 集成最容易被误解成“连上账号,会议就会自动同步”。但 enterprise/appointment_google_calendar/models/appointment_type.pycalendar_event.py 说明,真正难的不是连通,而是:系统有没有能力配置 Google、哪些用户其实还没同步、Meet 链接什么时候能拿到、同步后应该把什么值写回 Odoo。

一、有没有 Google 连接器,不是看用户感受,而是看系统状态

_get_calendars_possible_to_setup() 会检查 google.service 是否存在 calendar client id,并确认 google_calendar_sync_paused 没被暂停;_compute_connector_google() 再据此判断 connector_google。这说明“Google 能不能接”首先是系统配置问题,不是某个销售说“我已经登过谷歌账号了”。

二、用户没同步时,系统会明确提示 Meet 不会加进去

_compute_users_wo_google_calendar_msg() 会针对 event_videocall_source == 'google_meet' 的预约类型,检查 staff users 里哪些人还没同步 Google Calendar,并生成醒目的提示文本。如果整个 connector 都没准备好,还会直接告诉你 Google Sync 配置有问题。

这一步很重要,因为企业里最常见的误会就是:预约类型已经设置成 Google Meet,但只有部分员工真正同步了账号,结果客户有的预约有 Meet,有的没有。

三、Meet 链接并不是建 event 时立刻拿到

calendar_event.py_compute_videocall_redirection() 注释已经说明:真正的 Google Meet URL 往往要等 Google 事件创建并同步后才可用。所以 Odoo 会先生成一个本地 videocall_redirection,让 chatter 里先有一个可显示入口。

换句话说,系统知道“同步后才能拿到最终 URL”,于是先给出一个临时重定向入口,而不是让用户在过渡阶段看到空白。

四、同步前后对 conferenceData 的处理是反着做的

_google_values() 的逻辑很精细:如果 appointment type 不是 google_meet,就主动移除 conferenceData,避免 Google 自动生成 Hangout;如果明确是 Google Meet 且当前还没有 videocall_location,则强制创建 conferenceData 请求。这不是技术细节,而是业务语义控制:谁该有 Meet、谁不该有,必须由 appointment type 决定。

同步完成后,_get_post_sync_values() 又会从 GoogleEvent 里取 hangoutLink,把真实 videocall_location 回写回来。于是前、中、后三个阶段才闭环。

实战注意事项

  1. 先确认 connector 能 setup,再谈预约体验
  2. 把“用户已同步”当上线检查项:不是员工都连上,Meet 体验就不会一致。
  3. 区分 redirection 与真实 Meet URL:前者是过渡入口,后者要等同步成功。
  4. 让 appointment type 决定会议源:不要指望 Google 默认行为替你做业务判断。

新手误区

  • 误以为只要个人 Google 账号可用,企业预约就算配置完成。
  • 误以为 Meet URL 会在建事件瞬间出现。
  • 误以为 Google 默认生成会议链接是好事。
  • 误以为同步后的值不需要再写回 Odoo。

主要源码参考

  • enterprise/appointment_google_calendar/models/appointment_type.py
  • enterprise/appointment_google_calendar/models/calendar_event.py

DISCUSSION

评论区

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