Подключение IP-АТС Asterisk к одной из наиболее популярных систем класса CRM - amoCRM - является весьма востребованной задачей. Чтобы избежать ошибок и неправильных действий, рекомендуем ознакомиться с данной инструкцией, пошагово описывающей процесс интеграции. Здесь учтены важные нюансы, включая получение сертификата SSL, настройку веб-сервера и многое другое.
Вводные
Наш стенд для интеграции выглядит следующим образом:
- ОС Debian Jessie (8.7)
- Asterisk 13.14
- Nginx 1.10.3
- PHP 5.6
Получение SSL-сертификата
Мы воспользуемся сертификатом от Let's Encrypt, который предоставляется бесплатно. Получить его элементарно, но для лучшего понимания следует описать процедуру подробно.
- Откроем в браузере страницу letsencrypt.org и нажмем Get Started.
- Зайдем в раздел With Shell Access, содержащий руководство к действию.
- Переходим на страницу certbot.eff.org, чтобы выбрать используемое нами программное обеспечение.
- Действуем согласно предложенной инструкции, применяем в консоли заданные команды.
- Отправляем запрос, чтобы получить сертификат, пользуясь утилитой Certbot.
-
Зададим команду:
certbot certonly
. После этого запустится мастер, который запросит необходимые данные в интерактивном режиме. - Копируем сертификаты на сервер NGNIX.
Помните про один важный момент: срок действия сертификатов составляет 3 месяца, после чего необходимо будет перевыпустить их.
Настраиваем веб-сервер
В папке /var/www/asterisk/
необходимо выполнить создание симлинка на папку, в которую будут помещаться файлы с записанными разговорами.
cd /var/www/asterisk/ ln -s /var/calls/ records
О том, как настроить запись переговоров, будет рассказано чуть позднее.
Стоит дополнительно сказать пару слов про сертификаты. У нас уже есть два, которые располагаются в положенном им месте: lankraft.ru.key
и lankraft.ru.pem
. Но нам еще необходим dhparam.pem
. Его требуется создать.
openssl dhparam -out /etc/nginx/certs/dhparam.pem 4096
После завершения этой процедуры работы по настройке NGINX можно считать завершенными. Самое время переходить к Asterisk.
Настраиваем IP-PBX Asterisk
Для обеспечения коммуникации amoCRM с Asterisk, необходимо файлы /etc/asterisk/manager.conf
, а также /etc/asterisk/http.conf
привести к определенному виду согласно приведенным ниже примерам.
/etc/asterisk/manager.conf
[general] enabled = yes port = 5038 bindaddr = 0.0.0.0 webenabled = yes httptimeout = 60 debug = on [amocrm] secret = Qwerty!23456 deny = 0.0.0.0/0.0.0.0 permit = 127.0.0.1/255.255.255.0 read = cdr,reporting,originate write = reporting,originate
http.conf
[general] enabled=yes enablestatic=yes bindaddr=0.0.0.0 bindport=8088 prefix=asterisk
Далее перезапустим Asterisk и проверим состояние интересующих нас сервисов:
asterisk*CLI> http show status
HTTP Server Status: Prefix: /asterisk Server: Asterisk/13.14.0 Server Enabled and Bound to 0.0.0.0:8088 Enabled URI's: /asterisk/httpstatus => Asterisk HTTP General Status /asterisk/phoneprov/... => Asterisk HTTP Phone Provisioning Tool /asterisk/amanager => HTML Manager Event Interface w/Digest authentication /asterisk/arawman => Raw HTTP Manager Event Interface w/Digest authentication /asterisk/manager => HTML Manager Event Interface /asterisk/rawman => Raw HTTP Manager Event Interface /asterisk/static/... => Asterisk HTTP Static Delivery /asterisk/amxml => XML Manager Event Interface w/Digest authentication /asterisk/mxml => XML Manager Event Interface /asterisk/ari/... => Asterisk RESTful API /asterisk/ws => Asterisk HTTP WebSocket Enabled Redirects: None.
asterisk*CLI> manager show settings
Global Settings: ---------------- Manager (AMI): Yes Web Manager (AMI/HTTP): Yes TCP Bindaddress: 0.0.0.0:5038 HTTP Timeout (minutes): 60 TLS Enable: No TLS Bindaddress: Disabled TLS Certfile: asterisk.pem TLS Privatekey: TLS Cipher: Allow multiple login: Yes Display connects: Yes Timestamp events: No Channel vars: Debug: Yes
Далее создадим Dialplan (в данном примере используется AEL, но аналогичным образом его можно реализовать и на Lua):
extensions.ael
globals { WAV=/var/calls; //Временный каталог с WAV MP3=/var/calls; //Путь к файлам mp3 RECORDING=1; // Активация записи. }; macro recording (calling,called) { if ("${RECORDING}" = "1"){ Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called}); Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)}); System(mkdir -p ${WAV}/${datedir}); Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${datedir}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && chmod o+r "${MP3}/${datedir}/${fname}.*"); Set(CDR(filename)=${fname}.mp3); Set(CDR(recordingfile)=${fname}.wav); Set(CDR(realdst)=${called}); MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); }; }; context dial_out { // исходящие вызовы _[71]XX => { &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/${EXTEN},,tTr); Hangup(); } // кому позвонить - решит amoCRM 9898 => { Set(DEFMAN=123); // по умолчанию звоним на 123 Set(TOEXT=${SHELL(wget -O - --quiet "https://lankraftru.amocrm.ru/private/acceptors/asterisk_new/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=ceo@lankraft.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c")}); // получаем номер ответственного менеджера Dial(SIP/${TOEXT},,tTr); // звоним ответственному менеджеру, // если он не отвечает или ошибка, звоним на номер по умолчанию if ("${DIALSTSTUS}" != "ANSWERED") { Dial(SIP/${DEFMAN},,tTr); } HangUP(); } _XXXXXX => { NoOP(=== CALL FROM ${CALLERID(number)} TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/83843${EXTEN}@multifon,180,tT); HangUP(); } _[78]XXXXXXXXXX => { NoOP(=== CALL TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/${EXTEN}@multifon,180,tT); HangUP(); } _+7XXXXXXXXXX => { NoOP(=== CALL TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/${EXTEN}@multifon,180,tT); HangUP(); } //все остальные звонки, не прописанные выше, отклоняются _X. => { Hangup(); } } context default { // в контексте по умолчанию отклоняются все звонки _X. => { Hangup(); } }; context incoming { _[87]XXXXXXXXXX => { &recording(${CALLERID(number)},${EXTEN}); Answer(); Set(CHANNEL(musicclass)=lankraft.ru); Set(CUSTOMER_NAME=${SHELL(wget -O - --quiet "https://lankraftru.amocrm.ru/private/acceptors/asterisk_new/?number=${CALLERID(num)}&USER_LOGIN=ceo@lankraft.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c"|cut -d "|" -f1)}); Set(CALLERID(name)=${CUSTOMER_NAME}); Queue(queue_1,tT); NoOp(=== ${HANGUPCAUSE} ===); HangUP(); } }
Необходимо обратить внимание еще на один момент. В контексте обработки входящих звонков (Incoming), в одном внутреннем номере будет важная строчка.
Set(CUSTOMER_NAME=${SHELL(wget -O - --quiet "https://lankraftru.amocrm.ru/private/acceptors/asterisk_new/?number=${CALLERID(num)}&USER_LOGIN=ceo@lankraft.ru&USER_HASH=1dc1444b0w6172c1117ffea9078c575c"|cut -d "|" -f1)});
С помощью этой команды мы получаем возможность выводить на телефонные аппараты работников компании фамилии и имена абонентов, загружая соответствующую информацию из amoCRM.
Стоит разобрать линк подробнее.
-
lankraft.amocrm.ru/private/acceptors/asterisk_new?
– название поддомена (lankraft.ru) в amocrm. -
USER_LOGIN=ceo@lankraft.ru
– учетная запись amoCRM. -
USER_HASH=1dc1444b0w6172c1119597ffea9078c575c
– API Key amoCRM (Настройки >> API).
Переходим к системному внутреннему номеру 9898. Посмотрим, как он выглядит.
// кому позвонить - решит amoCRM. 9898 => { Set(DEFMAN=123); // по умолчанию звоним на 123 Set(TOEXT=${SHELL(wget -O - --quiet "https://lankraftru.amocrm.ru/private/acceptors/asterisk_new/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=ceo@lankraft.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c")}); // получаем номер ответственного менеджера Dial(SIP/${TOEXT},,tTr); // звоним ответственному менеджеру, а если он не отвечает или возникает ошибка, звоним на номер по умолчанию (123) if ("${DIALSTSTUS}" != "ANSWERED") { Dial(SIP/${DEFMAN},,tTr); } HangUP(); }
Также рекомендуем добавить в таблицу CDR дополнительное поле. Благодаря этому можно будет прослушивать переговоры в клиентской карточке с помощью amoCRM.
ALTER TABLE `cdr` ADD `recordingfile` VARCHAR (120) NOT NULL
Можно еще добавить пару команд.
Настраиваем amoCRM
Начнем с подключения Asterisk в интерфейсе amoCRM.
Заходим в «Настройки
», где найдем пункт «Интеграции
», содержащий Asterisk. Выполним его установку.
Пролистываем вниз текст, пока не доберемся до полей, в которые требуется ввести информацию.
Для поля Login используем amocrm
(из manager.conf)
Для пароля берем Qwerty!23456
(из manager.conf).
Указываем расположение скрипта: https://asterisk.lankraft.ru/amocrm.php
Дополнительно укажем номера работников фирмы для внутреннего пользования.
Теперь следует разобраться с настройкой amocrm.php
.
Для его загрузки следует воспользоваться ссылкой, указанной выше. После скачивания меняем его под наш контекст, чтобы можно было совершать вызовы в два клика напрямую из amoCRM.
Тестирование полученной связки
После настройки параметров у нас будут такие фичи:
- показ входящего вызова в amoCRM (при наличии контакта в базе выводятся имя и фамилия звонящего, так что можно открыть для проверки соответствующую карточку или создать ее одним щелчком, если таковая отсутствует);
- демонстрация ФИО клиента из amoCRM на телефонном аппарате сотрудника фирмы во время входящего вызова;
- возможность сделать звонок прямо из amoCRM в два клика;
- переадресация звонков сотруднику, отвечающему за работу с клиентом, который находится на линии.
На этом интеграция IP-АТС Asterisk с amoCRM завершена.