Курсы по использованию Asterisk

IP-телефония — технология будущего. Обучитесь работе с IP-АТС Asterisk для того чтобы внедрить и профессионально использовать при решении коммуникационных задач.

Работайте с Asterisk профессионально!

Многоуровневая защита IP-АТС Asterisk

Телефонные станции очень часто становятся объектами хакерских атак. Узнайте, каким образом необходимо строить многоуровневую защиту для Вашей IP-АТС.

Не оставьте хакерам шансов. Защитите свой Asterisk от атак.

Используйте Веб-Интерфейс для удобства настройки

Панель управление FreePBX позволяет легко и удобно управлять всей системой. Научитесь эффективно использовать FreePBX для решения своих задач.

Управление станцией и статистика в окне браузера.

Научитесь работать с Asterisk из консоли

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

Научитесь «тонкой» настройке Asterisk

Цель курсов - максимум практики.

Обучение нацелено на практическую работу с IP-оборудованием: платы потоков E1, VoIP-телефонные аппараты, голосовые шлюзы FXS и прочее.

Обучение на реальном оборудовании — залог успеха.

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

База знаний Интеграция с CRM
В данной статье рассмотрим, как подключить 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)}\&USER_LOGIN=your@mail.ru\&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. Пример скрипта можно найти в комментариях от наших пользователей

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