Как стать автором
Обновить

Логирование и тарификация исходящих вызовов для АТС Avaya

Разработка систем связи
Из песочницы
Хочу поделиться опытом настройки логирования вызовов в корпоративной телефонной сети, построенной на базе решений Avaya Aura (под управлением Communication Manager – далее CM). Данные собираются на основе CDR (Call Detail Recording). Эта статья носит обзорный характер, в ней я описываю основные принципы решения возникшей задачи.
В моей компании используется распределенная по территории РФ телефонная сеть с более чем 5000 IP-станций (телефонных аппаратов, используемых сотрудниками). Задачей стояло написание логгера исходящих внешних (направленных в ТфОП) вызовов от внутренних абонентов (включая тандемные вызовы) с последующим добавлением функциональности тарификатора. Внутренние звонки (внутри телефонной сети) и входящие – не интересовали, но описываемый метод сбора информации позволяет обрабатывать и такие типы вызовов. Существует несколько готовых коммерческих решений для тарификации вызовов, некоторые из них нам довелось протестировать в своей компании, но зачастую стоимость этих продуктов не соответствовала уровню удобства использования и качества реализации.

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

Теория

CDR разделяется на два типа: Legacy (Conventional) CDR и Survivable CDR. Первый тип преимущественно использовался на ранних релизах CM, пока не появился более удобный и гибкий механизм – Survivable CDR. Различие в том, что в первом варианте все CDR данные «вещаются» по сети на так называемый CDR adjunct (посредством привязки CDR-линка к IP-адресу принимающего хоста), а во втором вся накопленная информация записывается на жесткий диск ESS или LSP сервера АТС. Legacy CDR работает в режиме «только прослушивания», когда на другой стороне CDR-линка находится клиент (назовем его логгер), принимающий поступающий на заданный порт поток данных в текстовом виде. Если логгер по каким-либо причинам перестает принимать информацию, сервер начинает накапливать данные в буфер, по заполнению которого CDR-линк переходит в состояние down. И с этого момента вся информация о звонках перестает логироваться, что приводит к появлению пробелов в собираемых данных. В случае же Survivable CDR все обстоит иначе: CDR данные записываются на диск в виде текстовых файлов и хранятся там до тех пор, пока не будут удалены вручную либо автоматически при достижении определенного лимита на количество файлов. Для Legacy CDR можно использовать не один, а два CDR-линка (два независимых логгера на разных хостах, что повышает надежность механизма), но второй способ сбора более удобен и надежен (первый способ тоже имеет право на жизнь, например, когда версия CM на вашей АТС не поддерживает Survivable CDR).
В случае с Legacy CDR можно использовать любой сетевой логгер (хоть самописный) – программу, собирающую и обрабатывающую данные, считанные с сетевого порта. Я использовал ADVANCED PBX DATA LOGGER – очень мощный, качественный и интуитивно-понятный логгер, который без проблем настраивается на прием информации с заданного порта, парсинг по кастомизируемым шаблонам и отдачу удобоваримых данных в БД или файл. К тому же, мне посчастливилось получить лицензию на этот продукт взамен на описание формата передаваемых нашей АТС данных :) Для первоначального тестирования отдачи CDR также может пригодиться утилита Netcat, которая позволит «прослушивать» данные на сетевом порту.
Для Survivable CDR не нужно разбираться с настройкой стороннего логгера или писать свой велосипед – достаточно хотя бы знания какого-нибудь скриптового языка, способного подключиться по SFTP к серверу, получить и разобрать текстовый файл и сложить полученные данные в БД. Например, для этого можно задействовать PHP, который также пригодится для организации веб-интерфейса тарификатора. Все обработанные файлы можно удалять с сервера тем же скриптом. Если скрипт по каким-то причинам не отработает вовремя, то данные будут накапливаться достаточно долго (в сравнении с Legacy CDR, где буфер переполняется за несколько часов при большом количестве вызовов), и позже могут быть получены в полном объеме.
Описание формата выходных данных, правил именования файлов Survivable CDR, а также все необходимые настройки CM есть в документе Avaya Aura Feature Description and Implementation (его несложно найти на официальном сайте поддержки). Можно сконфигурировать CM для отдачи строго заданных полей в нужном порядке (так называемый Formated Output).

Тарификация

Итак, CM настроен на отдачу CDR данных логгеру, вся информация скапливается структурированно в базе данных. Теперь нужно произвести тарификацию залогированных вызовов и отобразить всю информацию в красивом и удобном виде. Здесь мне пригодился опыт веб-программирования, и я воспользовался языками PHP и JS для создания веб-интерфейса тарификатора.
Сперва я собрал из различных Интернет-источников таблицу префиксов телефонных номеров, при помощи которой определяется направление звонка – субъект РФ и соответствующий федеральный округ. Были задействованы таблицы префиксов, доступные на сайтах крупных операторов связи (МТТ, Ростелеком, Комстар и др.), а также Википедия.
Затем для каждой транковой группы на основе информации от используемых в компании операторов связи были составлены тарифные таблицы, задающие стоимость минуты звонка через транк-группу в каждый субъект. Здесь возникла следующая сложность: звонки на городские номера внутри одного субъекта могут отличаться стоимостью ввиду тарифицирования по расстоянию до города, а не по принадлежности субъекту. Пришлось разбивать такие субъекты на отдельные зоны: например, дробить Московскую область по районам. Вообще, задача составления тарифных таблиц решается индивидуально в зависимости от того, в каком виде ваш провайдер телефонии предоставит свои тарифы. В идеале, конечно, нужно добиваться таблицы с прописанными для каждого субъекта или города ценами, но это далеко не всегда возможно.
Собранные логгером данные прогоняются через таблицы префиксов и тарифов, и для каждого звонка добавляются поля с направлением и стоимостью.
Одна из особенностей работы CDR в этой АТС – округление длительности звонка 6-секундными интервалами. Еще один важный момент: встает задача разбития логов звонков по разным таблицам БД (в зависимости от объема данных, можно, к примеру, заводить новую таблицу каждый месяц) — иначе выборка из БД будет слишком длительной.
К тарификатору был прикручен механизм получения данных о владельце внутреннего номера (добавочного) из Active Directory. Также реализован механизм фильтрации отображаемых данных по дате/времени звонка, длительности, номерам звонящего и принимающего абонентов и т.д. – можно сделать отбор по любому из отдаваемых в CDR полей (в т.ч. типы звонков, аккаунт-коды, FRL и т.д.)

Итак, если на Хабре присутствуют специалисты, которые хотели бы реализовать свой собственный логгер и/или тарификатор исходящих вызовов для АТС Avaya, готов поделиться своим опытом в меру возможностей.
Теги:AvayaАТСloggerлоггер звонковтарификатор вызововCDR
Хабы: Разработка систем связи
Всего голосов 3: ↑2 и ↓1+1
Просмотры17K

Похожие публикации

Лучшие публикации за сутки