Інтеграція Бітрікс24 з 3CX
3CX — комерційна IP-АТС із продуманим веб-інтерфейсом і власною екосистемою клієнтських застосунків. На відміну від Asterisk, 3CX надає структурований API для інтеграцій — це спрощує завдання, але водночас накладає обмеження на архітектурні рішення.
Два офіційних способи інтеграції
Вбудована CRM-інтеграція 3CX. У 3CX є розділ Settings → CRM Integration, де можна налаштувати передачу подій дзвінків у зовнішні CRM. Бітрікс24 не входить до списку попередньо встановлених CRM у 3CX за замовчуванням, але підтримується через Custom CRM — механізм шаблонів HTTP-запитів.
3CX Call Flow Designer (CFD) + Webhooks. CFD — візуальний дизайнер call-flow у 3CX, який дозволяє надсилати HTTP-запити при певних подіях дзвінка. Гнучкіший за CRM-інтеграцію і підходить для нестандартних сценаріїв.
Налаштування через Custom CRM Integration
У консолі 3CX Management Console → CRM Integration → Custom CRM:
URL дзвінка (Call Answered):
https://ваш_портал.bitrix24.ua/rest/КЛЮЧ/telephony.externalcall.register/
Параметри запиту передаються в тілі POST:
{
"USER_PHONE_INNER": "%Ext%",
"PHONE_NUMBER": "%CallerNumber%",
"CALL_START_DATE": "%CallStarted%",
"CRM_CREATE": "Y",
"TYPE": "%Direction%"
}
3CX підтримує змінні-плейсхолдери: %Ext% — внутрішній номер, %CallerNumber% — номер того, хто телефонує, %Direction% — напрямок (1=вхідний, 2=вихідний). Повний список змінних наведено в документації 3CX.
URL завершення дзвінка (Call Ended):
https://ваш_портал.bitrix24.ua/rest/КЛЮЧ/telephony.externalcall.finish/
Параметри:
{
"CALL_ID": "%call_id_saved%",
"DURATION": "%TalkDuration%",
"STATUS_CODE": "200"
}
Проблема: Custom CRM Integration у 3CX не надає механізму зберігання стану (неможливо зберегти CALL_ID з відповіді Бітрікс24 і передати його при завершенні). Це ключове обмеження — для повноцінної інтеграції зі збереженням CALL_ID потрібен проміжний сервер.
Проміжний сервер: вирішення проблеми CALL_ID
Архітектура з проміжним обробником:
3CX → webhook → PHP/Node.js обробник
↓
Bitrix24 REST API → отримуємо CALL_ID
↓
Зберігаємо CALL_ID в Redis/БД з ключем = UNIQUEID дзвінка
↓
3CX → webhook завершення → обробник
↓
Дістаємо CALL_ID з Redis
↓
telephony.externalcall.finish
↓
Прикріплюємо запис
Це додає компонент інфраструктури, але дає повний контроль над інтеграцією.
Запис дзвінків у 3CX
3CX зберігає записи в директорії сервера або в хмарному сховищі (залежить від версії та налаштувань). Доступ до файлів через 3CX Recording Storage API або безпосередньо до файлової системи.
Для передачі в Бітрікс24 — скрипт після завершення дзвінка звертається до 3CX API, отримує посилання на запис і завантажує його через telephony.externalCall.attachRecord.
3CX повертає посилання на запис через API дзвінків:
GET /api/recordings?callId={callId}
Авторизація через JWT-токен (3CX версії 18+): Authorization: Bearer <token>.
3CX SBC і проблема NAT
3CX часто розгортається з SBC (Session Border Controller) для NAT-traversal. При інтеграції з Бітрікс24 через SIP-транк необхідно переконатися, що зовнішній IP SBC вказаний у налаштуваннях SIP-транку Бітрікс24. Інакше — одностороннє аудіо під час дзвінків від Бітрікс24 до 3CX.
Кейс: розподілена команда, 3CX у хмарі
IT-компанія з офісами в двох містах використовувала 3CX Hosted (хмарна версія). Вимога: коли клієнт телефонує на московський номер і потрапляє до петербурзького менеджера, у Бітрікс24 дзвінок має створюватися у петербурзького менеджера з прив'язкою до московського вхідного номера.
3CX Custom CRM Integration не підтримує маппінг внутрішніх номерів на користувачів Бітрікс24. Вирішили через проміжний обробник із таблицею відповідностей: внутрішній номер 3CX → ID користувача Бітрікс24. При реєстрації дзвінка обробник звертається до таблиці і підставляє USER_ID потрібного користувача.
Термін налаштування: 5–7 робочих днів.







