В сети есть разные варианты интеграции 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), нет — ничего не будем делать).
CallMeDEBUG — если 1, то в лог файл будут писаться все события, обрабатываемые приложением, 0 — ничего не пишем
тецх — SIP/PJSIP/IAX/etc
authToken — токен авторизации битрикс24, код авторизации исходящего вебхука
bitrixApiUrl — URL входящего вебхука, без profile/
extentions — список внешних номеров
контекст — контекст для оригинации звонка
listener_timeout — скорость обработки событий от asterisk
астериск — массив с настройками подключения к астериску:
домаћин — ip или hostname сервера астериск
шема — схема подключения (tcp://, tls://)
лука — порт
корисничко име — имя пользователя
тајна — пароль
connect_timeout — таймаут подключения
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 (показать карточку, скрыть карточку и т.д.).
Вопросы, пожелания — прошу в комменты. Также если интересно как шла разработка этой интеграции, напишите, а в очередной статье я постараюсь раскрыть все более детально.