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

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

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

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

    Также там содержится название парсера, работающего с этим форматом — поле plug-in в таблице pabxes. LBphone пытается загрузить этот парсер.

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

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

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

  2. Плагин обрабатывает CDR и преобразует записи в формат, который используется в LANBilling: параметр_1=значение_1;параметр_2=значение_2;параметр_3=значение_3;…

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

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

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

    Наличие того или иного параметра зависит от формата CDR и особенностей парсера. Примеры парсеров и обработки CDR.

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

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

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

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

Для каждого вызова определяются как абоненты, так и операторы. Например, звонок может быть определён: - как входящий — для абонента Алексеева и оператора «Местный» - как исходящий — для оператора «Вышестоящий».

При этом с каждой стороны может быть только один абонент и один оператор.

Действия системы зависят от того, какой способ определения оператора выбран в параметре «Определять оператора» в настройках агента LBphone:

  • По признаку оператора. Признак — это транк либо номер телефона, присвоенный оператору. Он, как и номера абонентов, передаётся в CDR.

  • По каталогу телефонных номеров. Система сначала определит номера участников вызова, найдёт тарифы в их учётных записях, а по категориям тарифа определит операторов.

Рассмотрим на примере. При обработке CDR-файла получены сведения о вызове:

  • номер А — 555 (с какого номера поступил звонок);
  • номер Б — 777 (на какой номер поступил звонок);
  • исходящий транк — 1;
  • входящий транк — 2;
  • длительность — 5 минут.
Определение абонентов и тарификация вызова для них
  1. LANBilling ищет учётные записи абонентов по номерам А и Б.

    • Для номера А (555) найдена учётная запись с логином alexeev.
    • Для номера Б (777) не найдена учётная запись.
  2. Биллинг определяет для учётной записи alexeev:

    • тариф — «Абонентский»;
    • договор — Contract_10;
    • договор находится в карточке абонента Алексеева.
  3. В тарифе «Абонентский» биллинг ищет маску направления, к которому можно отнести номер 777. Поиск ведётся в исходящих направлениях, потому что совершён исходящий звонок на этот номер.

    Маска направления должна как можно точнее совпадать с номером Б. Например, в тарифе есть два направления: 7* и 77* — более подходящим считается 77*.

  4. Определив направление, биллинг ищет в тарифе «Абонентский» категорию, к которой оно относится.

    Для направления 77* это категория «Междугородние исходящие». В категории задана стоимость звонка — 3 руб/мин.

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

  5. Длительность звонка умножается на стоимость за минуту звонка из настроек категории: 5 × 3 = 15 руб. Эта сумма списывается с договора Contract_10.

Определение операторов и тарификация вызова для них
  1. LANBilling ищет учётные записи операторов по номерам входящего и исходящего транков.

    • Для исходящего транка (1) найдена учётная запись с логином operator_m.
    • Для входящего транка (2) найдена учётная запись с логином operator_v.
  2. Биллинг определяет для операторских учётных записей тарифы, договоры и карточки пользователей.

    • operator_m:

      • тариф — «Межоператорский_М»;
      • договор — Contract_1;
      • договор находится в карточке оператора «Местный».
    • operator_v:

      • тариф — «Межоператорский_В»;
      • договор — Contract_2;
      • договор находится в карточке оператора «Вышестоящий».
  3. В операторских тарифах биллинг ищет маски направлений, к которым можно отнести номера 777 и 555. Затем определяет, к каким категориям относятся эти направления.

    • Для 777 — в исходящих направлениях тарифа «Межоператорский_М», потому что совершён исходящий звонок на этот номер.

      Найдено направление 77* — категория «Междугородние исходящие». В категории задана стоимость звонка — 1,5 руб/мин.

    • Для 555 — во входящих направлениях тарифа «Межоператорский_В», потому что звонок совершён с этого номера.

      Найдено направление 55* — категория «Междугородние входящие». В категории задана стоимость звонка — 0,5 руб/мин.

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

  4. Длительность звонка умножается на стоимость за минуту звонка из настроек категории.

    • 5 × 1,5 = 7,5 руб. Эта сумма списывается с договора Contract_1 (договор оператора «Местный»).
    • 5 × 0,5 = 2,5 руб. Эта сумма списывается с договора Contract_2 (договор оператора «Вышестоящий»).

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

