Дмитрий Кайдаш
14.10.2019
13719

Интеграция asterisk+freepbx c CRM-системой на примере amoCRM

В данной статье рассмотрим, как подключить AmoCRM к Asterisk c предустановленным FreePBX. Технические требования Настройка подключения Настройка cidlookup Карточка клиента Умная переадресация Настройка отдачи файлов разговоров Технические требования Серверная часть: Asterisk версии 1.8 и выше с поддержкой технологии AJAM или AMI Вебсервер, с поддержкой протокола https (если вебсервер или Asterisk находятся в локальной сети то потребуется настройка […]

asterisk и freepbx c CRM-системой

В данной статье рассмотрим, как подключить AmoCRM к Asterisk c предустановленным FreePBX.

  1. Технические требования
  2. Настройка подключения
  3. Настройка cidlookup
  4. Карточка клиента
  5. Умная переадресация
  6. Настройка отдачи файлов разговоров

Технические требования

Серверная часть:

  • Asterisk версии 1.8 и выше с поддержкой технологии AJAM или AMI
  • Вебсервер, с поддержкой протокола https (если вебсервер или Asterisk находятся в локальной сети то потребуется настройка Hairpid NAT или подмены DNS)
  • Для ведения аналитики и закрепления записей разговоров требуется SSL сертификат на доменное имя подписанное доверенным ЦС
  • PHP с поддержкой json_encode (5.1+PECL_json и выше версии)
  • PHP с расширением PDO с модулем соответствующего бэкэнда CDR
  • Asterisk собранный с модулем Curl (или системный wget на линуксе)
  • Разрешить доступ с ip по ссылке.
  • Настроить локальный заворот: со всех рабочих мест в локальной сети домен <company>.voxlink.ru должен вести на локальный интерфейс asterisk.
  • Доступ к серверу от локальных ПК должен быть разрешен.

Клиентская часть:

Т.к. AmoCRM представляет собой облачный сервер подключение, к которому осуществляется посредством браузера, то и требования заключаются только в нем.

Заявленные в официальных источниках поддерживаемые интернет обозреватели (список предоставлен с учетом поддержки начиная с указанной версии):

  • Internet Explorer 11
  • Google Chrome 46
  • Mozilla Firefox 43.0
  • Opera 17
  • Safari 8
  • MS Edge 11

Дополнительных требований, таких как наличие JavaScript или установка расширений не требуется.

Настройка подключения

  1. Одним из важнейших и необходимых пунктов интеграции является разрешение доступа к  АТС на сетевом оборудовании. Для этого требуется разрешить проброс портов 443 и 8088 (tcp). Следует обратить внимание, что в файервол АТС должны быть добавлены ip-адреса сетей, из которых впоследствии будет использоваться CRM система.
  2. Следующим шагом создадим нового AMI пользователя. Для этого на АТС редактируем файл: /etc/asterisk/manager.conf. Логин и пароль могут быть произвольными. Но в целях безопасности рекомендовано использовать сложные пароли.
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
webenabled = yes
httptimeout = 60
[amoCRMuser]
secret = amoCRMpassword
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

3. Далее настроим доступ к ajam интерфейсу по стандартному порту 8088, отредактируем файл: /etc/asterisk/http.conf

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

                Bыполним в консоли CLI команду:

# core restart now

Или если есть доступ к web-интерфейсу выполнить комбинацию submit+apply config. Это безопасно позволит обновить всю конфигурацию из файлов настроек. Затем для проверки статуса в той же консоли выполним:

# http show status

Если все правильно, результат будет примерно следующий

проверка запуска сервиса
проверка запуска сервиса

Для окончательной проверки в адресной строке браузера выполним переход по адресу:

http://ip-asteriska:8088/asterisk/rawman?action=login&username= amoCRMuser&secret=amoCRMpassword

Если вы используете внутрений ip Asterisk необходимо добавить разрешение на свой ip в manager.conf. И если получаем:

проверка доступности интерфейса
проверка доступности интерфейса

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

4. Сертификат и ключ можно размещать в любой директории, но впоследствии необходимо прописать полный путь в файле: /etc/httpd/conf.d/ssl.conf, например, как это показано на скриншоте:

SSL - сертификат
SSL — сертификат

Для проверки правильности в адресной строке вашего браузера заменяем ip-адрес, на доменное имя. После проверки аутентификации откроется стандартный web-интерфейс.

5. На этом шаге можно приступать к настройке виджета AmoCRM. В личном кабинете переходим в Интеграции->Asterisk. Скачиваем скрипт по предоставленной ссылке и распаковываем в корневую директорию apache или аналогов и делаем его доступным извне. После чего возвращаемся к настройке виджета:

  • Логин\пароль: указываем прописанные нами в manager.conf
  • Добавляем соответствие пользователей внутренним номерам
  • Путь к скрипту: обязательно «https://» в начале, следом доменное имя и файл скрипта «amocrm.php».
  • Щелкаем переключатель «включить виджет» и жмем «сохранить».
настройка виджета, добавление учетной записи, вн.номеров, пути к скрипту
настройка виджета, добавление учетной записи, вн.номеров, пути к скрипту

6. Отредактируем исходный код скрипта: /var/www/html/amocrm.php. Для того чтобы не создавать своего пользователя базы данных, воспользуемся уже существующим.

настройка подключения скрипта к базе и фалам разговоров
настройка подключения скрипта к базе и фалам разговоров

7. Логин+пароль смотрим в файле: /etc/freepbx.conf.

Freepbx-user
Freepbx-user

Тут же нужно проверить подключение и доступ к внутренней базе Asterisk, выполнив ряд запросов:

https://domain.sertname.ru/amocrm.php&_login&_secret=&_action=test_cdr

Возвращает результат пробного соединения с CDR таблицей.

проверка записи в mysql
проверка записи в mysql
https://domain.sertname.ru/amocrm.php&_login&_secret=&_action=status

Возвращает результат текущего состояния соединения с базой.

проверка доступа к mysql
проверка доступа к mysql
https://domain.sertname.ru/amocrm.php&_login&_secret=&_action=cdr

Возвращает несколько последних записей из таблицы.

Настройка cidlookup

Для настройки cidlookup нам нужно во FreePBX в разделе Admin — CallerID Lookup Sources добавить источник откуда мы будем брать имя звонящего:

Хост: <account>.amocrm.ru
Порт: 443
Имя пользователя: логин из пункта №2
Пароль: пароль из логин из пункта №2
Путь: /private/acceptors/asterisk_new/
Запрос: number=[NUMBER]&USER_LOGIN=<login>&USER_HASH=<hash>

<login> логин из пункта №2
<hash> API ключ amocrm
<account> ваш аккаунт в amocrm

При использовании в качестве логина длинных email адресов возможно потребуется изменить размерность (длину) колонки в таблице, используемой для хранения ссылки из настроек выше, т.к. по умолчанию она может содержать не более 100 символов и этого не всегда достаточно для хранения всей ссылки. Для этого необходимо выполнить запрос:

ALTER TABLE `cidlookup` CHANGE COLUMN `http_query` `http_query` VARCHAR (255) NULL DEFAULT NULL AFTER `http_path`;

Теперь нам нужно переписать диалплан, для этого идем в /etc/asterisk/extensions_additional.conf и находим там контекст [cidlookup]. Он будет выглядеть примерно так же как и ниже, для нас главное exten => cidlookup_1, если это так(если нет то меням cidlookup_1 на тот что указан у вас в контексте) то копируем контекст указанный ниже и вставляем его в /etc/asterisk/extensions_override_freepbx.conf и делаем 

# dialplan reload
 
 [cidlookup]
 include => cidlookup_custom
 exten => cidlookup_1,1,Set(CALLERID(name)=${SHELL(wget -O - --quiet https://your.amocrm.ru/private/acceptors/asterisk_new/?number=${CALLERID(num)}\&[email protected]\&USER_HASH=xxxxxxxxxxxxxxxxxxxxxxxxxxx)})
 exten => cidlookup_1,n,Return()
 exten => cidlookup_return,1,ExecIf($["${DB(cidname/${CALLERID(num)})}" !=""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})}))
 exten => cidlookup_return,n,Return()

Где USER_HASH – это Ваш уникальный API ключ предоставляемый в личном кабинете AmoCRM –> настройки –> API.

копирование своего API ключа
копирование своего API ключа

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

https://domain.amocrm.ru/private/acceptors/asterisk_new/?number=номерклиента&USER_LOGIN=емейлдлявходавамоцрм&USER_HASH=ключапи

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

проверка отдачи имени контакта
проверка отдачи имени контакта

Далее желательно проверить отдачу имени абонента через консоль севрера, для этого нужно выполнить фактически тот же запрос, но с небольшими изменениями: необходимо будет экранировать символ &

Запрос из консоли будет выглядеть примерно так

curl https://domain.amocrm.ru/private/acceptors/asterisk_new/?number=<номерклиента>\&USER_LOGIN=<емейл-для-входа-в-амоцрм>\&USER_HASH=ключапи

Карточка клиента

Теперь можно убедиться во всплытии карточки клиента. Для этого необходимо быть залогиненым в личном кабинете AmoCRM, находится в одной из вкладок контакты или сделки и совершить входящий вызов на внешний номер, который маршрутизируется хотя бы на один из внутренних номеров добавленных в виджет. При этом стоит учитывать, что задержка всплытия может достигать до 5 секунд.

Если карточка не всплывает нужно проверить следующие пункты:

  • Блокировка всплывающих окон на странице браузером
  • Расширение для браузера с тем же функционалом
  • Перезагрузить страницу, включая кеш: ctrl+shift+R

Если это не дало результата, можно включить в браузере «режим разработчика», чтобы видеть события и логи ошибок: нажимаем F12 и переходим во вкладку Networks.

Умная переадресация

Умная переадресация позволяет перевести вызов на ответственного менеджера

Для этого нам нужно создать специальный контекст, назовем его amocrmtransfer

; 151 виртуальный добавочный
; DEFEXT добавочный по умолчанию.
; <login> логин в amocrm
; <hash> API ключ amocrm
; <account> ваш аккаунт в amocrm

[amocrmtransfer]
 exten => 151,1,Set(DEFEXT=101);
 exten => 151,n,Set(TOEXT=${CURL(https://<account>.amocrm.ru/private/acceptors/asterisk_new/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=<login>&USER_HASH=<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, будут переведены на ответственного менеджера или номер по умолчанию.

Настройка отдачи файлов разговоров

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

  • Сделать папку с записями разговоров доступными по https (напр. http://sip.loc/records/) Мы рекомендуем сделать символьную ссылку на эту папку, а так же в целях безопасности открыть доступ только для доверенных IP адресов (актуальный список ip адресов amocrm всегда можно посмотреть тут, а просмотр содержимого (dirlisting) отключить.
  • Не забываем прописать в скрипте amocrm.php параметр AC_RECORD_PATH которому нужно присвоить значение https://records.sip.loc/records/%Y/%m/%d/# (#имя файла, %Y %d %m дата звонка покомпонентно).
  • Теперь через некоторое время в кабинете amocrm при просмотре карточки клиента мы увидим время звонка, а так же возможность скачать и прослушать разговор
Записи разговоров
Записи разговоров

Если у вас FreePBX версии 2.9 и ниже, то в CDR БД поля recordingfile не будет, и его нужно будет добавить вручную:

# ALTER TABLE `cdr` ADD `recordingfile` VARCHAR (120) NOT NULL

После чего нужно будет внести изменения в контекст записи разговоров. Для FreePBX это [macro-record-enable]. Скопируйте его из extensions_additional.conf в extensions_override_freepbx.conf, и после назначения переменной имени файла записи добавьте следующую строку:

Если вы хотите что бы статистика отображалась корректно, а также что бы записи исходящих вызовов тоже отображались в CDR необходимо выполнить следующее:

В /etc/asterisk/extensions_custom.conf создаем контекст:
[from-amocrm]
exten => _.,1,Macro(user-callerid)
same => n,Goto(from-internal,${EXTEN},1)

Затем делаем

# dialplan reload
 Далее в скрипте amocrm.php 98 строка, меняем 'Context'=>'from-internal', на 'Context'=>'from-amocrm',

Если через какое то время вы стали наблюдать долгое выполнение диалплана в астериске, то вам необходимо в amocrm.php использовать не ajam а ami, для этого укажите порт 5038 и закомментируйте define(‘AC_PREFIX’,’/asterisk/’) используя знак # в начале данной строки

Если http show status отображает не все URI’s, то необходимо проверить следующие пункты: 

1. В manager.conf стоит enabled=no или не указан параметр webenabled=true 
2. Не выполнена команда core restart now 
3. Владелец файла /etc/asterisk/http.conf является root а не asterisk (или пользователь под которым запускается asterisk) 
4. Прочитать статью еще раз более внимательно Если у вас asterisk 13, то карточка работать не будет, пока не будет поправлен amocrm.php. Пример скрипта можно найти в комментариях от наших пользователей

Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Александр
Александр
24.12.2020 10:08

Добрый день!
В amocrm отказались от API ключей в пользу OAUTH авторизации.
Как теперь настроить cidlookup и умную переадресацию?

Евгений
Евгений
12.02.2021 17:58
Ответить на  Александр

Нет, ты можешь написать в тп и тебе выдадут в чате ключ API

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.