Интеграция CRM-систем и Asterisk на примере AmoCRM

        В современных реалиях сложно представить себе более-менее крупную организацию, которая бы не использовала ту или иную CRM. Однако по-настоящему потенциал этих систем раскрывается при тесной интеграции их с телефонией. Представьте, насколько это удобно – не искать каждый разномер клиента в записной книжке или мобильном, просто открыть карточку в CRM, нажать кнопку – и звонок пошёл. А если вам звонит клиент, который уже есть в базе – звонок сразу направляется на закреплённого за конкретным клиентом менеджера. Таким образом решаются сразу две задачи: подобные звонки не нагружают лишний раз секретарей, а клиенту не приходится представляться «по форме», а потом ещё и ждать, пока секретарь переключит его на ответственного менеджера. 

        В этой статье я хочу рассмотреть пример подобной интеграции. В качестве CRM была выбрана отечественная AmoCRM, отличающаяся своей простотой, низким порогом вхождения (а это весьма важно, ведь чем меньше вашему заказчику придётся потратить времени и сил на обучение персонала – тем лучше) и довольно богатым функционалом, отвечающим всем требованиям к такого рода системам. В качестве сервера телефонии был выбран дистрибутив Elastixна базе Asterisk. Почему именно он, а не «облачная АТС»? С одной стороны, «облако» кажется решением более надёжным, да и многие CRMпредлагают возможность интеграции с большим количеством облачных АТС двумя щелчками мыши. Но у него есть ряд весомых недостатков. Во-первых, по функционалу и гибкости, с точки зрения конечного пользователя, они сильно уступают Астериску. Во-вторых, более-менее надёжные и функциональные облачные решения платные. И в-третьих, интеграция с ними также производится за отдельные деньги (тот случай, когда за простоту интеграции придётся платить заказчику).

  Итак, перейдём к делу. Будем считать, что у нас уже развёрнут Elastix 4, на котором подняты транки до провайдера, настроены внутренние абонентскиеустройства и вся маршрутизация с прочими плюшками (IVR,голосовая почта и т.д.). Также считаем, что у нас уже есть аккаунт в AmoCRMи белый статический IP, по которому наш Elastixдоступен. Вопросы безопасности и защиты от хакинга в данной статье не рассматриваются, будем считать, что тут у нас уже всё надлежащим образом настроено.

        План действий следующий:

- обзавестись доменом любого уровня и привязать к нему наш белый IP

- получить для нашего домена SSL-сертификат и установить его на сервер Elastix

- установить туда же модуль интеграции с AmoCRM

- настроить в Эластиксе CallerIDlookup(чтобы правильно определялось имя звонящего)

   На первом пункте останавливаться не будем, с этим справится любой системный администратор. А вот дальнейшие действия рассмотрим поподробнее. Сразу хочу предупредить, что с linux-подобными системами мне до сего момента иметь дело не приходилось, поэтому пришлось знакомиться на ходу.

       Поскольку соединения с Астериском устанавливаются по протоколу HTTPS, нам необходим сертификат, и встроенный в Эластикс самоподписанный –не годится. Получить его можно как за денюжку, так и бесплатно. Нас, разумеется, интересует второй вариант. Воспользуемся для этих целей решением Certbot. Сперва подключим репозиторий, для этого в консоли пишем следующее:

yum -y install yum-utils

yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

 

а затем – установим сам Certbot:

yuminstallcertbot-apache

 

после чего запустим его:

certbot--apache

 

и дальше следуем его подсказкам. Необходимо будет ввести имя домена, на которое оформляем сертификат.  Сервис стучится по этому адресу и ждёт валидного отклика от нашего сервера. Если всё в порядке и домен принадлежит действительно вам –Certbot, получив подтверждение, генерирует сертификат. Обратите внимание: сертификат выдаётся на три месяца! Следовательно, раз в три месяца необходимо будет его перевыпускать. Делается это командой

certbot renew

 

     Её имеет смысл поместить в CRONи запускать по расписанию. Я использовал такое расписание:

