8(499)-709-97-83
Работаем с 10:00 до 19:00

Интеграция телефонии на базе Asterisk и CRM-системы AmoCRM

  • 13 июля 2016

Сегодня, ни одна компания не обходится без сайта и CRM (системы управления взаимоотношениями с клиентами), причем последних, на данный момент, уже довольно много: 1C CRM, VtigerCRM, SugarCRM, Bitrix24, AmoCRM. Интеграция CRM систем с телефонией позволяет ускорить обработку входящих вызовов, грамотно обслуживать ваших клиентов, и следить за качеством переговоров.

  • Предварительное информирование менеджера о том, кто ему звонит (карточка клиента появляется на экране компьютера сразу после звонка, еще до того, как сотрудник взял трубку)
  • Набор номера прямо из CRM системы (если кликнуть по нужному номеру в CRM, система произведет автоматический вызов по данному контакту)
  • Прослушивание звонков прямо из CRM системы

В сегодняшней статье мы расскажем, как интегрировать одну из самых популярных CRM систем для малого бизнеса и среднего бизнеса AmoCRM с Asterisk (FreePBX 12).


Технические требования к платформе Asterisk:

  • Asterisk c поддержкой технологии AJAM или AMI
  • Вебсервер с поддержкой протокола https
  • PHP с поддержкой json_encode (5.2+ или 5.1+PECL_json)
  • PHP с расширением PDO с модулем соответствующего бэкэнда CDR


Разобьем работы по интеграции AmoCRM с Asterisk (FreePBX 12) на несколько этапов, описывая в каждом из этапов настройки для FreePBX и для голого Asterisk:


Настройка AMI MANAGER И AJAM

Использовать мы будем технологию AJAM. Для начала, нам нужно создать пользователя для управления Asterisk, например, amocrm.


Asterisk

Если у вас голый Asterisk, то достаточно внести соответствующую запись в /etc/asterisk/manager.conf. В примере ниже, добавлен пользователь amocrm с паролем dnhYZ8wzGI. В параметрах permit, мы должны указать сервер, на котором находится скрипт - в данном случае это localhost. Так же, необходимо указать минимальные права доступа read и write. Важно, также, в секцию general добавить опции, указанные в примере.

nano /etc/asterisk/manager.conf

