Подключение 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 завершена.