0 0 * * * rootcertbotrenew -q

 

      Т.е. каждую  полночь делается попытка обновить сертификат, если его срок действия скоро закончится (по умолчанию – если осталось меньше месяца). Положить это надо в файл /etc/crontab

      Если ваш Эластикс находится за НАТом и файерволом (а я надеюсь, что так оно и есть) – убедитесь, что к нему есть доступ с сайта сервиса CertbotВ моём случае это был acme-v01.api.letsencrypt.org. Иначе он не сможет достучаться до сервера и, как следствие, подтвердить владение доменом.

      Теперь попробуем зайти браузером на наш домен. Если мы всё сделали правильно – увидим форму авторизации Эластикса и вот это:

      Теперь переходим к следующему этапу. Установим компонент интеграции на наш сервер. Сперва скачаем компонент с сайта CRM. Для этого залогинимся, перейдём в настройки и щёлкнем по виджету Asterisk. Скачиваем архив по предложенной ссылке, включаем виджет и заполняем форму. Придумываем логин (например amocrm) и пароль, вписываем внутренние номера, закреплённые за сотрудниками и путь к скрипту (это будет https://[наш домен]/amocrm.php).

      Теперь переходим в Настройки/APIи сохраняем наш уникальный API-ключ. Распаковываем архив и откроем блокнотом amocrm.php

      Увидим примерно следующее:

      Меняем значение AC_DB_UPASS (пишем туда пароль от учётки admin Эластикса) и AC_RECORD_PATH (это путь, куда CRM будет стучаться в поисках записей разговоров, пишем туда https://[наш домен]/rec#). Сохраняем изменения и закидываем файл в корневую папку веб-сервера (это будет /var/www/html). Опять же, убедитесь, что ваш сервер доступен для Амо, иначе ничего не получится.

      Теперь надо сделать так, чтобы записи были доступны из CRM. А вот тут нас ждёт ма-а-аленький подвох: вместо решётки подставится следующее: «/var/spool/asterisk/monitor/[год]/[месяц]/[день]/[имя записи]», то есть полный путь от корня до аудиозаписи, потому как именно в таком виде его отдаёт CDR Астериска. В нашей папке /rec, естественно, ничего такого нет, а значит, ссылка получится невалидная, и ничего нам скачать не удастся. Что ж, сделаем костыль подпорку. Воссоздадим в папке /recструктуру подпапок /var/spool/asteriskи разместим

туда симлинк на папку /var/spool/asterisk/monitor:

mkdir /var/www/html/rec

mkdir /var/www/html/rec/var

mkdir /var/www/html/rec/var/spool

mkdir /var/www/html/rec/var/spool/asterisk

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

 

      Три волшебные буквы phpнамекают нам, что на сервере нужно будет установить этот самый PHP. В спецификации указано, что необходим PHP версии 5.2 или выше, а кроме того, нужен CURL. Установим всё это добро.

Установка PHP:

 

Установка CURL:

yuminstallcurl

 

      Теперь можно приступать к настройкам на стороне Эластикса. Можно всё делать ручками напрямую в конфигурационных файлах, но через веб-интерфейс всё же как-то приятнее и удобнее. Для настройки я использовал интерфейс UnembeddedFreePBX. Он доступен по адресу

https://[ваш домен]/admin (предварительно надо его активировать в настройках Эластикса в разделе Security/AdvancedSettings).

      Идём в Settings/AsteriskManagerUsersи создаём юзера amocrmс паролем, который мы придумали и ввели при активации виджета. Даём ему права на чтение (reporting, cdr, originate) и на запись (reporting, originate). Ключевым тут является право на чтение CDR, поскольку именно оттуда будет «вытаскиваться» информация о звонках.

      Осталось запустить встроенный сервер HTTP, чтобы наш пользователь смог авторизоваться. Для этого идём в Settings/ Advanced Settings и активируем пункт «Enable the mini-HTTP Server» и «Enable Static Content». Не забываем после этого нажать на появившиеся галочки и кнопу «Applyconfig» сверху.

      Теперь перезагружаем сервер и проверим, работает ли это всё. Введём в адресной строке браузера следующее:

https://[вашдомен]/amocrm.php?_login=amocrm&_secret=[пароль]&_action=status

 

мы должны увидеть вот что:

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

 

это значит, что всё настроено правильно и работает. Двигаемся дальше. Добавим источник CallerIDLookup. Заходим в Admin/Caller ID lookup sources и

заполняем форму.

      В поле «Path» пишем «/private/acceptors/asterisk_new/»

      В поле «Query» пишем:

number=[NUMBER]&USER_LOGIN=amocrm&USER_HASH=[вашуникальный API-ключиз AmoCRM]

 

      Сохраняем настройки. Далее идём в «Inboundroutes» и для каждого маршрута в поле «Source» выставляем значение «amocrm» (название созданного нами CIDLookup’а)

      Теперь проверим, работает ли наша связка. В адресной строке браузера пишем

https://[ваш домен]/amocrm.php?_login=amocrm&_secret=[ваш пароль]&_action=call&from=[внутренний номер]&to=[городской номер]&as=Amocrm&rand=0.13342916560935647&_=1500473077873

 

      Если всё настроено верно, произойдёт вот что:

 - сперва система инициирует звонок на ваш внутренний номер

 - как только вы снимете трубку, система выполнит посыл вызова на городской номер и подключит к нему ваш внутренний номер

 - далее всё происходит так, как будто вы набрали этот городской номер со своего внутреннего

      Абсолютно то же самое происходит при нажатии на номер клиента в Амо и выборе пункта Asterisk-NEW(внутренний номер в этом случае берётся из

профиля, под которым вы залогинились).

      Если же звонят вам, происходит вот что:

 - звонок принимается Астериском

 - скрипт amocrm.phpсвязывается с CRMи сопоставляет номер звонящего с карточками клиентов.

 - если совпадение найдено, то определяется внутренний номер закреплённого за клиентом менеджера и вызов направляется сразу на его внутренний

телефон. При этом всплывает окошко и по щелчку можно открыть карточку клиента.

- если совпадение не найдено, звонок направляется в соответствии с правилами маршрутизации Астериска, при этом у принимающих по этим

правилам звонки всплывает окошко с номером звонящего и предложением добавить информацию о клиенте и закрепить за ним менеджера.

 

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA на основе изображений
Введите код с картинки