
У клиента на Odoo 8 телефония в CRM была завязана на два штатных модуля — voip и crm_voip: звонок прямо из карточки контакта одним кликом, входящие звонки в очередь, WebRTC-звонки через Asterisk без отдельного софтфона на рабочем месте. При переходе на Odoo 10 эти модули нужно было портировать заново — версия для восьмёрки на новом ядре просто не устанавливается.
Совместимость API — ядро Odoo успело сильно измениться
Между 8 и 10 версией поменялся сам фундамент, на котором писались модули:
- декоратор
@api.oneв новых версиях не работает — методы модели переписаны на@api.modelи@api.multi; - старый механизм привязки действий через
ir.valuesзаменён наir.actions.serverсbinding_model_id— этим механизмом, в частности, был привязан пункт «позвонить» к карточке контакта; - JS-модули переехали на систему
odoo.define()— старый способ подключения черезopenerp.web.UserMenu.includeдля иконки в системном трее (там показывается статус звонка) в Odoo 10 просто не грузится, пришлось переписать на актуальныйSystrayMenu.
Что делают модули
voip — технический фундамент: подключает библиотеку SIP.js и держит WebRTC-соединение с Asterisk, ничего не показывает пользователю напрямую. crm_voip строится поверх него и добавляет то, с чем реально работает менеджер: клик по номеру в карточке контакта или сделки сразу инициирует звонок, входящие звонки попадают в очередь с уведомлением, звонки логируются в истории по контакту.
Отдельный практический фикс — звук звонка в Chrome
Современные браузеры блокируют автовоспроизведение звука, если оно не инициировано явным действием пользователя, — политика автоплея Chrome. Старый код SIP.js вызывал play() на аудио-элементе без обработки возвращаемого Promise, из-за чего звук входящего звонка в Chrome попросту не запускался. Добавили корректную обработку Promise с обработкой ошибки отказа автоплея. Заодно отключили STUN — в этом развёртывании телефония работает внутри локальной сети, и обход NAT через внешний STUN-сервер не нужен.
Итог
Оба модуля портированы на Odoo 10 и залиты в отдельный репозиторий: voip версии 10.0.1.1 и crm_voip версии 10.0.1.0. Функциональность для пользователя не изменилась — клик по контакту всё так же запускает звонок через Asterisk, — но под капотом код теперь работает на актуальном для этой версии Odoo API.