Конфигурационный файл для собой файл в формате XML, который оформлен в соответствии со схемой данных, приведенной в файле ecss_modificators.xsd.
<?xml version="1.0" encoding="UTF-8"?> |
Актуальный файл с описанием схемы данных находится на развернутой системе по пути /usr/lib/ecss/ecss-ds/lib/rm_lib-x.x.x.x/priv/ecss_modificators.xsd.
Каждый XML-файл представляет собой описание одного контекста модификации (группы правил) в рамках виртуальной АТС.
Формат описания контекста модификации:
<modificators>
<in>
<rule>
<conditions></conditions>
<actions></actions>
<result></result>
</rule>
<rule></rule>
</in>
<out>
<rule></rule>
...
<rule></rule>
</out>
</modificators> |
Базовый элемент файла модификации, описывающий параметры контекста модификации.
Структура элемента <modificators> имеет следующий вид:
<modificators name="string" description="string"> </modificators> |
где
Далее в рамках тега <modificators> между закрывающим и открывающим тегом идет набор тегов, описывающих правила модификаторов.
Анализ условий срабатывания правил производится в том порядке, в котором они указаны в файле - сверху вниз.
Примечание: в одном контексте модификаторов не может быть больше 1000 правил. Ограничение введено искусственно, так как количество правил влияет на скорость обработки модификации. |
Элементом <rule> описывается правило модификации.
Структура правила модификации имеет следующий вид:
<rule name="RuleName">
<conditions>
</conditions>
<actions>
</actions>
<result>
</result>
</rule> |
где
В элементе <conditions> описывается набор условий, выполнение которых приводит к выполнению правила.
Формат описания элемента <conditions> имеет следующий вид:
<conditions> <cgpn/> <cdpn/> <rgn/> <rnn/> <ocdpn/> <cn/> <time/> <date/> <weekday/> <tag/> </conditions> |
где
Каждый из указанных выше элементов в рамках <conditions> является опциональным и может быть использован не более одного раза.
Пустой набор критериев говорит об отсутствии ограничений.
Параметры номера вызывающего абонента.
<cgpn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
apri="Apri"
screening="Screening"
ni="Ni"
in_list="List"
city="City"
region="Region"
operator="Operator"/> |
где
city - город абонента полученный из БД реестра плана нумерации РФ
При задании через xml нужно учитывать знаки: точки, тире, пробелы. Для обозначения города используется сокращения:
|
Параметры номера вызываемого абонента.
<cgpn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
category="Category"
ni="Ni"
inni="Inni"
in_list="List"
city="City"
region="Region"
operator="Operator"/> |
где
city - город абонента полученный из БД реестра плана нумерации РФ
При задании через xml нужно учитывать знаки: точки, тире, пробелы. Для обозначения города используется сокращения:
|
Таблица 1 – Категории абонента
| Строковое значение | Цифровой код (ISUP) | Цифровой код (АОН) |
|---|---|---|
| unknownAtThisTime | 0 | |
| operatorFrench | 1 | |
| operatorEngish | 2 | |
| operatorGerman | 3 | |
| operatorRussian | 4 | |
| operatorSpanish | 5 | |
| reserved | 9 | |
| ordinarySubscriber | 10 | 1 - ОАО "Ростелеком" |
| subscriberWithPriority | 11 | 4 - ООО "Эквант" |
| dataCall | 12 | 8 - ОАО "АРКТЕЛ" |
| testCall | 13 | |
| spare | 14 | |
| payphone | 15 | 6 - ЗАО "Компания ТрансТелеКом" |
| category0 | 224 | |
| hotelsSubscriber | 225 | 2 - ОАО "КОМСТАР-ОТС" |
| freeSubscriber | 226 | |
| paidSubscriber | 227 | 7 - ЗАО "Синтерра" |
| localSubscriber | 228 | 3 - ОАО "Вымпелком" (ранее ООО "СЦС Совинтел") |
| localTaksofon | 229 | 9 - ОАО "Межрегиональный Транзит Телеком" |
| autoCallI | 240 | |
| semiautoCallI | 241 | |
| autoCallII | 242 | |
| semiautoCallII | 243 | |
| autoCallIII | 244 | |
| semiautoCallIII | 245 | |
| autoCallIV | 246 | |
| semiautoCallIV | 247 |
Параметры номера, который выполнил переадресацию:
<rgn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
apri="Apri"
ni="Ni"
empty="Empty"
in_list="List"/> |
где
Параметры номера на который выполнили переадресацию:
<rnn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
apri="Apri"
ni="Ni"
empty="Empty"
category="Category"
in_list="List"/> |
где
Параметры оригинального номера на который выполнили вызов:
<ocdpn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
apri="Apri"
ni="Ni"
empty="Empty"
category="Category"
in_list="List"/> |
где
Параметры номера подключенного номера:
<cn digits="Digits"
nai="Nai"
npi="Npi"
apri="Apri"
ni="Ni"
empty="Empty"
in_list="List"/> |
где
Время суток, задается в виде: ЧЧ:ММ - ЧЧ:ММ, где ЧЧ - часы, ММ - минуты:
<time value="TimeMask"/> |
где
Дата, задается в виде: ДД1.ММ1.ГГГГ1 - ДД2.ММ2.ГГГГ2, где ДД - день, ММ - месяц, ГГГГ - год:
<date value="DateMask"/> |
где
День недели, задается в виде ДН1,ДН2,...,ДНX, где ДН - номер дня недели (числа от 1 до 7). Может быть указано от 1 до 7 дней недели.
<weekday value="WeekdayMask"/>
где
Специальный параметр, который можно установить для вызова при модификации.
Параметр действует только на этапе модификации, устанавливается в правиле модификации и в последующем используется для изменения отработки логики модификации:
<tag value="Tag"/> |
где
Формат описания элемента <actions> имеет следующий вид:
<actions> <cgpn/> <cdpn/> <rgn/> <rnn/> <ocdpn/> <cn/> <empty_rgn/> <empty_ocdpn/> <empty_cn/> </actions> |
где
Действия указываются в порядке их выполнения. Все действия являются опциональными.
Операция модификации параметров номера вызывающего абонента:
<cgpn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
apri="Apri"
screening="Screening"
ni="Ni"
display_name="DisplayName"
caller_id="CallerId"
transit_display_name="boolean"/> |
где
Операция модификации параметров номера вызываемого абонента:
<cdpn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
category="Category"
ni="Ni"
inni="Inni"
display_name="DisplayName"/> |
где
Операция модификации параметров номера, который выполнил переадресацию:
<rgn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
apri="Apri"
ni="Ni"
display_name="DisplayName"/> |
где
Операция модификации параметров номера на который выполнили переадресацию:
<rnn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
category="Category"
inni="Inni"
ni="Ni"
display_name="DisplayName"/> |
где
Операция модификации параметров оригинального номера на который выполнили вызов:
<ocdpn digits="Digits"
nai="Nai"
incomplete="boolean"
npi="Npi"
category="Category"
apri="Apri"
ni="Ni"
display_name="DisplayName"/> |
где
Операция модификации параметров подключенного номера:
<cn digits="Digits"
nai="Nai"
npi="Npi"
apri="Apri"
ni="Ni"
empty="Empty"
display_name="DisplayName"
caller_id="CallerId"
transit_display_name="boolean"/> |
где
Удалить из сигнализации параметр ConnectedNumber.
Этот элемент атрибутов не имеет.
Удалить из сигнализации параметр RedirectingNumber.
Этот элемент атрибутов не имеет.
Удалить из сигнализации параметр OriginalNumber.
Этот элемент атрибутов не имеет.
В этом обязательном элементе <result> описывается результат отработки правила модификации:
<result> Result </result> |
где
Завершение модификации.
Модификация прошла успешно, будет возвращен результат модификации номеров в соответствии с правилами.
Синтаксис в упрощенном варианте:
<result> <finish/> </result> |
Ошибка модификации.
Синтаксис:
<result>
<error isup_cause="ISUPCause"
acp_cause="ACPCause"
description="Description"/>
</result> |
где
Продолжить модификацию в текущем контексте данной виртуальной АТС (домена).
Синтаксис:
<result> <continue type="Type" tag="Tag"/> </result> |
гдеПродолжить модификацию в текущем контексте со следующего правила. Если условия выполняются, будет применен набор действий из элемента <actions>.
Синтаксис:
<result> <next tag="Tag"/> </result> |
|
<conditions> <cgpn digit="8%"/> </conditions> |
Условию удовлетворяют номера длинной больше либо равный 1 и начинающиеся с цифры 8.
<conditions> <cgpn digit="345???????"/> </conditions> |
Условию удовлетворяют номера длинной 10 знаков, начинающиеся с 345.
<conditions> <cgpn digit="%"/> </conditions> |
Условию удовлетворяют любые номера.
<conditions> <cdpn digit="???"/> </conditions> |
Условию удовлетворяют любые номера длинной 3 знака.
Далее примеры использования диапазонов и перечислений в масках номеров:
<conditions> <cdpn digit="(1-3)7%"/> </conditions> |
Равносильно трем правилам с масками 17% 27% 37%.
<conditions> <cdpn digit="(2010000-2029999)"/> </conditions> |
Условию будут удовлетворять любые 7ми значные номера указанного диапазона.
<conditions> <cdpn digit="(1,5,7)7%"/> </conditions> |
Равносильно трем правилам с масками 17% 57% 77%.
Пример сравнения общего префикса параметров cgpn и cdpn:
<conditions>
<cdpn digits="????"/>
<cgpn digits="[cdpn{1,2}]??"/>
</conditions> |
Известные ошибки при сравнении параметров:
Сравнивание параметров друг с другом
<conditions>
<cdpn digits="[cgpn{1,2}]??"/>
<cgpn digits="[cdpn{1,2}]??"/>
</conditions> |
Использование параметра которого не существует
<conditions>
<cgpn digits="[cdpn{1,2}]??"/>
</conditions> |
Выход за границы сравниваемого параметра
<conditions>
<cdpn digits="????"/>
<cgpn digits="[cdpn{5,6}]??"/>
</conditions> |
Маска времени задает диапазон значений времени суток.
Формат задания времени "ЧЧ:ММ - ЧЧ:ММ", где ЧЧ - значение часа, ММ - значение минут.
Вместо указания конкретных значений часа или минут можно указать служебный символ "*", который соответствует любому значению.
Примеры масок времени в правилах:
<conditions> <time value="09:00 - 18:00"/> </conditions> |
Условию удовлетворяют вызовы, обслуживаемые в период времени с 09:00 по 18:00 (рабочее время).
<conditions> <time value="*:20 - *:30"/> </conditions> |
Условию удовлетворяют вызовы, обслуживаемые в период времени с 20 по 30 минут каждого часа в сутках.
Маска даты задает диапазон дат.
Формат задания маски даты: "ДД1.ММ1.ГГГГ1 - ДД2.ММ2.ГГГГ2", где ДД - день, ММ - месяц, ГГГГ - год.
Так же возможно применение на любой позиции служебного символа "*", который соответствует любому значению.
Примеры масок даты в правилах:
<conditions> <date value="01.01.* - 31.01.*"/> </conditions> |
Условию удовлетворяют вызовы, обслуживаемые в январе (1 месяц).
<conditions> <date value="10.*.* - 20.*.*"/> </conditions> |
Условию удовлетворяют вызовы, обслуживаемые в период с 10 по 20-е число каждого месяца.
<conditions> <date value="13.10.2019 - 13.10.2019"/> </conditions> |
Условию удовлетворяют вызовы, обслуживаемые 13 октября 2019 года.
Маска дня недели задает набор дней недели.
Формат описания маски дней недели: "ДН1,ДН2,...,ДНX", где ДН - номер дня недели (числа от 1 до 7). Может быть указано от 1 до 7 дней недели.
Работает по григорианским календарю.
Примеры масок дней недели в правилах:
<conditions> <weekday value="1,2,3,4,5"/> </conditions> |
Условию удовлетворяют вызовы, обслуживаемые с понедельника по пятницу (рабочие дни).
<conditions> <weekday value="6,7"/> </conditions> |
Условию удовлетворяют вызовы обслуживаемые в субботу и воскресенье (выходные дни).
В действиях по модификации параметров вызова одним из основных элементов для корректировки является изменение цифр номера абонента А или Б.
Существуют разные подходы к способу описания синтаксиса такой модификации: модификация на шаблонах, регулярные выражения и т.п.
Регулярные выражения являются самым гибким способом, позволяющим делать все возможные преобразования, но у него есть существенные недостатки:
Чтобы избавится от недостатков регулярных выражений, в системе ECSS-10 используется модификация номера на шаблонах.
При модификации номера используется следующая нотация:
Примеры:
Удаление префикса 345 от десятизначного номера:
<conditions>
<cgpn digits="345???????"/>
</conditions>
<actions>
<cgpn digits="{4,5,6,7,8,9,10}"/>
</actions> |
Удаление префикса 345 от номера произвольной длины с префиксом 345:
<conditions>
<cgpn digits="345%"/>
</conditions>
<actions>
<cgpn digits="{%}"/>
</actions> |
Перестановка цифр 2 и 3 в трехзначном номере (сами цифры любые):
<conditions>
<cgpn digits="???"/>
</conditions>
<actions>
<cgpn digits="{1,3,2}"/>
</actions> |
Например, для того, чтобы в CGPN скопировать первые два символа из CDPN, можно написать следующее условие:
<rule name="test">
<conditions>
<cgpn digits="???"/>
<cdpn digits="?????"/>
</conditions>
<actions>
<cgpn digits="[CGPN{1,2}]{abc}"/>
</actions>
</rule> |
Префиксирование произвольного трехзначного номера с префиксом 008:
<conditions>
<cgpn digits="???"/>
</conditions>
<actions>
<cgpn digits="008{1,2,3}"/>
</actions> |
Правило, которое может использоваться для выхода на междугородную станцию. В частности видно, что правило сработает для вызовов, в которых у абонента А семизначный местный номер, номер абонента Б начинается на 8. Задача модификации преобразовать местный номер к междугородному, который понимает междугородка, для этого дописывается префикс и меняется «ni» и «nai». Номер Б не изменяется, его разбором занимается междугородка.
<conditions>
<cgpn digits="???????" ni="local"/>
<cdpn digits="8%"/>
</conditions>
<actions>
<cgpn digits="8383{1,2,3,4,5,6,7}" ni="intercity" nai="nationalNumber"/>
</actions> |
Конвертирование имени абонента во внутреннюю кодировку на модификаторах по входу:
Конвертирование имени абонента на модификаторах по выходу:
При помощи макропеременных
%CITY%|%REGION%|%OPERATOR%
в качестве имени, можно задать город/регион/оператора абонента.
Во всех остальных случаях в качестве имени абонента будет подставлена переданная строка.