В данном разделе приводится описание команд управления телефонной маршрутизацией.
| Маршрутизация телефонных вызовов — это процесс определения интерфейса назначения для конкретного вызова на основании информации об интерфейсе источника вызова, информации о телефонном номере вызывающего и вызываемого абонента, категории вызывающего абонента, времени суток и дне недели. Контекст маршрутизации — совокупность правил маршрутизации уникальная в домене маршрутизации, в рамках которого идет определение интерфейса вызываемого абонента. |
Для администратора системы команды выполняются на уровне кластера в разделе /cluster/storage/<CLUSTER>/routing/.
| <DOMAIN> — имя виртуальной АТС. <STORAGE> — имя кластера с ролью storage. |
Команда предназначена для удаления из системы заданного контекста маршрутизации.
Путь команды:
/cluster/storage/<STORAGE>/routing/delete
Синтаксис:
delete <DOMAIN> <ROUTING_CONTEXT>
Параметры:
<DOMAIN> — имя виртуальной АТС;
<ROUTING_CONTEXT> — контекст маршрутизации, который требуется удалить.
Пример:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/routing/delete biysk.local ctx_to_ewsd Context was deleted [exec at: 06.02.2019 13:36:32, exec time: 172ms, nodes: ds1@ecss1] |
Данной командой производится редактирование контекстов маршрутизации.
При выполнении команды осуществляется запуск редактора, который выбран командой shell-options editor |
Путь команды:
/cluster/storage/<STORAGE>/routing/edit
Синтаксис:
edit <NODE> <ROUTING_CONTEXT>
Параметры:
<NODE> — имя ноды;
<DOMAIN> — имя виртуальной АТС;
<ROUTING_CONTEXT> — название контекста маршрутизации.
Примеры:
Редактирование определенного контекста:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/routing/edit ctx_city_common Importing routing 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] |
Данной командой производится экспорт модулей контекстов маршрутизации в файлы, описывающие эти контексты для их резервного копирования и/или модификации.
| При выполнении команды осуществляется выгрузка информации о требуемом контексте маршрутизации в XML-файл с именем: имя_контекста_метка_текущего_времени.xml по следующему пути: ECSS_DATA_ROOT/routing/ctx/src, по умолчанию это /etc/ecss/routing/ctx/src. Информацию о конкретных путях в системе можно посмотреть по команде /node/nodes-info root_dirs. |
Путь команды:
/cluster/storage/<STORAGE>/routing/export
Синтаксис:
export <NODE> <DOMAIN> <ROUTING_CONTEXT>
Параметры:
<NODE> — имя ноды;
<DOMAIN> — имя виртуальной АТС;
<ROUTING_CONTEXT> — название контекста маршрутизации.
Пример:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/routing/export ecss1 biysk.local ctx_to_ivr Context ctx_to_ivr has been exported [exec at: 06.02.2019 13:40:10, exec time: 192ms, nodes: ds1@ecss1] |
Данной командой производится генерация плана нумерации для всех контекстов маршрутизации в указанном домене (где поле плана нумерации устанавливается в "auto") и сохранение в DS.
Путь команды:
/cluster/storage/<STORAGE>/routing/generate_digitmaps
Синтаксис:
generate_digitmaps <DOMAIN>
Параметры:
<DOMAIN> — имя виртуальной АТС.
Пример:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/routing/generate_digitmaps biysk.local Starting digitmap generation for context: ctx_city_common Success: X. Starting digitmap generation for context: ctx_to_ivr Success: (C101|C102|C103) 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_from_smgreg Success: X. Starting digitmap generation for context: ctx_to_ewsd 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: 06.02.2019 21:32:47, exec time: 661ms, nodes: ds1@ecss1] |
Команда осуществляет импорт ранее сохраненных файлов, описывающих контексты маршрутизации.
| Файлы должны находиться по по пути: ECSS_DATA_ROOT/routing/ctx/src, по умолчанию это /etc/ecss/routing/ctx/src. Информацию о конкретных путях в системе можно посмотреть по команде /node/nodes-info root_dirs. |
Во время импортирования производится проверка на правильность формата файла (проверка корректности XML описания контекста маршрутизации), производится компиляция контекста маршрутизации. Полученный исполняемый модуль встраивается в систему маршрутизации. При совпадении имени контекста маршрутизации с существующим в системе контексте производится замена существующего контекста на импортируемый контекст маршрутизации.
Путь команды:
/cluster/storage/<STORAGE>/routing/import
Синтаксис::
import <NODE> <DOMAIN> <FILE>
Параметры:
<NODE> — имя ноды;
<DOMAIN> — имя виртуальной АТС;
<FILE> — имя файла с контекстом маршрутизации, который необходимо установить;
| При задании имени файла можно использовать маску поиска: "?" — соответствует одному символу; "*" — соответствует любому количеству символов до конца файла, следующей точки или символа "/". {Item,...} — для указания альтернативного файла. |
Пример:
admin@[ds1@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: 06.02.2019 21:35:28, exec time: 2s 178ms, nodes: ds1@ecss1] |
Команда позволяет просмотреть список имен контекстов маршрутизации в данном домене.
Путь команды:
/cluster/storage/<STORAGE>/routing/list
Синтаксис:
list <DOMAIN>
Параметры:
<DOMAIN> — имя виртуальной АТС.
Пример:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/routing/list biysk.local Routing contexts: ctx_city_common ctx_from_ewsd ctx_from_local ctx_from_smgreg ctx_to_ewsd ctx_to_ivr default_routing --------- Total: 7 [exec at: 06.02.2019 21:37:02, exec time: 91ms, nodes: ds1@ecss1] |
Команда позволяет просмотреть содержание файла контекста маршрутизации с именем <ContextName>.
Путь команды:
/cluster/storage/<STORAGE>/routing/show
Синтаксис:
show <DOMAIN> <ROUTING_CONTEXT>
Параметры:
<ROUTING_CONTEXT> — имя контекста маршрутизации.
Пример:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/routing/show biysk.local ctx_to_ivr
Context was imported at 28.01.2019 16:42:29
<?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 ni="private"/>
</actions>
<result>
<ivr script="7991f06f638737c4"/>
</result>
</rule>
<rule name="to_conf">
<conditions>
<cdpn digits="C102"/>
</conditions>
<actions>
<cdpn ni="private" nai="subscriberNumber"/>
</actions>
<result>
<ivr script="dial_to_conference"/>
</result>
</rule>
<rule name="to_conf 1">
<conditions>
<cdpn digits="C103"/>
</conditions>
<actions>
<cdpn nai="subscriberNumber" ni="private"/>
</actions>
<result>
<ivr script="7114f75edb802a62"/>
</result>
</rule>
</context>
[exec at: 06.02.2019 21:38:55, exec time: 91ms, nodes: ds1@ecss1] |
Данной командой осуществляется запуск процесса маршрутизации и вывод результатов для указанного набора входных данных об устанавливаемом телефонном соединении.
Эта команда предоставляет удобный способ проверки корректности описания маршрутизации в системе, четко отображающий шаги маршрутизации конкретного вызова с указанием переходов между контекстами маршрутизации.
Путь команды:
/cluster/storage/<STORAGE>/routing/trace
Синтаксис:
trace [<KEY1> = <VALUE1>[, ... [, <KEY> = <VALUE>]]]
Параметры:
<KEY> — название параметра, принимает следующие значения:
<VALUE> — значение параметра.
Пример:
admin@[ds1@ecss1]:/$ cluster/storage/ds1/routing/trace biysk.local cgpn.digits=240475 cdpn.digits=83852352804 mode=enblock
Traceroute to 83852352804 from 240475(<<"708c60a0c102c2d9">>) at 06.02.2019 21:46:52, 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: "240475"(displayName=undefined, ni=private, nai=subscriberNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240475")
B: "83852352804"(displayName=undefined, ni=private, 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: 3854240475
action: transform calling alias - sorm_digits: "73854240475", sorm_ni: private
result: keep on
2. ctx_from_local / default
A: "3854240475"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240475")
B: "83852352804"(displayName=undefined, ni=private, 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: "3854240475"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240475")
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: "3854240475"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240475")
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: "3854240475"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240475")
B: "3852352804"(displayName=undefined, ni=zone, nai=nationalNumber, inc=false, inni=undefined, npi=undefined, category=undefined)
Options:
sorm_ni_b: intercity
sorm_digits_b: 73852352804
sorm_ni_a: private
sorm_digits_a: 73854240475
A interface info: B interfaces info:
[{[dtmf_source],'rfc+info'}, [[{[dtmf_source],'rfc+info'},
{[site],<<"local">>}, {[site],<<"local">>},
{[terminal_type],smart}, {[terminal_type],smart},
{[zone],<<"default">>}, {[zone],<<"default">>},
{[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">>}},
{[owner],"sip1"}, {[owner],"sip1"},
{[iface],<<"708c60a0c102c2d9">>}, {[iface],<<"smg-4">>},
{[type],sip}, {[type],sip},
{[name],"240475@biysk.local"}, {[name],"smg-4"},
{[group],"loc.gr"}, {[group],"smg.gr"},
{[isActive],true}, {[isActive],true},
{[account],{"...50-52-48-52-55-53","...106-110-100-116-110-45-48-48"}}, {[mode],sipt},
{['routing.context'],ctx_from_local}, {['routing.context'],ctx_from_ewsd},
{[subtype],user}, {[subtype],trunk},
{['media-profile'], {[trunk],"biysk.local.smg.gr.trunk.autoname"},
{media_profile,"biysk.local","default", {['media-profile'],
"Default media profile for current domain.",user, {media_profile,"biysk.local","default",
[{media_profile_codecs,'<other>', "Default media profile for current domain.",user,
[{media_profile_codec,<<"<other>">>,<<"*">>,true,[]}], [{media_profile_codecs,'<other>',
[{[offroad],true}]}, [{media_profile_codec,<<"<other>">>,<<"*">>,true,[]}],
{media_profile_codecs,audio, [{[offroad],true}]},
[{media_profile_codec,<<"G722">>,<<"*">>,true,[]}, {media_profile_codecs,audio,
{media_profile_codec,<<"PCMA">>,<<"*">>,true,[]}, [{media_profile_codec,<<"G722">>,<<"*">>,true,[]},
{media_profile_codec,<<"PCMU">>,<<"*">>,true,[]}, {media_profile_codec,<<"PCMA">>,<<"*">>,true,[]},
{media_profile_codec,<<"G729">>,<<"*">>,true,[]}, {media_profile_codec,<<"PCMU">>,<<"*">>,true,[]},
{media_profile_codec,<<"telephone-event">>,<<"*">>,true,[]}], {media_profile_codec,<<"G729">>,<<"*">>,true,[]},
[{[offroad],true}]}], {media_profile_codec,<<"telephone-event">>,<<"*">>,true,[]}],
[]}}] [{[offroad],true}]}],
A alias info: []}}]]
[{[access_group],all},
{[access_type],
{access_type0,
[{{private,in},true},
{{private,out},true},
{{local,in},true},
{{local,out},true},
{{zone,in},true},
{{zone,out},true},
{{intercity,in},true},
{{intercity,out},true},
{{international,in},true},
{{international,out},true},
{{emergency,in},true},
{{emergency,out},true}],
<<128,144>>}},
{[address],"240475"},
{[alias],{"biysk.local",<<"708c60a0c102c2d9">>}},
{[cdr_group],bsk3},
{[cpt,traces],[]},
{[domain],"biysk.local"},
{[iface],<<"708c60a0c102c2d9">>},
{[isActive],true},
{[language],ru},
{[last_incoming_call_info],
{rtop_last_incoming_call_info,1,"240475",2227340197,{1549,78355,164773}}},
{['media-profile'],
{media_profile,"biysk.local","default",
"Default media profile for current domain.",user,
[{media_profile_codecs,'<other>',
[{media_profile_codec,<<"<other>">>,<<"*">>,true,[]}],
[{[offroad],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],true}]}],
[]}},
{[pin],"1111"},
{[ss],
[{ss_entity,park,2,true,true,undefined,[],[],[]},
{ss_entity,ml,3,true,true,undefined,[],[],
[{ss_property,line_count,undefined,3,undefined,false,[],0},
{ss_property,line_count_out,undefined,-1,undefined,false,[],0}]},
{ss_entity,mcid,2,true,true,undefined,[],[],[]},
{ss_entity,intervention,3,true,true,undefined,[],
[{ss_property,dtmf_detector,undefined,true,undefined,false,[],0}],
[]},
{ss_entity,ctr,5,true,true,undefined,[],
[{ss_property,dtmf_detector,undefined,true,undefined,false,[],0}],
[]},
{ss_entity,conference,9,true,true,undefined,[],[],
[{ss_property,destroy_mode,undefined,by_no_master,undefined,false,[],0},
{ss_property,max_participants,undefined,16,undefined,false,[],0}]},
{ss_entity,cnip,3,true,true,undefined,[],[],[]},
{ss_entity,clip,5,true,true,undefined,[],[],[]},
{ss_entity,chold,8,true,true,undefined,[],
[{ss_property,dtmf_detector,undefined,true,undefined,false,[],0}],
[{ss_property,disable_moh,undefined,false,undefined,false,[],0},
{ss_property,dtmf_sequence_as_flash,undefined,false,undefined,false,
[],0}]},
{ss_entity,cf_sip,7,true,true,undefined,[],
[{ss_property,forwarding_ss,undefined,true,undefined,false,[],0}],
[]},
{ss_entity,cc_agent,2,true,true,undefined,[],[],[]}]},
{[ss,mgm,telephone],enabled},
{[subscriber_portal,login],"240475"},
{[subscriber_portal,password],"9YK2EXgh"},
{[timetables,tt2],
{ecss_timetable,tt2,[{ecss_timetable_filter,'HOLIDAY',{8,0},{17,0}}],[]}},
{[timezone],'UTC+07:00'},
{[uid],<<"708c60a194844a1f">>},
{[original_address],"240475"},
{[original_cdpn_address],"83852352804"}]
[exec at: 06.02.2019 21:46:52, exec time: 92ms, nodes: ds1@ecss1] |