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

В данном разделе представлены команды по управлению контекстами модификации.

Подробнее описание настроек адаптации номеров описано в разделе 3.14.3 Модификаторы и адаптация номеров по входу/выходу с интерфейса или во вкладке ниже.

 Нажмите здесь для раскрытия...

Модификаторы и адаптация номеров по входу/выходу с транка

В некоторых случаях возникает необходимость в модификации номеров (Calling, Called, Original called, Redirecting, Connected, а так же их свойств (ni, nai, apri и т.п.)) при входе с транков или при выходе на транк. Зачастую это вызвано тем, что один и тот же вызов может быть отправлен одним правилом маршрутизации в два или несколько транков (балансировка, резервирование), форматы номеров в которых различаются:

<rule name="to_trunk">
      <result>
        <external>
          <trunk value="Trunk1" />
          <trunk value="Trunk2" />
        </external>
      </result>
    </rule>
CODE

Также возможны случаи, когда необходима модификация при записях в CDR или для СОРМ.

Для реализации данных требований были разработаны соответствующие инструменты:

  • Модификаторы номеров - набор правил модификации номеров, которые применяются при звонке с определенного интерфейса или на определенный интерфейс. Модификатор назначается на интерфейс ECSS-10 (транк, абонент), группу интерфейсов.
  • Адаптация номеров - набор правил модификации номеров для СОРМ, TTS. Технически, это те же модификаторы номеров, но только применимые для адаптации номеров из внутреннего формата к формату СОРМ, TTS.

Модификаторы выставляются на интерфейсах, адаптация - на свойства домена (для СОРМ, TTS) и позволяют изменять номера при входе/выходе с/на интерфейс, а также при передаче номеров в СОРМ, TTS.

Модификаторы  состоят из двух секций - in и out, каждая из которых содержит правила модификации.
Адаптация  состоит из одной секции adaptation, которая содержит в себе правила модификации.
Каждое правило состоит из условия/маски, действия(action) и результата. При совпадении условия над переданными номерами применяются описанные в правиле действия, после чего в зависимости от результата происходит следующее:

  • finish - модификация/адаптация номеров закончена, новые номера возвращаются из модификатора / адаптации ;
  • continue - необходимо повторить модификатор / адаптацию, но с уже измененными в текущем правиле номерами;
  • error - изменение номеров закончено, т.к. переданные номера имеют невалидный формат (в этом случае абоненту, приславшему данные номера пойдет релиз).

Модификаторы  привязаны к интерфейсам на ECSS (как абонентским, так и транковым). Можно выставить  модификаторы  по умолчанию и для всех интерфейсов определенной группы и для всех интерфейсах в домене с помощью свойства:

  • modificator - модификатор номеров по входу/выходу с интерфейса.

Для адаптации номеров для СОРМа используется параметр:

domain/p.city/sorm/info adaptation
┌─────────────────────────────┬──────┬───────────────────────────────┐
│          Property           │Domain│             Value             │
├─────────────────────────────┼──────┼───────────────────────────────┤
│adaptation                   │p.city│to_sorm                        │
└─────────────────────────────┴──────┴───────────────────────────────┘

для адаптации номеров для CDR используется параметр:

domain/p.city/tts/properties/info adaptation
┌─────────────────────────────┬──────┬───────────────────────────────┐
│          Property           │Domain│             Value             │
├─────────────────────────────┼──────┼───────────────────────────────┤
│adaptation                   │p.city│to_tts                         │
└─────────────────────────────┴──────┴───────────────────────────────┘

При использовании модификаторов вызов будет обрабатываться в системе следующим образом:

Описание:
Вызов приходит с абонента / транка на ECSS. На входе в систему (на ecss-core) выполняется модификация номеров по входу (на основе контекста модификации, назначенного на входящий интерфейс). Если контекст модификации не назначен, то номера проходят без модификации. После чего модифицированные номера заходят в сервисы абонента А. После того, как все сервисы абонента А отрабатывают, выполняется маршрутизация вызова.

На указанной схеме предполагается, что маршрутизация закончилась правилом с выходом на N транков, поэтому будет осуществляться перебор маршрутов.
Сперва выбирается Маршрут 1, выполняются сервисы абонента Б, после чего идет модификация номера по выходу на Транк 1,
который закреплен за Маршрут 1. Таким образом в Транк 1 номера пойдут в том формате, который нужен именно Транку 1. Параллельно информация о вызове посылается на TTS, СОРМ, предварительно выполнив адаптацию номеров для TTS, СОРМ соответственно.

