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

Структурная схема комплекса

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

Прежде чем приступить к реализации, необходимо определить цели и задачи, которые мы ставим перед комплексом и как он собственно будет работать?

В целом поставленная задача, я полагаю, понятна.

Выбираем «движок» для комплекса

И так теперь после подготовительных (проектных :)…) работ, можно приступать к реализации. Вероятно существует большое количество таких решений на базе предположим siemens или avaya… ,но приобретение дорогостоящих платных решений( или просто платных), как вы поняли не входит в наши планы и не рассматривается.Работаем с Asterisk. Что нам потребуется?

Установка Asterisk и необходимых компонентов

С чего начать? Скачать и установить asterisk из пакетов, исходного кода, готовый дистрибутив или выбрать и купить готовую предустановленную станцию. Читаем подробный материал «Установка» на asterisk.ru. «Полное собрание сочинений» — Документация. Выбор за Вами. Остановлюсь только на «отклонениях от стандарта». Прочитаем «Asterisk Reference Information Version 1.6.1.5» и для обеспечения выгрузки информации о звонках в базу MSSQL — компилируем и устанавливаем последний(на момент описания) пакет FreeTDS:

Устанавливаем asterisk (или собираем вновь если он был установлен ранее) с поддержкой cdr tds.

Редактируем файл /etc/asterisk/cdr_tds.conf — пароль, имя пользователя и базы ( на MSSQL).

И наконец создаем таблицу ‘cdr’в базе данных MSSQL.

Контролируем что все работает нормально.

Call Detail Records

С этого момента, все необходимые для нашей работы сведения о производимых вызовах, фиксируются в базе данных MSSQL в табличке CDR. Особый интерес представляет поле -«disposition» принимающее значения — «ANSWERED» и «NO ANSWER».

Статус вызова

К этому полю мы еще вернемся когда будем рассматривать клиентское приложение, а сейчас перейдем к перечню каналов. Разместим его в таблице в базе данных MYSQL, где основными параметрами являются «номер» абонента и его «имя». Используем пакетный режим работы MYSQL для получения необходимых данных:

/usr/bin/mysql -h host -D base -u user —password=password < /etc/asterisk/sql_table

Где файл /etc/asterisk/sql_table предварительно формируется в зависимости от необходимых нам данных примерно так:

/bin/echo «SELECT * FROM table ORDER BY id» > /etc/asterisk/sql_table

Полученный номер абонента используется для формирования файла в директории /var/spool/asterisk/outgoing. Asterisk отслеживает папку outgoing на наличие текстовых файлов,содержащих информацию запросов вызовов. Эти файлы позволяют производить вызов, просто перемещая правильно структурированный файл в папку outgoing/.Файлы вызовов, помещенные в папку outgoing/, могут содержать полезную информацию, такую как Context (Контекст), Extension (Расширение) и Priority (Приоритетность), соответственно которой должен начинаться ответ на вызов, или просто приложение и его аргументы. Так-же в них можно задать переменные и определить код учетной записи для Call Detail Records (Записи параметров вызовов).

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

Можно задать время ожидания ответа на звонок (по умолчанию 45 с),время между повторными попытками дозвониться и максимальное число попыток. Если параметр MaxRetries (максимальное число попыток) опущен, выполняется только одна попытка вызова:

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

Таким образом запрос номера из базы данных MYSQL и формирование необходимого файла в директории outgoing/ для совершения вызова Asterisk легко реализуется без использования каких либо языков программирования, при помощи shell с организацией цикла по всем записям таблицы.

shell скрипт

Чуть не забыл! При ответе абонента на вызов в трубке будет «глухая тишина», кто то должен объяснить что это автоматическая проверка. Для этого необходимо сделать предварительную запись сообщения, «проигрываемую» при ответе. Без «излишеств» это выглядит так:

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

Ну и наконец результат поле -«disposition» принимающее значения — «ANSWERED» и «NO ANSWER».Именно анализируя состояние этого поля мы делаем вывод о том , был ли ответ абонента и соответственно о работоспособности канала. Для удобства анализа применим простое приложение Win32.

Приложение проверки

Не тратим время и силы на мониторинг и проверку — а только на работу по восстановлению не работоспособных каналов. Как «побочный продукт» получаем статистику за:

и основания обоснованно предъявлять претензии оператору оказывающему услуги (или к себе).

Отчет состояния каналов связи

Ну вот собственно и все.