Перейти к содержимому
N1
Интеграции · телефония · Grandstream AMI · WebRTC

Своя АТС Grandstream в коробочном Bitrix24 без платного SIP-коннектора

Клиент: Страховая компания, NDA Категория: Интеграции Стек: PHP 8.4, Bitrix24 D7 (телефония ядра), Asterisk AMI, Grandstream UCM API, JsSIP (WebRTC), Vue, nginx, Docker Срок: около недели
Проблема

Компания работает на собственной АТС Grandstream, а коробочный Bitrix24 о звонках ничего не знал: при входящем нет карточки клиента, разговоры не попадают в CRM, набирать клиента приходится с трубки вручную. Штатный путь — платный SIP-коннектор с облачной телефонией.

Ограничения

Живой АТС на время разработки не было — ни сети до неё, ни учёток. Звонки нужно было писать штатной телефонией ядра, чтобы работали обычные карточки, отчёты и детализация, а обрыв связи с АТС не должен терять события.

Что сделал
  • Слушатель AMI держит постоянное соединение с АТС, складывает события в очередь и собирает звонок по Linkedid: входящие, исходящие, перехват, перевод
  • Звонки пишутся штатной телефонией ядра: карточка звонка у сотрудника, дело «Звонок», детализация звонков, лид на неизвестный номер
  • «Позвонить» из CRM звонит из браузерного софтфона, а если он закрыт — через AMI сначала на настольный телефон сотрудника, затем клиенту
  • Софтфон WebRTC на JsSIP через nginx портала: входящие, удержание, тоновый набор, перевод; SIP-пароли хранятся в базе зашифрованными
  • Записи разговоров забираются с АТС потоком; пропущенное за время обрыва досылается из журнала звонков АТС с повторами
  • Админка состояния слушателя и очередей, имитатор АТС на Asterisk 20 в Docker и тесты на записанных AMI-цепочках
Архитектура
Grandstream UCM (AMI + HTTPS API) → Слушатель AMI → очередь событий → Сборка звонка по Linkedid → Телефония ядра → CRM → Софтфон WebRTC через nginx
Результат

Модуль (около 5,1 тыс. строк) проверен сквозь на имитаторе АТС — входящие, исходящие, пропущенные, записи, досылка, кнопка «Позвонить» — и прошёл несколько проходов ревью. Подключение к живой АТС — в сентябре 2026.

Что можно переиспользовать
Слушатель AMI с очередью событий и сборкой звонка по Linkedid Подключение внешней АТС к штатной телефонии коробочного Bitrix24 без SIP-коннектора Имитатор АТС на Asterisk в Docker для сквозных тестов телефонии