/cluster/storage/<STORAGE>/adaptation/ - команды управления адаптацией номеров
В данном разделе описываются команды по управлению адаптациями номеров.
Подробнее описание настроек адаптации номеров описано в разделе Модификаторы и адаптация номеров по входу/выходу с интерфейса или во вкладке ниже.
Модификаторы и адаптация номеров по входу/выходу с транка
В некоторых случаях возникает необходимость в модификации номеров (Calling, Called, Original called, Redirecting, Connected, а так же их свойств (ni, nai, apri и т.п.)) при входе с транков или при выходе на транк. Зачастую это вызвано тем, что один и тот же вызов может быть отправлен одним правилом маршрутизации в два или несколько транков (балансировка, резервирование), форматы номеров в которых различаются:
<rule name="to_trunk">
<result>
<external>
<trunk value="Trunk1" />
<trunk value="Trunk2" />
</external>
</result>
</rule>
Также возможны случаи, когда необходима модификация при записях в 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>
Использование символа "%" в секции _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>
Поля в узлах 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>
В данном примере оба правила одинаково обновляют номер 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>/adaptation/
<DOMAIN> - имя виртуальной АТС.
<STORAGE> - имя кластера с ролью storage.
delete
Команда предназначена для удаления из системы заданного контекста адаптации номеров.
Путь команды:
/cluster/storage/<STORAGE>/adaptation/delete
Синтаксис:
delete <Context>
Параметры:
<Context> -имя контекста адаптации номеров.
Пример:
admin@[core1@ecss1]:/$ cluster/storage/ds1/adaptation/delete biysk.local adp_sorm Adaptation was deleted [exec at: 04.02.2019 13:30:30, exec time: 339ms, nodes: ds1@ecss1]
edit
Данной командой производится редактирование контекстов адаптации.
При выполнении команды осуществляется запуск редактора, который выбран командой shell-options editor
Путь команды:
/cluster/storage/<STORAGE>/adaptation/edit
Синтаксис:
edit <NODE> <CONTEXT>
Параметры:
<NODE> - имя ноды;
<DOMAIN> - имя виртуальной АТС;
<CONTEXT> - название контекста адаптации.
Примеры:
Редактирование определенного контекста:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/adaptation/edit adp_sorm Importing adaptation 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
Команда предназначена для экспорта заданного контекста адаптации номеров. Каталог для экспорта контекста адаптации распологается по пути /var/lib/ecss/adaptations/ctx/src/<DOMAIN>.
Путь команды:
/cluster/storage/<STORAGE>/adaptation/export
Синтаксис:
export <Node> <Domain> <Context>
Параметры:
<Node> - имя ноды;
<Domain> - имя виртуальной АТС;
<Context> - контекста адаптации номеров.
Пример:
admin@[core1@ecss1]:/$ cluster/storage/ds1/adaptation/export ecss1 biysk.local adp_sorm Context adp_sorm has been exported [exec at: 04.02.2019 13:18:30, exec time: 242ms, nodes: ds1@ecss1,ds1@ecss2]
import
Команда предназначена для импорта ранее сохраненных файлов, описывающих контексты адаптации номеров. Каталог для импорта контекста адаптации распологается по пути /var/lib/ecss/adaptations/ctx/src/<DOMAIN>.
Путь команды:
/cluster/storage/<STORAGE>/adaptation/import
Синтаксис:
import <Host> <File>
Параметры:
<Host> - имя хоста, где находится сохраненных файл;
<File> - имя файла с контекстом адаптации номеров, который необходимо установить;
При задании имени файла можно использовать маску поиска:
"?" - соответствует одному символу;
"*" - соответствует любому количеству символов до конца файла, следующей точки или символа "/". {Item,...} - для указания альтернативного файла.
Пример:
admin@[core1@ecss1]:/$ cluster/storage/ds1/adaptation/import ecss1 biysk.local adp_1.xml importing file adp_1.xml... generated 3 rules 1 context has been successfully imported [exec at: 04.02.2019 13:05:13, exec time: 767ms, nodes: ds1@ecss1]
list
Команда предназначена для просмотра списка модификаторов в домене.
Путь команды:
/cluster/storage/<STORAGE>/adaptation/list
Синтаксис:
list [<Domain>]
Параметры:
<Domain> - имя виртуальной АТС.
Пример:
admin@[core1@ecss1]:/$ cluster/storage/ds1/adaptation/list Adaptations: biysk.local/adp_sorm biysk.local/default_adaptation biysk.local/mod1_adp front.office/default_adaptation --------- Total: 4 [exec at: 04.02.2019 13:28:57, exec time: 88ms, nodes: ds1@ecss2]
show
Команда предназначена для просмотра контекста адаптации номеров в текстовом виде.
Путь команды:
/cluster/storage/<STORAGE>/adaptation/show
Синтаксис:
show <ContextName>
Параметры:
<ContextName> - имя контекста адаптации.
Пример:
admin@[core1@ecss1]:/$ cluster/storage/ds1/adaptation/show biysk.local mod1_adp Context was imported at 04.02.2019 13:38:57 <?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: 04.02.2019 13:39:17, exec time: 149ms, nodes: ds1@ecss2]
trace
Данной командой осуществляется запуск процесса адаптации номеров для СОРМ, ТТС и вывод результатов для указанного набора входных данных.
Эта команда предоставляет удобный способ проверки корректности описания адаптации номеров в системе, четко отображающий шаги адаптации конкретного номера.
Путь команды:
/cluster/storage/<STORAGE>/adaptation/trace
Синтаксис:
Команды уровня виртуальной АТС и кластера аналогичны командам трассировки маршрутизации:
trace [<Key1> = <Value1>[, ... [, <KeyN> = <ValueN>]]]
Параметры:
type - sorm | tts - тип модификации, СОРМ или ТТС;
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 - имя контекста модификации, (опциональный параметр) (по умолчанию: контекст адаптации для СОРМ/ТТС);
date - дата запроса (D.M.Y or Y/M/D), (опциональный параметр) (по умолчанию: сегодня);
time - время запроса (H:M), (опциональный параметр) (по умолчанию: сейчас).
Пример:
admin@[core1@ecss1]:/$ cluster/storage/ds1/adaptation/trace biysk.local cgpn.digits=240101 cdpn.digits=240464 time=14:00 type=tts Traceroute to 240464 from 240101 (tts adaptation) at 04.02.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: 04.02.2019 13:42:11, exec time: 75ms, nodes: ds1@ecss2]