artem
26.07.2013
87047

Подключение amoCRM к Asterisk

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

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

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


  • Asterisk с поддержкой технологии AJAM2 или AMI;
  • Вебсервер с поддержкой протокола https (если вебсервер и/или астериск в локальной сети то потребуется настроить Hairpin NAT либо подмену DNS);
  • Для логов звноков и записей разговоров в карточке клиента необходим SSL сертификат  подписанный доверенным ЦС;
  • PHP с поддержкой json_encode (5.2+ или 5.1+PECL_json);
  • PHP с расширением PDO с модулем соответствующего бэкэнда CDR;
  • Asterisk, собранный с модулем Curl (лучше использовать curl или wget линукса)

 

Настройка AmoCRM


Для начала нам нужно включить сам виджет в личном кабинете amoCRM, делается это в Настройки – Виджеты, находим AsteriskNew и нажимаем установить.

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

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

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

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

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

Так же нам нужно запомнить API-ключ для дальнейшего использования amocrm. Для этого нажимаем в правом верхнем углу изменить и запоминаем (копируем) Ключ для авторизации в API (далее он понадобится нам в пункте 4)

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

Настройка manager.conf и ajam


Далее нам нужно создать пользователя для управления asterisk, например amocrm. Технологию подключения будем использовать AJAM. Для этого редактируем /etc/asterisk/manager.conf

В параметрах permit мы должны указать сервер на котором находится скрипт, в данном случае это localhost. Так же необходимо указать минимальные права доступа read и write.

[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. Для этого редактируем файл /etc/asterisk/http.conf если его нет то создаем)

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

Далее, в консоли asterisk мы должны выполнить команду: core restart now

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

Для окончательной проверки введем в браузер (если вы используете внутренний ip астерика, то не забудьте прописать permit для вашего ip в manager.conf) http://ip-asteriska:8088/asterisk/rawman?action=login&username=amocrm&secret=ПАРОЛЬ

И если получаем:

Response: Success

Message: Authentication accepted

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

Теперь нам нужно проверить работу скрипта amocrm.php который мы скопировали в веб директорию нашего сервера (из пункта 2). Для этого нам нужно запустить скрипт с параметрами status, test_cdr и cdr. Предположим скрипт доступен по адресу http://sip.loc/amocrm.php

Откройте в браузере (или консольных клиентах ссылки вида):

https://sip.loc/amocrm.php?_login=<login>&_secret=<pwd>&_action=status

https://sip.loc/amocrm.php?_login=<login>&_secret=<pwd>&_action=test_cdr

где <login> и <pwd> логин и пароль пользователя ajam или другого теxнического пользователя

Убедитесь, что по указанным ссылкам вы не получаете ошибок авторизации или подключения к БД, иначе проверьте параметры подключения.

При запросе test_cdr мы должны получить следующее: asterisk_cb ({ «status»:»ok»,»data»:»connection ok»});

При запросе status информацию о последнем звонке:

asterisk_cb ({ «status»:»ok»,»action»:»status»,»data»:[{ «event»:»Status»,»privilege»:»Call» и т.д.

При cdr информацию о звонках за n количество дней.

 

Настройка сidlookup


Для настройки 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

На самом деле не так важно что мы указали выше, т.к. далее все данные мы перепишем в диалплане для корректной работы FreePBX с https запросами по средствам curl линукса.

При использовании в качестве логина длинных 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()

Далее данный источник нам нужно активировать во входящей маршрутизации (Inbound Routes — Source)

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

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

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

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

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

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

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


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

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

Если звонит клиент, который занесен в amocrm:

Если по какой-то причине карточка не всплывает, стоит выяснить где проблема, для этого, например в браузере Chrome нам нужно открыть инструменты разработчика (F12) находясь на вкладке контакты или клиенты и выбрать раздел Network, далее дождаться выполнения скрипта и выбрать его слева, в открывшемся окне справа выбрать Preview в котором мы увидим какую-либо ошибку (если статусы ок то все в порядке)

А если в Preview пусто а в разделе Headers ошибка 404, то нужно проверить доступность скрипта из вне.

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


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

Для этого нам нужно создать специальный контекст, назовем его 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, и после назначения переменной имени файла записи добавьте следующую строку:

exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.wav)

Если вы хотите что бы статистика отображалась корректно, а также что бы записи исходящих вызовов тоже отображались в 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. Пример скрипта можно найти в комментариях от наших пользователей

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

Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

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

Я - Виталий Шелест, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.