AmoCRM интеграция телефонии Asterisk, теперь и в Беларуси!

Опубликовано в CRM системы

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:

Ajam asterisk

Далее, в консоли 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>

Ajam asterisk

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

CallerID Lookup Sources 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)}&amp;USER_LOGIN=crm&amp;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)}\&amp;USER_LOGIN=your@mail.ru\&amp;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 Asterisk

Записи разговоров в 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

AmoCRM Asterisk записи разговоров

Умная маршрутизация

Умная переадресация позволяет перевести вызов на ответственного менеджера, для этого нам нужно создать специальный контекст, назовем его 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&amp;number=${CALLERID(num)}&amp;USER_LOGIN=&amp;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 будут переведены на ответственного менеджера или номер по умолчанию.

Коментарии: