====== Asterisk. Интеграция ======
===== Программа курса =====
* [[http://www.specialist.ru/course/asterisk3|Asterisk. Уровень 2. Интеграция с внешними системами]]
===== Цель курса =====
Изучить интерфейсы и варианты интеграции Asterisk с внешними системами
===== Модуль 0. Подготовка стенда в классе =====
* Узнать свой номер стенда
* Удалить виртуалки
* Удалить профили putty
* Отключить не используемые адаптеры
* Записать логин пароль и IP (сообщить преподавателю) рабочей станции
* Проверить наличие дистрибутивов и образов
===== Модуль 1. Развертывание компьютерной и телефонной сети предприятия =====
==== Теория ====
* Базовая схема компьютерной сети предприятия
* Базовая схема телефонии предприятия
* Схема информационных систем предприятия
==== Лабораторные работы ====
==== Упражнение 1.1. Настройка сервера Asterisk, sip каналов и базового диалплана ====
* Настройки VM RAM: 1Gb, Audio: AC97 (для festival !!! не забыть запустить инсталляцию заранее)
* [[Настройка сети в Linux]] - [[Сервис Ansible]]
* [[Сервис Asterisk#Установка]] Asterisk
* [[Сервис Asterisk#Настройка базового функционала IP PBX]] - [[Сервис Ansible]]
* Запустить [[Сервис MySQL#Установка]] MySQL
* [[ZoIPer]]
===== Модуль 2. Интеграция Asterisk с базами данных =====
==== Теория ====
* Основы реляционных баз данных ([[https://ruseller.com/lessons.php?id=1664|Реляционные базы данных для чайников]])
* Схемы данных для информации из Asterisk ([[http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql|Asterisk cdr mysql]], [[https://www.voip-info.org/wiki/view/Asterisk+RealTime+Sip|Asterisk RealTime Sip]])
* [[https://voipnotes.ru/podkluchenie-asterisk-k-mysql-cherez-draiver-odbc/|Подключение Asterisk к MySQL через драйвер ODBC]]
==== Лабораторные работы ====
==== Упражнение 2.1. Развертывание сервера СУБД MySQL ====
* [[Локализация системы#Локализация временной зоны]]
* [[Сервис MySQL#Установка]] MySQL
* [[Сервис MySQL#Настройка кодировки UTF-8]]
==== Упражнение 2.2. Подключение Asterisk к СУБД ====
* [[Сервис Asterisk#Использование СУБД для хранения CDR]]
* [[Сервис ODBC]]
* [[Сервис Asterisk#Asterisk ODBC]]
==== Упражнение 2.3. Хранение Asterisk CDR в БД ====
* [[Сервис Asterisk#Детализация разговоров]]
* [[Сервис Asterisk#Asterisk ODBC CDR]]
* [[Сервис ODBC#Проверка подключения]]
* [[Сервис HTTP#Установка и запуск сервера Apache]]
* [[Сервис HTTP#Модуль php]]
* [[Язык программирования PHP#Модуль php mysql]]
* [[Сервис Asterisk#Шаблон конфигурации для осуществления исходящих вызовов]]
* [[Сервис Asterisk#Просмотра статистики CDR и прослушивание записей]]
==== Упражнение 2.4. Хранение конфигурации Asterisk в БД ====
Демонстрирует преподаватель
* [[Сервис Asterisk#Asterisk realtime]]
* [[Сервис MySQL#phpmyadmin]] или [[Сервис MySQL#adminer]]
==== Упражнение 2.5. Примеры работы с БД из диалплана ====
В классе, лучше, после создания и подключения каналов 403 и 404 в следующем модуле
* [[Сервис Asterisk#Шаблон конфигурации для обработки входящих вызовов]]
* Запустить установку [[Сервис Festival]]
* [[Сервис Asterisk#Asterisk ODBC функции]]
===== Вопросы =====
* В чем преимущества хранения данных в RDBMS?
* В чем преимущества использования интерфейса ODBC?
* В какие внешние системы может передавать Asterisk данные CDR?
===== Модуль 3. Управление конфигурацией Asterisk из внешних приложений =====
==== Теория ====
* [[FreePBX]]
* [[https://habrahabr.ru/post/125359/|Скрипт на perl формирующий users.conf и extensions.conf]]
* [[http://free.oxymium.net/Asterisk/|Asterisk LDAP Realtime driver]]
* [[https://wiki.asterisk.org/wiki/display/AST/LDAP+Realtime+Driver|Asterisk Realtime Lightweight Directory Access Protocol (LDAP) Driver]]
* [[http://blog.sepa.spb.ru/2012/04/asterisk-sync-with-active-directory.html|Asterisk sync with Active Directory]]
* [[https://youtu.be/ofbIsW2Bqbc|Видео: Использование телефонии Asterisk на предприятии с инфраструктурой Microsoft Active Directory]]
* Взаимодействие с Microsoft Windows [[linux_freebsd_взаимодействие_с_microsoft_windows#Модуль 5. Протокол LDAP]]
==== Лабораторные работы ====
==== Упражнение 3.1. Развертывание инфраструктуры Microsoft AD на предприятии ====
* [[Развертывание Active Directory]]
==== Упражнение 3.2. Конфигурация Asterisk на основании информации в Microsoft AD ====
* Видео урок: [[Открытое решение IM и Presence в инфраструктуре Microsoft AD]]
* [[Сервис Asterisk#Интеграция с Microsoft AD и LDAP]]
==== Упражнение 3.3. Подключение телефонных аппаратов ====
* [[Сервис Asterisk#Provisioning]]
* SIP Phone Panasonic KX-HDVXXX [[SIP Phone Panasonic KX-HDVXXX#Перезагрузка]]
* [[PhonerLite]]
* Linksys SPA-3102 [[Linksys SPA-3102#Восстановление фабричных настроек]] (вероятно, тоже хватит перезагрузки)
===== Вопросы =====
* Почему нет смысла хранить в AD имена/секреты каналов абонентских телефонов?
===== Модуль 4. Использование модулей Asterisk для интеграции с внешними системами =====
==== Теория ====
* [[https://ru.wikipedia.org/wiki/Синтез_речи|Синтез речи]]
* [[http://ru.wikipedia.org/wiki/Унифицированные_коммуникации|Унифицированные коммуникации]]
* Основы протоколов [[https://ru.wikipedia.org/wiki/SMTP|SMTP]] и [[https://ru.wikipedia.org/wiki/IMAP|IMAP]]
* Варианты использования почтового сервера для голосовой почты
* [[https://ru.wikipedia.org/wiki/XMPP|eXtensible Messaging and Presence Protocol]]
* [[https://habrahabr.ru/post/137124/|Связываем Active Directory, Asterisk и OpenFire]]
==== Лабораторные работы ====
==== Упражнение 4.1. Интеграция с системой синтеза речи Festival ====
* [[Сервис Festival]]
* [[Сервис Asterisk#Синтез речи с использованием пакета Festival]]
* [[Zabbix Вам позвонит и расскажет...]]
==== Упражнение 4.2. Интеграция с системами электронной почты ====
* [[Управление учетными записями в Linux]]
* [[Сервис MTA#Установка и настройка MTA на обработку почты домена hostname]]
* [[Сервис MTA#Настройка MTA на обработку почты домена corpX.un]]
* [[Сервер dovecot]]
* [[Web интерфейс к почте]]
* [[Сервер dovecot]] (через [[Сервис Ansible]], добавить сертификат в репозиторий linux, см. комментарии voicemail.conf)
# ansible-playbook conf/ansible/roles/mail.yml
* Создать ящик для абонента 403 в формате imap подключиться к почтовому серверу для прослушивания голосовой почты можно с домашнего компьютера по адресу http://172.16.1.X/mail
* Можно создать пользователя user3 (точно пригодится в 5-м модуле)
# useradd -m user3
# passwd user3
... password3
* [[Сервис Asterisk#Локализация сообщений Asterisk]]
* [[Сервис Asterisk#Голосовая почта]]
* Для прослушивания голосовой почты настроить звонок на номер своего телефона
==== Упражнение 4.3. Интеграция с системами IM и Presense ====
Сценарий: уведомляем пользователей о звонке (и кто звонит) на их телефон через xmpp клиент (удобно для пользователей телефонов без дисплеев), управляем вызовом согласно статусу присутствия абонента.
* Добавляем в стенд client3 (в классе)
* Сервис OpenFire [[Сервис OpenFire#Установка]]
* Сервис OpenFire [[Сервис OpenFire#Подключение и предварительная настройка]]
* Сервис OpenFire [[Сервис OpenFire#Управление учетными записями]] (достаточно user3/password3)
* Cделать всех "buddy" для мониторинга статуса абонента (может потребоваться перезапуск сервиса asterisk)
* Проверяем наличие MY-USER-ID для 403 канала ([[Сервис Asterisk#Настройка базового функционала IP PBX]])
* [[Сервис Asterisk#XMPP]]
===== Вопросы =====
* Как проверить наличие и добавить нужный модуль в Astеrisk
* По какой причине предварительная запись звуковых сообщений предпочтительнее синтеза речи?
* Какие виды хранилищ может использовать Asterisk для голосовой почты?
===== Модуль 5. Запуск внешних приложений из Asterisk =====
==== Теория ====
* [[http://www.itp-redial.com/class/weekly-notes/week4-notes/system-and-shell|System and SHELL]]
==== Лабораторные работы ====
* [[Сервис Asterisk#Функция SHELL]]
* Простой пример использования [[Сервис Asterisk#Приложение System]]
* Новая версия вебинара "Голосовые сервисы помогут голосовой почте!" начиная с последнего пункта [[Голосовые сервисы помогут голосовой почте!#Шаг 3. Настраиваем asterisk]] и до конца
===== Вопросы =====
- Чем System отличается от SHELL
===== Модуль 6. Управление Asterisk-ом из приложений =====
==== Теория ====
* Программные интерфейсы Asterisk
* [[http://www.pbxware.ru/wiki/asterisk_managment_interface_ami/|Asterisk Managment Interface (AMI)]]
* [[http://www.jcgonzalez.com/test-asterisk-ami-telnet|Log in, Log out from Asterisk AMI with Telnet]]
* [[http://habrahabr.ru/company/centosadmin/blog/161521/|Asterisk: обратный вызов с использованием AMI и PHP]]
* [[https://voxlink.ru/kb/asterisk-configuration/call-files-in-asterisk/|Использование Call-файлов в Asterisk]]
* Интерфейс AGI
* [[http://www.voip-info.org/wiki/view/Asterisk+AGI|Asterisk Gateway Interface (AGI)]]
* [[http://www.it4ru.ru/index.php/ru/2-uncategorised/17-prostoj-primer-agi.html|Простой пример AGI на PHP]]
* [[https://habrahabr.ru/post/133869/|Синтез и распознавание речи от Google для Asterisk]]
* Варианты интеграции систем CRM и Asterisk
* [[https://bx24asterisk.ru/instruction/]]
* [[https://ru.wikipedia.org/wiki/REST|REST wikipedia]]
* [[https://ru.wikipedia.org/wiki/JSON|JSON — Википедия]]
* [[http://subnets.ru/blog/?p=5416|В Asterisk появился REST Interface (ARI)]]
==== Лабораторные работы ====
==== Упражнение 6.1. Интерфейсы для программистов на примере задачи "обратный звонок" для посетителей сайта ====
* !!! Запустить установку необходимых пакетов для CRM
* [[Сервис Asterisk#Организация обратных вызовов]] (ключ -x)
* HTML [[Сервис HTTP#Форма]]
* [[Сервис HTTP#Модуль php]]
* [[Пакет sudo]]
* [[Язык программирования PHP#Обработка полей формы и вызов внешних программ]]
* [[Сервис Asterisk#Организация обратных вызовов]] (call файлы)
* [[Сервис Asterisk#Asterisk AMI]]
* [[Программирование диалогов expect]]
==== Упражнение 6.2. Динамическая генерация плана нумерации ====
* [[Сервис Asterisk#Asterisk AGI]]
==== Упражнение 6.3. Пример интеграция с системой CRM ====
* [[Сервис SalesPlatform Vtiger CRM Russian]]
* [[Сервис SalesPlatform Vtiger CRM Russian#Интеграция с Asterisk]]
==== Упражнение 6.4. Asterisk REST интерфейс ====
Включение и тестирование ARI
* [[https://wiki.asterisk.org/wiki/display/AST/Getting+Started+with+ARI|Getting Started with ARI]]
* [[Сервис Asterisk#Asterisk ARI]]
* [[http://ari.asterisk.org/|Asterisk REST API Browser]] (заработал из Firefox)
Организация обратных вызовов через ARI
* [[Сервис Asterisk#Организация обратных вызовов]] - Пример с использованием Asterisk ARI
Мониторинг Asterisk через ARI
* [[Сервис Asterisk#Мониторинг Asterisk через ARI]]
Динамическая генерация далплана через ARI
* [[Сервис Asterisk#ARI Stasis]]
Пример работающего приложения
* Сервис HTTP [[Сервис HTTP#Управление кодировкой]]
* [[http://server.corpX.un/asterisk/addrbook.txt]]
* [[https://chrome.google.com/webstore/detail/asterisk-click2call/hlnmjkbpmnbgeondjeceaomhafdacmlj?hl=ru|Asterisk Click2Call]] (в URL не ставить / в конце)
403
http://server.corpX.un:8088
default
asterisk
asterisk
Convert phone numbers
===== Вопросы =====
* Почему приходится использовать sudo для интеграции приложений Web и Asterisk?
* Что общего у интерфейсов Asterisk AGI и Web CGI?
* Как интерфейс ARI позволяет заменить интерфейсы AGI и AMI?