Рассмотрим на примере. При обработке CDR-файла получены сведения о вызове:

  • номер А — 555 (с какого номера поступил звонок);
  • номер Б — 777 (на какой номер поступил звонок);
  • длительность — 5 минут.
  1. LANBilling ищет учётные записи абонентов по номерам А и Б.

    • Для номера А (555) найдена учётная запись с логином alexeev.
    • Для номера Б (777) не найдена учётная запись.
  2. Биллинг определяет для учётной записи alexeev:

    • тариф — «Абонентский»;
    • договор — Contract_10;
    • договор находится в карточке абонента Алексеева.
  3. В тарифе «Абонентский» биллинг ищет маски направлений, к которым можно отнести номера 777 и 555. Это нужно, чтобы:

    • найти категории и протарифицировать вызов для абонента;
    • найти операторов, которым принадлежат эти направления.

    Маски направлений должны как можно точнее совпадать с номерами. Например, в тарифе есть два направления: 7* и 77* — номер 777 будет отнесён к направлению 77*.

    • Для 777 поиск идёт в исходящих направлениях, потому что совершён исходящий звонок на этот номер. Найдено направление 77*.

      • Направление 77* относится к категории «Междугородние». В категории задана стоимость звонка — 3 руб/мин. Длительность звонка умножается на стоимость за минуту звонка из настроек категории: 5 × 3 = 15 руб. Эта сумма списывается с договора Contract_10.
      • Направление 77* входит в каталог оператора «Вышестоящий».
    • Для 555 найдено направление 55*, оно входит в каталог оператора «Местный».

  4. Определив, каким операторам принадлежат направления, биллинг ищет их договоры и учётные записи.

    • Для оператора «Вышестоящий»:

      • договор — Contract_2;
      • учётная запись с логином operator_v;
      • тариф в учётной записи — «Межоператорский_В».
    • Для оператора «Местный»:

      • договор — Contract_1;
      • учётная запись с логином operator_m;
      • тариф в учётной записи — «Межоператорский_М».
  5. В операторских тарифах биллинг ищет маски направлений, к которым можно отнести номера 777 и 555. Затем определяет, к каким категориям относятся эти направления.

    • Для 777 — в исходящих направлениях тарифа «Межоператорский_М», потому что совершён исходящий звонок на этот номер.

      Найдено направление 77* — категория «Междугородние исходящие». В категории задана стоимость звонка — 1,5 руб/мин.

    • Для 555 — во входящих направлениях тарифа «Межоператорский_В», потому что звонок совершён с этого номера.

      Найдено направление 55* — категория «Междугородние входящие». В категории задана стоимость звонка — 0,5 руб/мин.

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

  6. Длительность звонка умножается на стоимость за минуту звонка из настроек категории.

    • 5 × 1,5 = 7,5 руб. Эта сумма списывается с договора Contract_1 (договор оператора «Местный»).
    • 5 × 0,5 = 2,5 руб. Эта сумма списывается с договора Contract_2 (договор оператора «Вышестоящий»).

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

Особенности тарификации при мультитарифах

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

Всего в LANBilling существует два типа списаний.

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

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

Как система определяет направления при мультитарифах

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

Если в учётной записи настроен мультитариф, то LANBilling проверяет направления и в основном тарифе, и в дополнительных. Если направление не найдено ни в одном из них, вызов относится к категории Default в основном тарифе.

Одно направление может быть добавлено к нескольким дополнительным тарифам. В этом случае система отнесёт звонок к направлению, которое добавлено в тариф с наименьшим tar_id.