/cluster/storage/<STORAGE>/routing/ — команды управления маршрутизацией
В данном разделе приводится описание команд управления телефонной маршрутизацией.
Контекст маршрутизации — совокупность правил маршрутизации уникальная в домене маршрутизации, в рамках которого идет определение интерфейса вызываемого абонента.
Для администратора системы команды выполняются на уровне кластера в разделе /cluster/storage/<CLUSTER>/routing/.
<STORAGE> — имя кластера с ролью storage.
delete
Команда предназначена для удаления из системы заданного контекста маршрутизации.
Путь команды:
/cluster/storage/<STORAGE>/routing/delete
Синтаксис:
delete <DOMAIN> <ROUTING_CONTEXT>
Параметры:
<DOMAIN> — имя виртуальной АТС;
<ROUTING_CONTEXT> — контекст маршрутизации, который требуется удалить.
Пример:
admin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/delete biysk.local ctx_to_ewsd Context was deleted [exec at: 26.02.2021 15:47:39, exec time: 27ms, nodes: ds1@ecss1 v.3.14.7.617]
edit
Данной командой производится редактирование контекстов маршрутизации.
При выполнении команды осуществляется запуск редактора, который выбран командой shell-options editor
Путь команды:
/cluster/storage/<STORAGE>/routing/edit
Синтаксис:
edit <NODE> <ROUTING_CONTEXT>
Параметры:
<NODE> — имя ноды;
<DOMAIN> — имя виртуальной АТС;
<ROUTING_CONTEXT> — название контекста маршрутизации.
Примеры:
Редактирование определенного контекста:
dmin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/edit biysk.local ctx_city_common Importing routing context from /tmp/routing-0.23893.0.xml Success: Context was imported [exec at: 26.02.2021 15:46:20, exec time: 49s 434ms, nodes: ds1@ecss1 v.3.14.7.617]
export
Данной командой производится экспорт модулей контекстов маршрутизации в файлы, описывающие эти контексты для их резервного копирования и/или модификации.
Путь команды:
/cluster/storage/<STORAGE>/routing/export
Синтаксис:
export <NODE> <DOMAIN> <ROUTING_CONTEXT>
Параметры:
<NODE> — имя ноды;
<DOMAIN> — имя виртуальной АТС;
<ROUTING_CONTEXT> — название контекста маршрутизации. Если указан символ *, будут экспортированы все контексты.
Пример:
admin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/export ecss1 biysk.local ctx_to_ivr Context ctx_to_ivr has been exported [exec at: 26.02.2021 15:38:34, exec time: 35ms, nodes: ds1@ecss1 v.3.14.7.617]
generate_digitmaps
Данной командой производится генерация плана нумерации для всех контекстов маршрутизации в указанном домене (где поле плана нумерации устанавливается в "auto") и сохранение в DS.
Путь команды:
/cluster/storage/<STORAGE>/routing/generate_digitmaps
Синтаксис:
generate_digitmaps <DOMAIN>
Параметры:
<DOMAIN> — имя виртуальной АТС.
Пример:
admin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/generate_digitmaps biysk.local Starting digitmap generation for context: ctx_to_ivr Success: (C101|C102|C103) Starting digitmap generation for context: test Success: undefined Starting digitmap generation for context: ctx_to_ewsd Success: X. Starting digitmap generation for context: ctx_from_local Success: (002|004|01|02|03|04|05X|06X|07|09|1XX|2XXXXX|385XXXXXXX|3XXXXX|4XXXXX| 5XXXXX|7XXXXX|810X.|81XX|85XXXXXXXXXXX|8XXXXXXXXXX|9XXXXX|C101|C102|C103) Starting digitmap generation for context: ctx_city_common Success: X. Starting digitmap generation for context: default_routing Success: (*[0-9*][0-9*].#|#[0-9*][0-9*].#|*#[0-9*][0-9*].#|1xx.|10xx.) Starting digitmap generation for context: ctx_from_ewsd Success: X. Generation has been finished ok [exec at: 26.02.2021 11:21:48, exec time: 56ms, nodes: ds1@ecss1 v.3.14.7.617]
import
Команда осуществляет импорт ранее сохраненных файлов, описывающих контексты маршрутизации.
Во время импортирования производится проверка на правильность формата файла (проверка корректности XML описания контекста маршрутизации), производится компиляция контекста маршрутизации. Полученный исполняемый модуль встраивается в систему маршрутизации. При совпадении имени контекста маршрутизации с существующим в системе контексте производится замена существующего контекста на импортируемый контекст маршрутизации.
Путь команды:
/cluster/storage/<STORAGE>/routing/import
Синтаксис::
import <NODE> <DOMAIN> <FILE>
Параметры:
<NODE> — имя ноды;
<DOMAIN> — имя виртуальной АТС;
<FILE> — имя файла с контекстом маршрутизации, который необходимо установить;
"?" — соответствует одному символу;
"*" — соответствует любому количеству символов до конца файла, следующей точки или символа "/". {Item,...} — для указания альтернативного файла.
Пример:
admin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/import ecss1 biysk.local ctx_from_ewsd.xml importing file ctx_from_ewsd.xml... generated 18 rules 1 context has been successfully imported [exec at: 26.02.2021 15:41:51, exec time: 584ms, nodes: ds1@ecss1 v.3.14.7.617]
list
Команда позволяет просмотреть список имен контекстов маршрутизации в данном домене.
Путь команды:
/cluster/storage/<STORAGE>/routing/list
Синтаксис:
list <DOMAIN>
Параметры:
<DOMAIN> — имя виртуальной АТС.
Пример:
dmin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/list biysk.local Routing contexts: ctx_city_common ctx_from_ewsd ctx_from_local ctx_to_ewsd ctx_to_ivr default_routing test --------- Total: 7 [exec at: 26.02.2021 11:24:16, exec time: 17ms, nodes: ds1@ecss1 v.3.14.7.617]
show
Команда позволяет просмотреть содержание файла контекста маршрутизации с именем <ContextName>.
Путь команды:
/cluster/storage/<STORAGE>/routing/show
Синтаксис:
show <DOMAIN> <ROUTING_CONTEXT>
Параметры:
<ROUTING_CONTEXT> — имя контекста маршрутизации.
Пример:
admin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/show biysk.local ctx_to_ivr
Context was imported at 17.02.2021 09:10:47
<?xml version="1.0" encoding="UTF-8"?>
<context xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="ecss_routing.xsd" name="ctx_to_ivr" np="np_240" digitmap="auto">
<rule name="to_cc_ivr">
<conditions>
<cdpn digits="C101"/>
</conditions>
<actions>
<cdpn nai="subscriberNumber" ni="private"/>
<calling category="payphone"/>
</actions>
<result>
<ivr script="064c4e4b460b0d74"/>
</result>
</rule>
<rule name="to_conf">
<conditions>
<cdpn digits="C102"/>
</conditions>
<actions>
<cdpn ni="private" nai="subscriberNumber"/>
</actions>
<result>
<ivr script="enter_number_of_teleconference"/>
</result>
</rule>
<rule name="to_conf_room">
<conditions>
<cdpn digits="C103"/>
</conditions>
<actions>
<cdpn nai="subscriberNumber" ni="private"/>
</actions>
<result>
<ivr script="enter_number_of_teleconference"/>
</result>
</rule>
</context>
[exec at: 26.02.2021 11:25:51, exec time: 36ms, nodes: ds1@ecss1 v.3.14.7.617]
trace
Данной командой осуществляется запуск процесса маршрутизации и вывод результатов для указанного набора входных данных об устанавливаемом телефонном соединении.
Эта команда предоставляет удобный способ проверки корректности описания маршрутизации в системе, четко отображающий шаги маршрутизации конкретного вызова с указанием переходов между контекстами маршрутизации.
Путь команды:
/cluster/storage/<STORAGE>/routing/trace
Синтаксис:
trace [<KEY1> = <VALUE1>[, ... [, <KEY> = <VALUE>]]]
trace <Domain> [<Key1> = <Value1>[, ... [, <KeyN> = <ValueN>]]]
Параметры:
<Domain> -имя виртуальной АТС;
<KEY> — название параметра, принимает следующие значения:
- iface — интерфейс вызывающего абонента, обязательный параметр;
- iface_name — имя интерфейса вызывающего абонента;
- mode — режим набора по префиксу, принимает значения:
- enblock — номер абонента передается блоком;
- overlap — номер абонента передается с перекрытием (по одной цифре);
Опциональный параметр, по умолчанию установлено: overlap.
- cdpn — параметры вызываемого абонента (cdpn.digits, cdpn.incomplete, cdpn.inni, cdpn.nai, cdpn.ni, cdpn.npi), обязательный параметр cdpn.digits;
- cgpn — параметры вызывающего абонента (cgpn.apri, cgpn.digits, cgpn.incomplete, cgpn.nai, cgpn.ni, cgpn.npi, cgpn.screening), опциональный параметр;
- rgn — параметры переадресующего абонента , опциональный параметр;
- ocdpn — первоначально набранный номер, опциональный параметр;
- context — исходный контекст маршрутизации, опциональный параметр. По умолчанию устанавливается контекст маршрутизации для интерфейса А. Задается в виде имя_домена/контекст_маршрутизации.
- calling — переопределение свойств алиаса А (calling.access_intercity, calling.access_international, calling.access_local, calling.access_private, calling.access_zone, calling.category, calling.provider), опциональный параметр.
- cause — код завершения для перемаршрутизации вызова.
- date — дата эмуляции вызова, задается в виде: D.M.Y или Y/M/D, опциональный параметр. По умолчанию устанавливается текущая дата.
- time — время эмуляции вызова, задается в виде: H:M, опциональный параметр. По умолчанию устанавливается текущее время.
<VALUE> — значение параметра.
Пример:
admin@mycelium1@ecss1:/$ cluster/storage/ds1/routing/trace biysk.local iface = 064bc9650b806517 cdpn.digits=83852352804 mode=enblock Traceroute to 83852352804 from 240714(<<"064bc9650b806517">>) at 26.02.2021 14:46:23, final number Default context is ctx_from_local digitmap: (002|004|01|02|03|04|05X|06X|07|09|1XX|2XXXXX|385XXXXXXX|3XXXXX|4XXXXX|5XXXXX|7XXXXX|810X.|81XX|85XXXXXXXXXXX|8XXXXXXXXXX|9XXXXX|C101|C102|C103) Update numbering plan on <<"np_240">> 1. ctx_from_local / default A: "240714"(displayName=undefined, ni=private, nai=subscriberNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240714") B: "83852352804"(displayName=undefined, ni=undefined, nai=unknown, inc=false, inni=undefined, npi=undefined, category=undefined) applying rule: normalize_subscriber_to_national (CGPN: 240___, nai:subscriberNumber) action: transform cgpn nai: nationalNumber, digits: 3854240714 action: transform calling alias - sorm_digits: "73854240714", sorm_ni: private result: keep on 2. ctx_from_local / default A: "3854240714"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240714") B: "83852352804"(displayName=undefined, ni=undefined, nai=unknown, inc=false, inni=undefined, npi=undefined, category=undefined) applying rule: collect_national_subscribers (CDPN: digits=8__________, final: true) action: change context to ctx_city_common action: transform cdpn nai: nationalNumber, digits: 3852352804, ni: intercity action: transform called alias - sorm_digits: "73852352804", sorm_ni: intercity result: keep on 3. ctx_city_common / default A: "3854240714"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240714") B: "3852352804"(displayName=undefined, ni=intercity, nai=nationalNumber, inc=false, inni=undefined, npi=undefined, category=undefined) applying rule: zone (CDPN: digits=385_______, nai:nationalNumber) action: change context to ctx_to_ewsd action: transform cdpn ni: zone result: keep on 4. ctx_to_ewsd / default A: "3854240714"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240714") B: "3852352804"(displayName=undefined, ni=zone, nai=nationalNumber, inc=false, inni=undefined, npi=undefined, category=undefined) applying rule: to_ewsd_sorm (CDPN: digits=%) action: set external trunks [{<<"smg-4">>,1,undefined}] action: transform cdpn digits: 3852352804 ------------------------------------------ Routing result: external A: "3854240714"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240714") B: "3852352804"(displayName=undefined, ni=zone, nai=nationalNumber, inc=false, inni=undefined, npi=undefined, category=undefined) Options: sorm_ni_b: intercity sorm_ni_a: private sorm_digits_b: 73852352804 sorm_digits_a: 73854240714 A interface info: B interfaces info: #{[account] => {"...50-52-48-55-49-52","...116-101-115-116-95-54-48-48"}, [#{['cfc-support'] => true, ['cfc-support'] => true, [gate] => [gate] => {gate_amqp,<<"acp.adapter.init.ex">>,<<"acp.sip.sip1.ipset1.init.rk">>}, {gate_amqp,<<"acp.adapter.init.ex">>,<<"acp.sip.sip1.ipset1.init.rk">>}, [group] => "smg.gr", [group] => "loc.gr", [iface] => <<"smg-4">>, [iface] => <<"064bc9650b806517">>, [isActive] => false, [isActive] => false, ['media-profile'] => ['media-profile'] => {media_profile,"default",user, {media_profile,"default",user, [{media_profile_codecs,'<other>', [{media_profile_codecs,'<other>', [{media_profile_codec,<<"<other>">>,<<"*">>,true,#{}}], [{media_profile_codec,<<"<other>">>,<<"*">>,true,#{}}], #{offroad => false,'rtcp-enabled' => true}}, #{offroad => false,'rtcp-enabled' => true}}, {media_profile_codecs,audio, {media_profile_codecs,audio, [{media_profile_codec,<<"G722">>,<<"*">>,true,#{}}, [{media_profile_codec,<<"G722">>,<<"*">>,true,#{}}, {media_profile_codec,<<"PCMA">>,<<"*">>,true,#{}}, {media_profile_codec,<<"PCMA">>,<<"*">>,true,#{}}, {media_profile_codec,<<"PCMU">>,<<"*">>,true,#{}}, {media_profile_codec,<<"PCMU">>,<<"*">>,true,#{}}, {media_profile_codec,<<"G729">>,<<"*">>,true,#{}}, {media_profile_codec,<<"G729">>,<<"*">>,true,#{}}, {media_profile_codec,<<"telephone-event">>,<<"*">>,true,#{}}], {media_profile_codec,<<"telephone-event">>,<<"*">>,true,#{}}], #{offroad => false,'rtcp-enabled' => true}}], #{offroad => false,'rtcp-enabled' => true}}], #{'dtmf-receive-type' => auto,'dtmf-transmit-type' => transit}}, #{'dtmf-receive-type' => auto,'dtmf-transmit-type' => transit}}, [mode] => sipt, [name] => "240714@biysk.local", [name] => "smg-4", [owner] => "sip1", [owner] => "sip1", ['routing.context'] => ctx_from_local, ['routing.context'] => ctx_from_ewsd, [site] => <<"local">>, [site] => <<"local">>, [subtype] => user, [subtype] => trunk, [terminal_type] => smart, [terminal_type] => smart, [type] => sip, [trunk] => "biysk.local.smg.gr.trunk.autoname", [zone] => <<"default">>} [type] => sip, A alias info: [zone] => <<"default">>}] #{[access_group] => all, [address] => "240714", [alias] => {"biysk.local",<<"064bc9650b806517">>}, [cdr_group] => bsk3, [cpt,traces] => [], [domain] => "biysk.local", [iface] => <<"064bc9650b806517">>, [isActive] => true, [language] => ru, ['media-profile'] => {media_profile,"default",user, [{media_profile_codecs,'<other>', [{media_profile_codec,<<"<other>">>,<<"*">>,true,#{}}], #{offroad => false,'rtcp-enabled' => true}}, {media_profile_codecs,audio, [{media_profile_codec,<<"G722">>,<<"*">>,true,#{}}, {media_profile_codec,<<"PCMA">>,<<"*">>,true,#{}}, {media_profile_codec,<<"PCMU">>,<<"*">>,true,#{}}, {media_profile_codec,<<"G729">>,<<"*">>,true,#{}}, {media_profile_codec,<<"telephone-event">>,<<"*">>,true,#{}}], #{offroad => false,'rtcp-enabled' => true}}], #{'dtmf-receive-type' => auto,'dtmf-transmit-type' => transit}}, [original_address] => "240714", [original_cdpn_address] => "83852352804", [password] => "pda", [pin] => "1111", [ss] => [], [ss,mgm,telephone] => enabled, [subscriber_portal,login] => "240714", [subscriber_portal,password] => "9TOgn2fSDJY8", [teleconference,password] => "53dSgpgdtl1z", [timezone] => 'UTC+07:00', [uid] => <<"064bc96522cfd26d">>} [exec at: 26.02.2021 14:46:23, exec time: 12ms, nodes: ds1@ecss1 v.3.14.7.617]