Если окажется, что Транк 1 недоступен или переполнен, то будет взят следующий Маршрут 2. И все повторится аналогично, как и с Маршрутом 1. Таким образом, для Транка 2 из Маршрута 2 номера будут такие, какие нужны именно Транку 2 (при этом они могут отличаться от номеров для Транка 1).

Замечания:

  • если маршрутизация вызова не прошла, то информация о вызове уйдет на TTS, СОРМ сразу с уровня сервисов абонента А с адаптацией номеров TTS, СОРМ соответственно;
  • если параметры вызова не соответствуют ни одному условию в контексте модификации или адаптации, то вызов отбивается:

    │      806009978│09.10.2018 11:16:0│released│    240101│    240505│    240101│    240505│n│   0s│tException │12│S│Number's modification stopp│N│ │
    │               │        0         │        │          │          │          │          │ │     │           │7 │ │ed by no rule              │ │ │

Детальное описание формата правил модификации номеров для модификаторов приведено в разделе "3.14.3 Детальное описание контекста модификации номеров".

Детальное описание формата правил модификации номеров для адаптации приведенов разделе "3.14.3 Детальное описание контекста адаптации номеров".

Примеры настройки

Если требуется скопировать часть цифр из cgpn в cdpn, rgn, rnn, cn, ocdpn (аналогично для остальных типов номеров), которые совпали в рамках секции conditions, в секции actions используется следующий синтаксис:

<?xml version="1.0"?>
<!-------- Общий синтаксис -------->
<conditions>
	<[cgpn|cdpn|rgn|rnn] digits="[DIGITS],%"/>
</conditions>
<actions>
	<cgpn digits="...[cgpn|cdpn|rgn|rnn|cn|ocdpn{DIGITS,%}]..."/>
</actions> 
CODE

Использование символа "%" в секции _conditions_ обязательно. При этом, если в секции _actions_, требуется использовать цифры или символы из _conditions_, стоящие перед символом "%", то позиции этих символов нужно указать в DIGITS. Пример:

<?xml version="1.0"?>
<modificators
	xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="ecss_modificators.xsd" name="test_modificators">
	<in>
		<rule name="local_calls">
			<conditions>
				<cgpn digits="42%"/>
			</conditions>
			<actions>
				<cdpn digits="[cgpn{1,2,%}]"/>
			</actions>
			<result>
				<finish/>
			</result>
		</rule>
	</in>
	<out>
		<rule name="local_calls">
			<conditions>
				<cgpn digits="4%"/>
			</conditions>
			<actions>
				<cdpn digits="[cgpn{1,%}]"/>
			</actions>
			<result>
				<finish/>
			</result>
		</rule>
	</out>
</modificators>
CODE

Поля в узлах cdpn, cgpn, rgn, ocdpn, cn, time, date, weekday, tag такие же, как и в контексте маршрутизации. Но для поля digits в полях cdpn, cgpn, rgn, ocdpn, cn будет одно расширение.

Если первый символ - S, то считается что условия/модификация, описанная в данном digits, будет задаваться в формате условий/модификаторов SMG.

Например:

<?xml version="1.0"?>
<modificators
	xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="ecss_routing.xsd" name="city">
	<rule name="ecss10_rule">
		<conditions>
			<rgn digits="111???"/>
		</conditions>
		<actions>
			<rgn digits="810{4,5,6}999"/>
		</actions>
		<result>
			<finish/>
		</result>
	</rule>
	<rule name="smg_rule">
		<conditions>
			<cgpn digits="S111xxx"/>
		</conditions>
		<actions>
			<cgpn digits="S---+810XXX999"/>
		</actions>
		<result>
			<finish/>
		</result>
	</rule>
</modificators>
CODE

В данном примере оба правила одинаково обновляют номер rgn (в случае ECSS10) и rgn (в случае SMG) соответственно.

Пример настройки модификаторов на транке или группе интерфейсов через CLI

Выставление свойства на определенном транке:

## Выставление модификатора на определенном транке

antoniy@[mycelium1@ryabkov]:/$ domain/p.city/iface/user-set pa_sip eltex_office EltexOffice modificator modification_context_1
Property 'modificator' successfully changed to 'modification_context_1' for interfaces:
EltexOffice

