У мережі є різні варіанти інтеграції IP-АТС Asterisk і CRM Бітрікс24, але ми все-таки вирішили написати свою.
За функціоналом все стандартно:
Натиснувши на посилання з номером телефону клієнта в Бітрікс24, Asterisk з'єднує внутрішній номер користувача, від імені якого цей клік здійснено, з номером телефону клієнта. У Бітрікс24 фіксується запис про дзвінок і після закінчення виклику підтягується запис розмови.
На Asterisk надходить дзвінок ззовні - в інтерфейсі Бітрікс24 показуємо картку клієнта тому співробітнику, на номер якого цей дзвінок прилетів.
Якщо такого клієнта немає, відкриємо картку створення нового ліда.
Як тільки дзвінок завершено, відображаємо це у картці та підтягуємо запис розмови.
Під катом розповім як все налаштувати у себе і дам лінк на github - так-так, забирайте та користуйтеся!
Загальний опис
Свою інтеграцію ми назвали CallMe. CallMe - це невеликий веб-додаток, написаний на PHP.
Розбір конфігу, питання безпеки, отримання сертифікату і навіть вибір web-сервера я залишу за рамками статті – про це написано багато. Програма не має обмежень, вона працює і по http і по https.
У нас є https, сертифікат let's encrypt.
Якщо ви все зробили правильно, то, перейшовши за посиланням, повинні побачити щось подібне
Налаштування Бітрікс24
Створимо два вебхуки.
Вхідний вебхук.
Під обліковим записом адміністратора (з id 1) йдемо шляхом: Програми -> Вебхукі -> Додати вебхук -> Вхідний вебхук
Заповнюємо параметри вхідного вебхука як на скрінах:
І тиснемо зберегти.
Після збереження Бітрікс24 надасть URL вхідного вебхука, наприклад:
Збережіть собі ваш варіант URL без завершального /profile/ - він буде використовуватися в програмі для роботи з вхідними дзвінками.
У мене це https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
Вихідний вебхук.
Програми -> Вебхукі -> Додати вебхук -> Вихідний вебхук
Подробиці знову на скрінах:
Зберігаємо та отримуємо код авторизації
У мене це xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. Його теж потрібно скопіювати собі, він потрібний для здійснення вихідних дзвінків.
Важливо!
На сервері Бітрікс24 має бути налаштований ssl-сертифікат (можна використовувати letsencrypt), інакше api бітриксу не працюватиме. Якщо у вас хмарна версія, можете не хвилюватись – там вже є ssl.
Важливо!
У полі «Адреса обробника» має бути вказана доступна з мережі Інтернет адреса!
І останнім штрихом встановимо наш CallMeOut як додаток для здійснення дзвінків (щоб по кліку на номер на АТС відлітала команда для оригінації дзвінка).
У меню вибираємо: Ще -> Телефонія -> Ще -> Налаштування, ставимо в "Номер для вихідного дзвінка за замовчуванням" Додаток: CallMeOut і тиснемо "Зберегти"
Налаштування asterisk
Для успішної взаємодії Asterisk та Bitrix24 нам потрібно додати AMI-користувача callme у manager.conf:
відключаємо запис до таблиці CDR для цього екстеншена (не потрібно воно там), виставляємо час завершення дзвінка, обчислюємо тривалість, якщо результат дзвінка не відомий - ставимо (змінна CallMeDISPOSITION) і, останнім кроком, шолом всі бітриксу через системний curl.
І ще трохи магії - вхідний дзвінок:
888999 => {
&recording(${CALLERID(number)},${EXTEN});
Answer();
ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp()); // выставляем CallerID если узнали его у Битрикс24
Set(CallStart=${STRFTIME(epoch,,%s)}); // начинаем отсчет времени звонка
Queue(Q1,tT);
Set(CallMeDISPOSITION=${CDR(disposition)});
Hangup();
}
Вона каже АТС встановити CallerID(name) рівним змінною CallMeCallerIDName.
Сама змінна CallMeCallerIDName, у свою чергу, встановлюється додатком CallMe (якщо в Bitrix24 є ПІБ для номера, що зателефонував — встановимо як CallerID(name)ні – нічого не будемо робити).
Налаштування програми
Файл налаштувань програми - /var/www/pbx.vistep.ru/config.php
Опис параметрів програми:
CallMeDEBUG - Якщо 1, то в лог файл будуть писатися всі події, що обробляються додатком, 0 - нічого не пишемо
технології - SIP/PJSIP/IAX/etc
authToken - токен авторизації бітрікс24, код авторизації вихідного вебхука
bitrixApiUrl — URL вхідного вебхука, без profile/
extentions - Список зовнішніх номерів
контекст контекст для оригінації дзвінка
listener_timeout - швидкість обробки подій від asterisk
зірочка - масив з налаштуваннями підключення до астериску:
господар - IP або hostname сервера астериск
схема - Схема підключення (tcp://, tls://)
порт - порт
ім'я користувача - Ім'я користувача
secret - пароль
час очікування підключення - Таймають підключення
read_timeout - Таймають читання
приклад файлу налаштувань:
<?php
return array(
'CallMeDEBUG' => 1, // дебаг сообщения в логе: 1 - пишем, 0 - не пишем
'tech' => 'SIP',
'authToken' => 'xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6', //токен авторизации битрикса
'bitrixApiUrl' => 'https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/', //url к api битрикса (входящий вебхук)
'extentions' => array('888999'), // список внешних номеров, через запятую
'context' => 'dial_out', //исходящий контекст для оригинации звонка
'asterisk' => array( // настройки для подключения к астериску
'host' => '10.100.111.249',
'scheme' => 'tcp://',
'port' => 5038,
'username' => 'callme',
'secret' => 'JD3clEB8_f23r-3ry84gJ',
'connect_timeout' => 10000,
'read_timeout' => 10000
),
'listener_timeout' => 300, //скорость обработки событий от asterisk
);
Налаштування supervisor
Supervisor служить для запуску процесу-обробника подій від Asterisk CallMeIn.php, який відстежує вхідні дзвінки та взаємодіє з Бітрікс24 (показати картку, приховати картку тощо).
Запитання, побажання — прошу у коментарі. Також якщо цікаво, як йшла розробка цієї інтеграції, напишіть, а в черговій статті я постараюся розкрити дедалі детальніше.