AmoCRM интеграция телефонии Asterisk, теперь и в Беларуси!
AmoCRM одна из самых популярных CRM систем для малого бизнеса, и поэтому без интеграции с телефонией, обойтись нельзя никак. Пришлось потратить много времени, чтобы разобраться, в очень хитрой и извращенной интеграцией астериска. Если сравнивать подключение других CRM системам (1C CRM, VtigerCRM, SugarCRM, Bitrix24 и др.) эта одна из самых сложных;)
Наши инженеры готовы выполнить интеграцию, на высоком техническом уровне;)
Что необходимо от клиента:
- Модем/роутер с поддержкой Hairpin NAT, название функции "hairpin" (шпилька для волос) произошло от того, что, если изобразить прохождение такого пакета на рисунке, форма его траектории будет похожа на U-образную шпильку. Другое объяснение - слово "hairpin" переводится так же, как "разворот на 180 градусов". При поддержке маршрутизатором функции "hairpin" подпадающие под ее действие пакеты, действительно, будут развернуты на 180 градусов и отправлены обратно в локальную сеть;
- Статический IP, его выдает ваш провайдер интернета;
- Подписанный SSL сертификат доверенным ЦС, обычно это стоит денег, но есть и бесплатные (например startssl.com);
- Домен, точнее домен второго уровня подойдет лучше (например crm.voiplab.by), с настроенной DNS записью вашего статического IP;
- Действующая почта вашего домена, одного из вариантов :
postmaster@voiplab.by
hostmaster@voiplab.by
webmaster@voiplab.by - Хороший интернет.
Технические требования к платформе Asterisk:
- Поддержка технологии AJAM или AMI
- Работа вебсервера с поддержкой протокола https
- PHP с поддержкой json_encode (5.2+ или 5.1+PECL_json)
- PHP с расширением PDO с модулем соответствующего бэкэнда CDR
- Выделенный сервер/компьютер для Asterisk.
Настройку интеграции AmoCRM стоит разбить на несколько этапов:
Настройка AMI manager и Ajam
Создаем пользователя для управления asterisk, например amocrm. Технологию подключения будем использовать AJAM. Для этого редактируем /etc/asterisk/manager.conf. В параметрах permit мы должны указать сервер на котором находится скрипт, в данном случае это localhost.
nano /etc/asterisk/manager.conf
[general] enabled = yes port = 5038 bindaddr = 0.0.0.0 webenabled = yes httptimeout = 60 [amocrm] secret = указываем сложный пароль 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
Включаем, ajam интерфейс на стандартном порту 8088 используя http, Settings > advanced_settings:
Далее, в консоли asterisk мы должны выполнить команду: core restart now
Затем для проверки http статуса, так же в консоли asterisk выполним: http show status и если все сделано правильно должны увидеть примерно следующее:
asterisk*CLI> http show status HTTP Server Status: Prefix: /asterisk Server: Asterisk/13.2.0 Server Enabled and Bound to 0.0.0.0:8088 Enabled URI's: /asterisk/httpstatus => Asterisk HTTP General Status /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/ws => Asterisk HTTP WebSocket Enabled Redirects: None.
Проверяем работу интерфейсов:
http://asterisk_ip:8088/asterisk/httpstatus?action=login&username=<ami_user>&secret=<ami_password>
http://asterisk_ip:8088/asterisk/rawman?action=login&username=<ami_user>&secret=<ami_password>
Response: Success Message: Authentication accepted
Настраиваем редиректы и подключаем доверенный сертификат
Для изменения имя хоста сервера hostname в CentOS:
nano /etc/sysconfig/network
...
HOSTNAME=www.example.com
...
После выполняем команду:
#hostname www.example.com
Далее открываем фал /etc/hosts и редактируем или добавляем строку:
127.0.0.1 www.example.com localhost localhost.localdomain
И реcстартуем сеть:
/etc/init.d/network restart
Устанавливаем зависимости и прописываем пути к сертификатам:
yum install mod_ssl openssl
nano /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /path/to/configs/ssl.crt SSLCertificateKeyFile /path/to/configs/ssl.key SSLCertificateChainFile /path/to/configs/sub.class1.server.ca.pem SSLCACertificateFile /path/to/configs/ca.pem
Теперь нам нужно проверить работу скрипта amocrm.php который мы скопировали в веб директорию нашего сервера. Для этого нам нужно запустить скрипт с параметрами status, test_cdr и cdr. Предположим скрипт доступен по адресу http://asterisk_ip/amocrm.php
Минимальные настройки необходимы для работы скрипта:
- AC_HOST ip/hostname сервера AMI/AJAM (localhost)
- AC_PORT порт сервера AMI/AJAM (если AMI то пусто, если AJAM то 8088)
- AC_DB_UNAME логин для подключения к бд, обычно freepbxuser (если стоит сборка с FreePBX)
- AC_DB_UPASS пароль для подключения к бд (логин и пароль можно посмотреть в /etc/asterisk/cdr_mysql.conf)
- AC_RECORD_PATH путь к записям разговоров (не обязательный параметр)
https://host/amocrm.php?_login=<ami_user>&_secret=<ami_password>&_action=status
asterisk_cb({"status":"ok","action":"status","data":[]});
https://host/amocrm.php?_login=<ami_user>&_secret=<ami_password>&_action=test_cdr
asterisk_cb({"status":"ok","data":"connection ok"});
Настройка сidlookup
Для настройки cidlookup нам нужно во FreePBX в разделе Admin — CallerID Lookup Sources добавить источник откуда мы будем брать имя звонящего:
Хост: <account>.amocrm.ru
Порт: 443
Имя пользователя: ami пользователь
Пароль: пароль ami пользователя
Путь: /private/acceptors/asterisk_new/
Запрос: number=[NUMBER]&USER_LOGIN=<login>&USER_HASH=<hash>
<login> email для входа
<hash> API ключ amocrm
<account> ваш аккаунт в amocrm
На самом деле не так важно что мы указали выше, т.к. далее все данные мы перепишем в диалплане для корректной работы FreePBX с https запросами по средствам wget линукса.
cat /etc/asterisk/extensions_additional.conf | grep cidlookup
[cidlookup] exten => cidlookup_3,1,GotoIf($[${DB_EXISTS(cidname/${CALLERID(num)})} = 1]?cidlookup,cidlookup_return,1) exten => cidlookup_3,n,Set(CURLOPT(httptimeout)=7) exten => cidlookup_3,n,Set(CALLERID(name)=${CURL(https://crm:crm777@your.amocrm.ru:443/private/acceptors/asterisk_new?number=${CALLERID(num)}&USER_LOGIN=crm&USER_HASH=xxxxxxxxxxxxxxxxxxxxxxxxxxx)}) exten => cidlookup_3,n,Set(DB(cidname/${CALLERID(num)})=${CALLERID(name)}) exten => cidlookup_3,n,Return() exten => cidlookup_return,1,ExecIf($["${DB(cidname/${CALLERID(num)})}" != ""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})})) exten => cidlookup_return,n,Return() ;--== end of [cidlookup] ==--;
nano /etc/asterisk/extensions_override_freepbx.conf
[cidlookup] include => cidlookup_custom exten => cidlookup_3,1,Set(CALLERID(name)=${SHELL(wget -O - --quiet https://your.amocrm.ru/private/acceptors/asterisk_new/?number=${CALLERID(num)}\&USER_LOGIN=your@mail.ru\&USER_HASH=xxxxxxxxxxxxxxxxxxxxxxxxxxx)}) exten => cidlookup_3,n,Return() exten => cidlookup_return,1,ExecIf($["${DB(cidname/${CALLERID(num)})}" !=""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})})) exten => cidlookup_return,n,Return()
Прежде чем проверять callerid lookup (например забить в amocrm свой мобильный и звонить на ваш did) нужно проверить, отдает ли amocrm имя звонящего, для этого нужно выполнить запрос в браузере (предварительно быть залогиненным в системе amocrm):
https://вашаккаунт.amocrm.ru/private/acceptors/asterisk_new/?number=номерклиента&USER_LOGIN=емейлдлявходавамоцрм&USER_HASH=ключапи
В итоге получаем карточку клиента, при поступлении вызова:
Записи разговоров в AmoCRM
Для того что бы в amoCRM мы могли слушать и скачивать записи разговоров нам нужно сделать следующее:
- Сделать папку с записями разговоров доступными по https (напр. https://asterisk_ip/rec/) Мы рекомендуем сделать символьную ссылку на эту папку, а так же в целях безопасности открыть доступ только для доверенных IP адресов.
- Не забываем прописать в скрипте amocrm.php параметр AC_RECORD_PATH которому нужно присвоить значение https://records.sip.loc/records/%Y/%m/%d/# (#имя файла, %Y %d %m дата звонка покомпонентно).
- Теперь через некоторое время в кабинете amocrm при просмотре карточки клиента мы увидим время звонка, а так же возможность скачать и прослушать разгово
ln -s /var/spool/asterisk/monitor /var/www/html/rec
Умная маршрутизация
Умная переадресация позволяет перевести вызов на ответственного менеджера, для этого нам нужно создать специальный контекст, назовем его amocrmtransfer:
; 151 виртуальный добавочный
; DEFEXT добавочный по умолчанию.
; <login> логин в amocrm
; <hash> API ключ amocrm
; <account> ваш аккаунт в amocrm
[amocrmtransfer] exten => 151,1,Set(DEFEXT=101); exten => 151,n,Set(TOEXT=${CURL(https://.amocrm.ru/private/acceptors/asterisk_new/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=&USER_HASH=)}) exten => 151,n,GotoIf($[${TOEXT}]?from-internal,${TOEXT},1:from-internal,${DEFEXT},1)
Зарегистрируйте виртуальный Extension (меню Application>Extensions). (допустим 151)
- Добавьте Custom Destination (меню admin) amocrmtransfer,151,1
- Добавьте в файл /etc/asterisk/extensions_custom.conf модификацию диалплана amocrmtransfer.
- В настройке Not Reachable ext. 151 установите Custom Destination / amocrmtransfer
- Примените изменения
Теперь все звонки, переведённые на номер 151 будут переведены на ответственного менеджера или номер по умолчанию.
Коментарии: