Часть префикса и Диапазон префиксов
Редактор узла и узел Часть префикса в тарифе выглядят так:
либо так для Диапазона префиксов:
Отличие двух узлов - в способе задания маски номера.
В Части префикса задается 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 к Челябинску.