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

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

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

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

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

В некоторых случаях возникает необходимость в модификации номеров (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              │ │ │

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

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

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

Если требуется скопировать часть цифр из 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]