Как система учитывает и тарифицирует вызовы

АСР LANBilling позволяет вести учёт звонков классической телефонии и тарифицировать их. Для этого нужно, чтобы у операторов и абонентов были указаны правильные идентификаторы. Благодаря этому биллинг сможет правильно определять участников вызовов, тарифицировать их и сохранять статистику.

Какие объекты и идентификаторы должны быть в системе

  1. В карточках операторов должны быть заданы номерные ёмкости — диапазоны номеров, которые им принадлежат.

  2. У каждого абонента должна быть как минимум одна учётная запись. Она связывает между собой объекты, необходимые для тарификации.

    • Тариф — условия, по которым рассчитывается стоимость звонков. Помимо основных параметров тарифа также важны категории — это разные группы настроек для разных направлений. Например, в одном тарифе может быть настроена одна категория для местных вызовов и другая — для междугородних. В каждую категорию должны быть добавлены направления — телефонные коды городов или стран.

    • Сетевой агент — с его помощью система обрабатывает вызовы и собирает статистику. В учётных записях телефонии используются сетевые агенты с типом LBphone.

    • Договор — с него списываются средства.

    Кроме того, в абонентских учётных записях телефонии и IP-телефонии должны быть указаны идентификаторы: телефонные номера или транки.

Этапы работы со звонками в АСР LANBilling

АСР LANBilling получает от АТС информацию о звонках и преобразует её в свой формат. Затем система определяет, какие именно абоненты участвовали в том или ином вызове, какой у них назначен тариф. Согласно этому тарифу биллинг рассчитывает стоимость звонка и списывает её с абонентского договора. Статистика звонков сохраняется в системе.

Получение информации о звонке

Записи о звонках сохраняются в файлах CDR. Разные модели АТС сохраняют информацию о звонках в разных форматах. Чтобы АСР LANBilling могла обработать записи, их необходимо преобразовать в специальный формат.

Каков бы ни был исходный формат CDR, после обработки он должен выглядеть так: параметр_1=значение_1;параметр_2=значение_2;параметр_3=значение_3;…

Запись о каждом звонке — отдельная строка, параметры разделены точкой с запятой.

Список возможных параметров:

  • direction — направление вызова (входящий или исходящий);
  • duration — продолжительность разговора в секундах;
  • timefrom — время начала вызова (unixtime);
  • numfrom — номер адресата (номер А);
  • numto — внешний номер (номер Б);
  • trunk_in — признак оператора на входящей линии;
  • trunk_out — признак оператора на исходящей линии;
  • uniqueid — уникальный идентификатор звонка;
  • cause — причина завершения вызова;
  • amount — стоимость вызова по данным АТС;
  • numredirect — номер переадресации.

Пример:

direction=0;duration=50;timefrom=2012-01-01T00:00:00;numfrom=84957950677;numto=7450737;trunk_in=;trunk_out=;uniqueid=13;cause=1;

Для обработки CDR служат специальные плагины — парсеры. Наличие того или иного параметра зависит от формата CDR и особенностей парсера.

Примеры парсеров для бинарных и текстовых форматов CDR

Парсеры для наиболее распространённых моделей АТС уже есть в АСР LANBilling, но вы можете добавить свой. Парсер нужно указать в настройках станции.

CDR-файлы бывают бинарные и текстовые. От этого зависит порядок разбора.

  • CDR бинарных форматов обрабатывают отдельные плагины-парсеры.

    Пример парсера и результата обработки
  • Для большинства текстовых форматов CDR разбор подчиняется схожим правилам. Текстовые форматы обрабатывает text_plug-in — он уже входит в АСР LANBilling.

    Для обработки текстовых форматов, как правило, используются регулярные выражения — POSIX Extended. Регулярное выражение и другие параметры обработки задаются в специальном файле конфигурации.

    Набор параметров, которые можно использовать в файле конфигурации:

    • pattern — паттерн регулярного выражения. Если в синтаксисе регулярного выражения есть ошибки, в логе агента появится сообщение.
    • datetime — номер подстроки, содержащей дату и время звонка. Используется, если дата и время в строке идут подряд.
    • date — номер подстроки, содержащей дату звонка.
    • time — номер подстроки, содержащей время звонка.
    • ani — номер подстроки, содержащей номер А.
    • dnis — номер подстроки, содержащей номер Б.
    • dir — номер подстроки, содержащей признак направления звонка.
    • duration — номер подстроки, содержащей длительность звонка в секундах.
    • dur_our — номер подстроки, содержащей длительность звонка в часах.
    • dur_min — номер подстроки, содержащей длительность звонка в минутах.
    • dur_tenths — номер подстроки, содержащей количество десятых долей минуты в длительности звонка. Используется только в definity-2.
    • trunk_in — номер подстроки, содержащей признак оператора на входящей линии
    • trunk_out — номер подстроки, содержащей признак оператора на исходящей линии
    • In — признак входящего звонка. Должен быть в кавычках.
    • Out — признак исходящего звонка. Должен быть в кавычках.
    • local — признак локального звонка. Должен быть в кавычках.
    • transfer — признак транзитного звонка. Должен быть в кавычках.
    • dateformat — формат даты и времени.
    • cause — номер подстроки, содержащей причину завершения вызова.
    • uniqueid — номер подстроки, содержащей уникальный идентификатор звонка.
    • duration_format — формат длительности звонка. Используется только в Nokia.

    Расширение файла конфигурации — *.conf, а имя — название формата в нижнем регистре. Например, alcatel-2.conf.

    Пример файла конфигурации и результата обработки