## Выставление модификатора для всех интерфейсов в определенной группе

antoniy@[mycelium1@ryabkov]:/$ domain/p.city/iface/group-set -g eltex_office -p modificator modification_context_1
Defined iface resources group property modificator for eltex_office

## Выставление контекста модификатора для интерфейсов в домене

antoniy@[mycelium1@ryabkov]:/$ domain/p.city/iface/group-set -p modificator modification_context_1
Defined iface resources group property modificator for *

Команды по управлению контекстами модификации описаны в разделе /domain/<DOMAIN>/modificators/.

Команды по управлению адаптациями описаны в разделе domain/<DOMAIN>/adaptation/.

Для администратора системы команды выполняются на уровне кластера в разделе /cluster/storage/<CLUSTER>/modificators/.

<DOMAIN> - имя виртуальной АТС.

<STORAGE> - имя кластера с ролью storage.

delete

Команда предназначена для удаления заданного контекста модификации.

Путь команды:

cluster/storage/<STORAGE>/modificators/delete

Синтаксис:

delete <Context>

Параметры:

<Context> - контекста модификации номеров.

Пример:

admin@[ds1@ecss1]:/$ cluster/storage/ds1/modificators/delete biysk.local mod_smg 
Modificator was deleted
[exec at: 06.02.2019 13:27:46, exec time: 166ms, nodes: ds1@ecss1]

edit

Данной командой производится редактирование  контекстов маршрутизации.

При выполнении команды осуществляется запуск редактора, который выбран командой shell-options editor

Путь команды:

/cluster/storage/<STORAGE>/modificators/edit

Синтаксис:

edit <NODE> <ROUTING_CONTEXT>

Параметры:

<NODE> - имя ноды;
<DOMAIN> - имя виртуальной АТС;
<CONTEXT> - название контекста модификации.

Примеры:

Редактирование определенного контекста:

admin@[ds1@ecss1]:/$ cluster/storage/ds1/modificators/edit mod_smg              
Importing context from /tmp/routing-0.4661.0.xml
Success: Context was imported

[exec at: 14.03.2019 13:58:54, exec time: 275ms, nodes: ds1@ecss1]

export

Команда предназначена для экспорта контекста модификации в файловую систему.

Путь команды:

/cluster/storage/<STORAGE>/modificators/export

Синтаксис:

export <Node> <Domain> <Context>

Параметры:

<Node> - имя ноды;
<Domain> - имя виртуальной АТС;
<Context> - контекста модификации.

Пример:

admin@[ds1@ecss1]:/$ cluster/storage/ds1/modificators/export ecss1 biysk.local mod_smg 
Context mod_smg has been exported
[exec at: 06.02.2019 13:04:59, exec time: 242ms, nodes: ds1@ecss1]

import

Команда предназначена для импорта контекста модификации с файловой системы.

Путь команды:

/cluster/storage/<STORAGE>/modificators/import

Синтаксис:

import <Host> <File>

Параметры:

<Host> - имя хоста, где находится сохраненных файл;
<File> - имя файла с контекстом модификации номеров, который необходимо установить;

При задании имени файла можно использовать маску поиска:

"?" - соответствует одному символу;

"*" - соответствует любому количеству символов до конца файла, следующей точки или символа "/". {Item,...} - для указания альтернативного файла.

Пример:

admin@[ds1@ecss1]:/$ cluster/storage/ds1/modificators/import ecss1 biysk.local mod_smg.xml    
importing file mod_smg.xml...
generated 7 rules
1 context has been successfully imported

[exec at: 06.02.2019 13:19:04, exec time: 992ms, nodes: ds1@ecss1]

list

Команда предназначена для просмотра списка контекстов модификации.

Путь команды:

/cluster/storage/<STORAGE>/modificators/list

Синтаксис:
list [<Domain>]

Параметры:

<Domain> - имя виртуальной АТС.

Пример:

admin@[ds1@ecss1]:/$ cluster/storage/ds1/modificators/list biysk.local                                                                                   Modificators:                                                                                                                                                                                                                                                                                                     biysk.local/default_modificators
biysk.local/mod_1
biysk.local/mod_smg
---------
Total: 3

[exec at: 06.02.2019 12:56:29, exec time: 50ms, nodes: ds1@ecss1]

show

