Стандартные узлы тарифных планов

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

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

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

Услуга

Редактор узла и узел в тарифе выглядят так:

Редактор узла
Узел в тарифе

Узел выступает фильтром по услуге и передает запрос каждому из потомков только, если услуга из тарифного запроса совпадает с указанной в узле.

Мультиуслуга

Узел услуги
Узел услуги

Узел выступает фильтром по услуге и передает запрос каждому из потомков только, если услуга из тарифного запроса совпадает с одной из указанных в узле. Действие узла полностью идентично узлу Услуга за исключением возможности указания нескольких услуг в одном узле. Эта возможность может быть удобна при необходимости указания одинаковой цены на несколько услуг, либо выдачи единой квоты по трафику (IPN, DialUP модули).

Период

Редактор узла и узел в тарифе выглядят так:

Редактор узла
Период услуги

Параметр "время" из тарифного запроса попадает в указанный период. Если одна из дат не указана, то она берется бесконечной (в прошлое или будущее). Узел период с неуказанными обеими датами просматривает дочерние узлы в любом случае.

Основное назначение узла - изменение стоимости в тарифном плане с какой-либо даты. Ниже приведен пример, как изменить стоимость услуги Dial-Up(время) с 1 сентября 2009 года.

Изменение стоимости услуги

В период можно помещать также секции тарифного дерева, регулируя, когда отрабатывает тот или иной блок. В приведенном ниже примере с 1 сентября увеличивается объем предоплаченного трафика в тарифе модуля DialUp.

Секции тарифного дерева

Фильтр по времени

Редактор узла и узел в тарифе выглядят так:

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

Для редактирования условия нужно вызвать редактор, сделав двойной клик по строке условия в редакторе, либо нажав кнопку Добавить. Набор масок дней, часов, дней недели и месяцев, перечисленных в условии, должен выполнятся весь, т.е. чтобы сработало условие, нужно совпадение всех масок. При вводе масок условия часы могут принимать значения от 0 до 23, дни недели от 1 до 7, дни месяца от 1 до 31, месяцы от 1 - 12. При вводе можно использовать символы "-" ( интервал со входящими концами ) и "," ( перечисление ). Для удобства ввода можно использовать записи * (будут выведены все значения), а также */n (n - целое число, все что делится на n, например */2 - 0, 2, 4, 6…​ ), либо *\n ( n - целое число, все что не делится на n).

Узел выступает фильтром тарифного запроса, запрос пропускается к обработке в узлах-потомках только, если параметр "время" в запросе совпадает хотя бы с одним набором условий узла. Фильтр позволяет определять в тарифах различную стоимость услуги по времени суток, дням недели, месяца. Пустой набор ограничений означает отсутствие фильтра по времени. Узел пропускает в себя запрос, только если перед ним в том же узле-предке не стоял другой фильтр по времени, либо Фильтр по типу времени, уже пропустивший запрос в себя (принявший запрос). Данный принцип позволяет делать наборы ограничений по умолчанию. Например, так можно определить стоимость в будние дни и праздники для модуля DialUp.

Фильтьр по типу времени

В приведенном выше примере во втором наборе ограничений не указаны явно дни с 1 по 5, узел обрабатывает запросы, не попавшие в первый набор ограничений. Для данного случая метод не дает ощутимой выгоды, однако при необходимости указывать многочисленные праздничные дни он удобен. Обратите внимание, что следующий пример уже не будет работать аналогичным образом. Т.к. у узлов разный предок.

Фильтьр по типу времени

Во втором примере все запросы будет принимать второй пустой набор ограничений. Т.к. у узлов разный узел-предок. Данную ситуацию (желание задать цены на будние дни с периодом) корректно было бы разрешить так:

Фильтьр по типу времени

Фильтр по типу времени

Редактор узла и узел в тарифе выглядят так:

Редактор узла
Тип времени

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

Тип времени

Либо так:

Тип времени

При этом в типе времени Рабочие дни не указываются никакие маски.

Параметры тарификации

Редактор узла и узел в тарифе выглядят так:

Редактор узла
Параметры тарификации

Узел передает в ответной части тарифного запроса параметры тарификации:

максимальную длительность бесплатного звонка в секундах;

количество десятичных знаков после запятой в стоимость звонка (не имеет смысл устанавливать более, чем разрядность поля таблицы БД);

правила откругления длительности звонка.

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

Звонки до 10 секунд включительно считаются нулевой длительности. Стоимость звонка округляется до пятого знака, т.е., например 4.32344.

Параметр Учитывать округление при автор. действует только для Voip-модуля и позволяет выдавать клиенту длительность разговора с учетом округления длительности в большую сторону. Т.е., если сессии от 20 до 120 секунд округляются кратно 20, а человеку хватает денег на 83 секунды, то после авторизации RADIUS вышлет 80 секунд разрешенного времени.

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

Использовать карту зон

Редактор узла и узел в тарифе выглядят так:

Редактор узла
Выбор карты зон

Узел получает вызываемый номер из тарифного запроса, определяет по нему направление и зону и помещает их в тарифный запрос.

Зона

Редактор узла и узел в тарифе выглядят так:

Редактор узла
Выбор зоны

Узел пропускает запрос внутрь только если установленная в запросе зона равна указанной в узле. Поле ввода текста в правой части и кнопка "+" позволяют быстро добавить отсутствующую зону в справочник. В запрос зона устанавливается узлом Использовать карту зон.

Часть префикса и Диапазон префиксов

Редактор узла и узел Часть префикса в тарифе выглядят так:

Редактор узла
Часть префикса

Либо так для Диапазона префиксов:

Редактор узла
Диапазон префиксов

Отличие двух узлов - в способе задания маски номера.

В Части префикса задается REGEXP-выражение, которое должно совпасть с начальной частью "остатка" номера.

В Диапазоне префиксов задается выражение вида <общий префикс>|<диапазоны>. Например в указанный выше диапазон можно переписать в виде: 34|72-73, где 34 будет являться общим префиксом. Общий префикс может быть и не указан. Если он указан, то как бы подразумевается для всех диапазонов после него. Начальная часть остатка номеров должна попасть в один из указанных диапазонов. При этом все диапазоны префиксов в узле должны быть одной длины.

Оба узела работают с параметром "номер", переданным в тарифном запросе. При этом разбор номера идет по частям, начиная с начальных символов. Каждый узел, в который попадает телефон, сравнивает начало номера с шаблоном в узле.

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

У каждого узла может быть установлено направление и зона. Если в совпавшем узле указано направление, либо зона, они подставляются в ответ тарифного запроса.

Рассмотрим для примера, как происходит разбор телефона 73472555555 в указанном ниже тарифе. В нем используется комбинация этих двух узлов, т.к. они являются взаимозаменяемыми.

Пример разбора телефона
  1. Ветка 7 Россия - начало совпадает с 7 ⇒ 7 отбрасывается и далее передается 3472555555;

  2. Аналогично ветки 3 и 4;

  3. В ветке 72 определяется направление звонка;

  4. В ветке Минута исходящего - цена минуты разговора.

Ветки 3 и 4 просто прописывают данные в проходящий через них тарифный запрос.

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

Таким образом достигается высокая эффективность обработки запросов.

Рассмотрим еще один пример использования узлов. В приведенном выше примере префиксы 73472-73474 и 73476 будут отнесены к Уфе, а префиксы 7351-7353 к Челябинску.

Стоимость минуты

Редактор узла и узел Стоимость минуты в дереве выглядят так:

Редактор узла
Стоимость минуты

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

Множитель цены

Редактор узла и узел Множитель цены в дереве выглядят так:

Редактор узла
Множитель цены

Узел используется для умножения цены, установленной узлом Стоимость минуты на определенный коэффициент. Например, используя данный узел, можно быстро создать тариф с НДС для физ. лиц, расширив базовый тариф и добавив в конце дерева узел с умножением.

Дерево тарифа с множителем цены

Элемент каталога

Редактор узла и его внешний вид в дереве представлен на рисунке ниже.

Редактор узла и его вид в дереве

Используется для группировки различных узлов по определенным критериям. Суть узла аналогична понятию каталог в файловой системе.