[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
webenabled = yes
httptimeout = 60

[amocrm]
secret = dnhYZ8wzGI
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


FreePBX

Если у вас FreePBX, то в /etc/asterisk/manager.conf в секцию general добавляем следующее:

webenabled = yes
httptimeout = 60

У вас должно получиться:

[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
webenabled = yes
httptimeout = 60


Теперь переходим в Settings – Asterisk Manager Users и добавляем пользователя amocrm.


Нажимаем Submit Changes, потом Apply Config



Теперь, нам нужно включить ajam интерфейс на стандартном порту 8088, используя http.

Asterisk

Если, у вас голый Asterisk, то создаем или редактируем файл /etc/asterisk/http.conf и вносим следующее:

[general]
enabled=yes
enablestatic=yes
bindaddr=0.0.0.0
bindport=8088
prefix=asterisk


FreePBX

Если, у вас FreePBX, то переходим в Settings - Advanced Settings и в секции Asterisk Builtin mini-HTTP server вносим следующие изменения:


Нажимаем на появившиеся зеленые кружки, после чего, нажимаем Apply Config.


Перейдем в консоли Asterisk и выполним команду: core restart now.


Затем, для проверки http статуса, в консоли asterisk выполним: http show status и, если все сделано правильно, вы должны увидеть примерно следующее:

localhost*CLI> http show status
HTTP Server Status:
Prefix: /asterisk
Server: Asterisk/13.5.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/ari/... => Asterisk RESTful API
/asterisk/ws => Asterisk HTTP WebSocket

Enabled Redirects:
None.


Теперь, можно проверить работу интерфейсов, перейдя в браузере по следующему адресу:

http://ip_сервера:8088/asterisk/httpstatus?action=login&username=amocrm&secret=dnhYZ8wzGI


Указать в секциях:

ami_user – созданного вами пользователя (в нашем случае - amocrm)

ami_password – пароль созданного нами пользователя (в нашем случае - dnhYZ8wzGI)


Должны увидеть следующее:




http://asterisk_ip:8088/asterisk/rawman?action= login&username=amocrm&secret=dnhYZ8wzGI


Следовательно, со стороны Asterisk все настроено правильно и ajam интерфейс работает корректно.


Настройка AmoCRM

В личном кабинете amoCRM, переходим в Настройки Интеграция, находим AsteriskNew и нажимаем установить.



В разделе Подключение скачиваем необходимый архив со скриптом для интеграции, распаковываем его и кладем в папку /var/www/html/.

Можно сделать немного проще:

cd /var/www/html/
wget https://developers.amocrm.ru/download/asterisk.zip
unzip asterisk.zip
mv Asterisk/amocrm.php ./




Настраиваем авторизационные данные:

Логин: указываем тот, который создали в manager.conf (amocrm)

Пароль: указываем тот, который создали в manager.conf (dnhYZ8wzGI)

Добавочные номера: указываем внутренние номера ваших менеджеров

Путь к скрипту: указываем путь к скрипту (сохраняем из скачанного архива amocrm.php на вашем сервере телефонии в веб директории).

Включаем виджет и нажимаем Сохранить.


Так же нам нужно запомнить API-ключ для дальнейшего использования amocrm. Для этого переходим в Настройки API и копируем Ваш API ключ, он нам пригодится.




Настройка amocrm.php

Нам нужно настроить параметры подключения в скрипте amocrm.php

nano /var/www/html/amocrm.php


Вносим следующие изменения:

ini_set('display_errors',0);
define('AC_HOST','localhost');
define('AC_PORT',8088);
define('AC_PREFIX','/asterisk/');
define('AC_TLS',false);
define('AC_DB_CS','mysql:host=localhost;port=3306;dbname=asteriskcdrdb');
define('AC_DB_UNAME',' freepbxuser');
define('AC_DB_UPASS','password');
define('AC_TIMEOUT',0.75);
define('AC_RECORD_PATH','https://pbx.v.qsoft.ru/monitor/%Y/%m/%d/#');


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 путь к записям разговоров (пока оставляем пустым, позже вернемся к этой настройке)


Если у вас стоит Asterisk 13 версии, то в amocrm.php нужно будет внести изменение для корректной обработки channelstatedesc, иначе не будет работать карточка клиента. 

Проверить версию Asterisk вы можете набрав в консоли asterisk -V


Теперь нам нужно проверить работу скрипта amocrm.php. Ддля этого запустим скрипт с параметрами status, test_cdr и cdr.

login и pwd логин и пароль пользователя ajam, в нашем случае это amocrm и dnhYZ8wzGI

https:// asterisk_ip /amocrm.php?_login=amocrm&_secret=dnhYZ8wzGI&_action=status

https:// asterisk_ip /amocrm.php?_login=amocrm&_secret=dnhYZ8wzGI&_action=test_cdr


При проверке status вы должны увидеть следующее:

asterisk_cb({"status":"ok","action":"status","data":[]});


При проверке test_cdr вы должны увидеть следующее:

asterisk_cb({"status":"ok","data":"connection ok"});


Если у вас:

asterisk_cb({"status":"error","data":"SQLSTATE[28000] [1045] Access denied for user 'freepbx'@'localhost' (using password: YES)"});

тo еще раз проверьте корректность

define('AC_DB_UNAME','freepbx');
define('AC_DB_UPASS','fpbx');

в amocrm.php


При запросе cdr вы должны увидеть информацию о звонках(если они у вас были)

https:// asterisk_ip //amocrm.php?_login=amocrm&_secret=dnhYZ8wzGI&_action=cdr

{"status":"ok","data":[{"calldate":"2016-07-10 10:10:17","src":"+74957874467","dst":"100","duration":"7","billsec":"5","uniqueid":"1468149017.0","recordingfile":""}]}


Если все скрипты отработались нормально, то можно продолжать настройку.


Настройка СIDLOOKUP

Если у вас отсутствует модуль СIDLOOKUP, то переходим в Admin – Module Admin и устанавливаем модуль CallerID Lookup.




Для настройки СIDLOOKUP в 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 (личный кабинет amocrm - Настройки – API ) <account> ваш аккаунт в amocrm

Нажимаем Submit Changes и Apply Config


Теперь нам нужно, чтобы входящие вызовы проходили через наш cidlookup, для этого переходим в ваши входящие правила (Connectivity - Incoming Route) и в Source выбираем amocrm.

Нажимаем Submit Changes и Apply Config


Если у вас голый Asterisk, то в extensions.conf в правила входящей связи в начале диалплана добавим

exten => 414232,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=xxxxxxxxxxxxxxxxxx)})
exten => 414232,n,Return()
exten => 414232,1,ExecIf($["${DB(cidname/${CALLERID(num)})}" !=""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})}))
exten => 414232,n,Return()