Команда предназначена для просмотра контекста модификации.

Путь команды:

/cluster/storage/<STORAGE>/modificators/show

Синтаксис:

show <ContextName>

Параметры:

<ContextName> - имя контекста модификации.

Пример:

admin@[ds1@ecss1]:/$ cluster/storage/ds1/modificators/show biysk.local mod_smg        
Context was imported at 06.02.2019 13:19:03

<?xml version="1.0" encoding="UTF-8"?>
  <modificators xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="ecss_modificators.xsd" name="mod_smg">
    <in>
      <rule name="mod_in_calls">
        <conditions>
          <cgpn digits="240101"/>
          <cdpn digits="S(24046[29])"/>
          <time value="09:00 - 18:00"/>
          <date value="01.01.2019 - 30.12.2019"/>
          <weekday value="1,2,3,4,5"/>
        </conditions>
        <actions>
          <cgpn digits="240101"/>
          <cdpn digits="S240500$"/>
        </actions>
        <result>
          <finish/>
        </result>
      </rule>
      <rule name="other_in_calls">
        <conditions/>
        <actions/>
        <result>
          <finish/>
        </result>
      </rule>
    </in>
    <out>
      <rule name="smg_out">
        <conditions>
          <cn digits="9913699011"/>
          <weekday value="1,2,3,4,5"/>
        </conditions>
        <actions>
          <cn digits="3854415800"/>
        </actions>
        <result>
          <finish/>
        </result>
      </rule>
      <rule name="other_out_calls">
        <conditions/>
        <actions/>
        <result>
          <finish/>
        </result>
      </rule>
    </out>
  </modificators>


[exec at: 06.02.2019 13:19:20, exec time: 108ms, nodes: ds1@ecss1]
XML

trace

Команда предназначена для трассировки модификации номеров.

Путь команды:

/cluster/storage/<STORAGE>/modificators/trace

Синтаксис:

Команда аналогична командам трассировки маршрутизации:
trace [<Key1> = <Value1>[, ... [, <KeyN> = <ValueN>]]]

Параметры:

direction - направление вызова (in - входящий, out - исходящий) (обязательный параметр);
iface - ID интерфейса, для которого применяются модификаторы (взаимоисключающий с iface_name) (опциональный параметр);
iface_name - имя интерфейса, для которого применяются модификаторы (взаимоисключающий с iface) (опциональный параметр);
tag - параметр tag (опциональный параметр);
cgpn - параметры Calling party number (опциональный параметр);
cdpn - параметры Called party number, cdpn.digits (обязательный параметр);
rgn - параметры Redirecting number (опциональный параметр);
rnn - параметры Redirection number (опциональный параметр);
ocdpn - параметры Original called party number (опциональный параметр);
cn - параметры ConnectedNumber (опциональный параметр);
context - имя контекста модификации, (опциональный параметр) (по умолчанию: контекст модификации абонента А для in, абонента Б для out (либо переданного поля iface/iface_name));
date - дата запроса (D.M.Y or Y/M/D), (опциональный параметр) (по умолчанию: сегодня);
time - время запроса (H:M), (опциональный параметр) (по умолчанию: сейчас).

Пример:

admin@[ds1@ecss1]:/$ cluster/storage/ds1/modificators/trace biysk.local cgpn.digits=240101 cdpn.digits=240462 direction=in iface=smg-4    
Traceroute to 240462 from 240101(smg-4) at 06.02.2019 13:24:46
Default context is mod_smg
mod_smg / default
A:  "240101"(displayName=undefined, ni=private, nai=unknown, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240101")
B:  "240462"(displayName=undefined, ni=private, nai=unknown, inc=false, inni=undefined, npi=undefined, category=undefined)
   applying rule: mod_in_calls (CGPN: digits=240101, CDPN: digits=S240469S240462, Time: 01.01.2019 09:00 - 30.12.2019 18:00, Weekdays: Mon, Tue, Wed, Thu, Fri)
   action: transform cgpn digits=240101
   action: transform cdpn digits=240500
------------------------------------------

Modification result: finish
A:  "240101"(displayName=undifined, ni=private, nai=unknown, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240101")
B:  "240500"(displayName=undifined, ni=private, nai=unknown, inc=false, inni=undefined, npi=undefined, category=undefined)

[exec at: 06.02.2019 13:24:46, exec time: 87ms, nodes: ds1@ecss1]