Порядок работы парсеров
  1. Когда агент LBphone запускается, он получает параметры настройки из БД LBcore. Среди этих настроек есть краткое название формата CDR — поле name в таблице pabxes. Также там содержится название парсера, работающего с этим форматом — поле plug-in в таблице pabxes. LBphone пытается загрузить этот парсер.

  2. Если удалось успешно загрузить и запустить плагин, агент входит в цикл обработки CDR-файлов. Агент получает CDR от станции, указанной в настройках, и передаёт файл плагину для обработки.

    Если запустить плагин не удаётся, работа агента прекращается, а в логе сохраняется запись «Cannot load plug-in!».

  3. Плагин обрабатывает CDR и преобразует записи в формат, который используется в АСР LANBilling.

    Если плагину не удаётся распознать запись, в логе агента сохранится запись «Cannot parse line: [исходная запись]». Необработанная запись будет добавлена в специальный файл для отфильтрованных вызовов.

  4. Агент LBphone получает данные от парсера и передаёт их в LBcore по протоколу JSON/TCP. Адрес и пароль для подключения задаются в конфигурационном файле LBphone. Например, «server = admin@127.0.0.1:1502».

Замена номеров

Если для агента LBphone настроена замена номеров, система применит к номерам условия, заданные в параметрах сетевого агента.

Определение участников: от кого и кому поступил вызов

АСР LANBilling в учётных записях номера и транки, полученные при обработке CDR. Эти идентификаторы указываются в учётных записях. Для каждой учётной записи, в которой обнаружен идентификатор, система определяет вызов как входящий или исходящий.

  • Если в учётной записи есть номера или транки, соответствующие ANI или trunk_in из CDR-файла, для неё вызов будет определён как исходящий.

  • Если в учётной записи есть номера или транки, соответствующие DNIS или trunk_out из CDR-файла, для неё вызов будет определён как входящий.

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

Участниками вызова могут быть как абоненты, так и операторы. Например, звонок может быть определён как входящий для абонента Алексеева, а как исходящий — для абонента Сергеева и оператора «Связьсеть». При этом с каждой стороны должен быть только один абонент и один оператор. К примеру, вызов не может исходить от двух абонентов: Алексеева и Сергеева.

Определение оператора

Если в АСР LANBilling добавлено несколько операторов, система определяет, кто из них обслуживает этот вызов. В настройках агентов LBphone и VoIP указано, как определять оператора.

  • По признаку — система проверит, какие признаки заданы в учётных записях пользователей с типом «оператор». Как правило, это идентификатор линии или маршрут. Если в сетевом агенте выбран этот вариант, АСР LANBilling распознает оператора на предыдущем этапе, когда будет определять участников.

  • По кодам направлений из каталога телефонных номеров — для каждого оператора в системе должен быть создан каталог с направлениями. Например, если местные звонки обеспечивает один оператор, а междугородние — другой. АСР LANBilling проверит, к каким направлениям относятся номера, и определит, в чьём каталоге содержатся эти направления.

    Чтобы алгоритм работал правильно, коды не должны повторяться в каталогах разных операторов.

Определение тарифа, категории и направления

АСР LANBilling проверяет, какой тариф назначен в учётной записи абонента.

По номерам, которые участвуют в звонке, система определяет направления из тарифа. Направления — это цифровые коды или маски телефонных номеров разных городов, регионов, стран и т. д.

Пример. Звонок поступил с номера +7 851 211-11-11 на номер +7 411 299-99-99. Первому номеру соответствует исходящее направление — «78512 Астрахань», а второму — входящее «74112 Якутск».

После того как система определит направление, станет известна и категория тарифа. В ней заданы условия списаний. Если не удалось определить направление и категорию, система относит вызов к категории Default.

Расчёт списаний

АСР LANBilling рассчитывает списания за звонок, когда информация о нём обработана, известны участники и направление. Стоимость зависит от длительности звонка, а также от параметров тарифа и конкретной категории тарифа, к которой система отнесла вызов.

В учётной записи абонента может быть настроен мультитариф, то есть сочетание сразу нескольких тарифов. В этом случае есть некоторые особенности при учёте и тарификации звонков.

Подробные данные обо всех учтённых вызовах и списаниях можно посмотреть в статистическом отчёте.