Прежде чем проверять callerid lookup нужно проверить, отдает ли amocrm имя звонящего (предварительно залогиненного в системе amocrm). Для этого в amocrm создадим контакт со своим мобильным телефоном, и выполним запрос в браузере, например:

https://вашаккаунт.amocrm.ru/private/acceptors/asterisk_new/?number=номер&USER_LOGIN=ваша_почта_для _авторизации_в _amocrm&USER_HASH=API_ключ

Если все правильно, должны увидеть имя клиента


Теперь можно проверить получение карточки клиента из самого amocrm. Переходим во вкладку Контакты и при поступлении вызова от клиента, который занесен в контакты, видим следующее:



Если звонит не известный клиент, то видим:




Советуем номера ваших клиентов заносить в том формате, в котором вам передает оператор, иначе может получиться, что вы занесли номер контакта как +7_номер, а оператор передал А-номер вида 8_номер. В таком случае amocrm будет считать, что такого клиента нет, и предложит создать контакт.

Если у вас голый Asterisk, то вы можете в самом диалплане привести номер к некому стандарту, если у вас FreePBX и оператор отдает вам разные номера в разном формате, то стоит написать им письмо и попросить преобразовывать А-номера в нужный вам формат.


Запись разговора в amocrm

Для того что бы в amoCRM вы могли слушать и скачивать записи разговоров, нам нужно сделать следующее:

Во FreePBX в настройках входящих правил(Connectivity - Incoming Route) устанавливаем Call Recording – Yes.

Сделать папку с записями разговоров доступными по https (напр. https://asterisk_ip/rec/). Мы рекомендуем сделать символьную ссылку на эту папку, а также, в целях безопасности, открыть доступ только для доверенных IP адресов.

mkdir /var/www/html/rec/
ln -s /var/spool/asterisk/monitor /var/www/html/rec


В скрипте amocrm.php параметру AC_RECORD_PATH присвоить значение

define('AC_RECORD_PATH','https://109.234.36.31/rec/monitor/%Y/%m/%d/#');


Теперь, через некоторое время (на момент написания статьи период обновления записей составлял 1.5 часа), в кабинете amocrm при просмотре карточки клиента мы увидим время звонка, а также получим возможность скачивать и прослушивать разговоры.




Исходящая связь через amocrm

Для совершения исходящей связи через amocrm во FreePBX или Asterisk у нас должны быть созданы исходящие правила с маршрутом на вашего оператора.

Если правила не созданы, то переходим в Connectivity – Outbound Routes и создаем исходящее правило. В нашем примере все контакты в amocrm занесены в формате e.164 (7_номер), так что создадим правило набора через 7.



Нажимаем Submit Changes и Apply Config


Прежде чем проверять исходящие вызовы через amocrm, проверим их из браузера. Залогинемся под добавочном номером 100 (тем, что мы указывали в Настройки - Интеграция - AsteriskNew) на АТС, и из консоли браузера попробуем инициировать вызов, например:

https://asterisk-ip/amocrm.php?_login=amocrm&_secret=dnhYZ8wzGI&_action=call&from=100&to=номер _кому_звоним&as=Amocrm&rand=0.2903593583748121&_=1468160806724

В браузере должно появиться:

asterisk_cb({"status":"ok","action":"call","data":{"response":"Success","message":"Originate successfully queued"}});

и в этот момент ваш добавочный номер должен зазвонить. После поднятие трубки asterisk инициирует вызов на указанный вами номер.




Если все прошло удачно, то можем попробовать позвонить одному из клиентов. Переходим в Контакты, выбираем нужного нам клиента и переходим в его профиль, далее нажимаем на его номер и в открывшимся меню выбираем AsteriskNew.



На этом наша интеграция завершена.

 
Powered by SEO CMS ver.: 23.1 TOP 2 (opencartadmin.com)