Перейти к содержимому

Телефония в CRM: перенос voip и crm_voip с Odoo 8 на Odoo 10

Новый API, новая система JS-модулей и фикс автовоспроизведения звука звонка под политику автоплея Chrome
25 июня 2026 г. от
Телефония в CRM: перенос voip и crm_voip с Odoo 8 на Odoo 10

Порт модулей voip и crm_voip с Odoo 8 на Odoo 10: новый API, JS-модули odoo.define(), фикс автовоспроизведения звука в Chrome

У клиента на 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.

Перенос российской бухгалтерской локализации на Odoo 19
План счетов, НДС/УСН, отчёты и печатные формы — плюс полный перевод интерфейса на русский

Похожая задача в вашей компании?

Напишите намСмотреть услуги