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

Подробнее описание настроек адаптации номеров описано в разделе 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/.

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

delete

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

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

/domain/<DOMAIN>/adaptation/delete

Синтаксис:

delete <Context>

Параметры:

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

Пример:

admin@[mycelium1@ecss1]:/$ domain/biysk.local/adaptation/delete mod1_adp 
Adaptation was deleted

[exec at: 28.03.2019 13:05:59, exec time: 166ms, nodes: ds1@ecss1]

edit

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

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

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

/domain/<DOMAIN>/adaptation/edit

Синтаксис:

edit <Node> <Context>

Параметры:

<Node> - имя ноды;
<Context> - название контекста адаптации номеров.

Примеры:

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

admin@[ds1@ecss1]:/$ domain/biysk.local/adaptation/edit ctx_city_common              
Importing adaptation context from /tmp/adaptation-0.4661.0.xml
Success: Context was imported

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

export

Команда предназначена для экспорта заданного контекста адаптации номеров. Каталог для экспорта контекста адаптации распологается по пути /var/lib/ecss/adaptations/ctx/src/<DOMAIN>.

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

/domain/<DOMAIN>/adaptation/export

Синтаксис:

export <Node>  <Context>

Параметры:

<Node> - имя ноды;
<Context> - название контекста адаптации номеров.

Пример:

admin@[mycelium1@ecss1]:/$ domain/biysk.local/adaptation/export ecss1 default_adaptation 
Context default_adaptation has been exported

[exec at: 28.03.2019 12:59:27, exec time: 210ms, nodes: ds1@ecss1]

import

Команда предназначена для импорта ранее сохраненных файлов, описывающих контексты адаптации номеров. Каталог для импорта контекста адаптации распологается по пути /var/lib/ecss/adaptations/ctx/src/<DOMAIN>.

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

/domain/<DOMAIN>/adaptation/import

Синтаксис:

import <Host> <File>

Параметры:

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

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

Пример:

admin@[mycelium1@ecss1]:/$ domain/biysk.local/adaptation/import ecss1 adp_1.xml 
importing file adp_1.xml...
generated 3 rules
1 context has been successfully imported

[exec at: 28.03.2019 12:44:20, exec time: 884ms, nodes: ds1@ecss1]

list

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

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

/domain/<DOMAIN>/adaptation/list

Синтаксис:

list

Параметры:

Команда не содержит аргументов.

Пример:

admin@[mycelium1@ecss1]:/$ domain/biysk.local/adaptation/list 
Adaptations:

biysk.local/default_adaptation
biysk.local/mod1_adp
---------
Total: 2

[exec at: 28.03.2019 12:28:55, exec time: 75ms, nodes: ds1@ecss2]

show

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

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

domain/<DOMAIN>/adaptation/show

Синтаксис:

show <ContextName>

Параметры:

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

Пример:

admin@[mycelium1@ecss1]:/$ domain/biysk.local/adaptation/show mod1_adp 
Context was imported at 20.03.2019 21:07:24

<?xml version="1.0" encoding="UTF-8"?>
 <adaptation xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="ecss_modificators.xsd" name="mod1_adp">
 <rule name="local_calls">
 <conditions>
 <cdpn digits="240464"/>
 <time value="09:00 - 18:00"/>
 <date value="01.01.2019 - 30.12.2019"/>
 <weekday value="1,2,3,4,5"/>
 </conditions>
 <actions>
 <cdpn digits="240466"/>
 <cn digits="419145"/>
 </actions>
 <result>
 <finish/>
 </result>
 </rule>
 <rule name="other_calls">
 <conditions/>
 <actions/>
 <result>
 <finish/>
 </result>
 </rule>
 </adaptation>


[exec at: 28.03.2019 11:55:46, exec time: 100ms, nodes: ds1@ecss2]

trace

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

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

domain/<DOMAIN>/adaptation/trace

Синтаксис:

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

Параметры:

type - sorm | tts - тип модификации, СОРМ или ТТС;
cgpn - параметры Calling party number (опциональный параметр);
cdpn - параметры Called party number, cdpn.digits (обязательный параметр);
rgn - параметры Redirecting number (опциональный параметр);
rnn - параметры Redirection number (опциональный параметр);
ocdpn - параметры Original called party number (опциональный параметр);
cn - параметры ConnectedNumber (опциональный параметр);
context - имя контекста модификации, (опциональный параметр) (по умолчанию: контекст адаптации для СОРМ/ТТС);
date - дата запроса (D.M.Y or Y/M/D), (опциональный параметр) (по умолчанию: сегодня);
time - время запроса (H:M), (опциональный параметр) (по умолчанию: сейчас).

Пример:

admin@[mycelium1@ecss1]:/$ domain/biysk.local/adaptation/trace context=mod1_adp cgpn.digits=240101 cdpn.digits=240464 time=14:00 type=tts 
Traceroute to 240464 from 240101 (tts adaptation) at 28.03.2019 14:00:00
Default context is mod1_adp
mod1_adp / default
A: "240101"(displayName=undefined, ni=private, nai=unknown, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id=undefined)
B: "240464"(displayName=undefined, ni=private, nai=unknown, inc=false, inni=undefined, npi=undefined, category=undefined)
 applying rule: local_calls (CDPN: digits=240464, Time: 01.01.2019 09:00 - 30.12.2019 18:00, Weekdays: Mon, Tue, Wed, Thu, Fri)
 action: transform cdpn digits=240466
 action: transform cn digits=419145
------------------------------------------

Adaptation result: finish
A: "240101"(displayName=undefined, ni=private, nai=unknown, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id=undefined)
B: "240466"(displayName=undefined, ni=private, nai=unknown, inc=false, inni=undefined, npi=undefined, category=undefined)
CN: "419145"(displayName=undefined, ni=private, nai=subscriberNumber, npi=isdnTelephony, apri=presentationAllowed)

[exec at: 28.03.2019 13:03:32, exec time: 66ms, nodes: ds1@ecss1]