/domain/<DOMAIN>/routing/ - команды управления маршрутизацией уровня домена
В данном разделе приводится описание команд управления телефонной маршрутизацией на уровне виртуальной АТС.
Маршрутизация телефонных вызовов - это процесс определения интерфейса назначения для конкретного вызова на основании информации об интерфейсе источника вызова, информации о телефонном номере вызывающего и вызываемого абонента, категории вызывающего абонента, времени суток и дне недели.
Контекст маршрутизации - совокупность правил маршрутизации уникальная в домене маршрутизации, в рамках которого идет определение интерфейса вызываемого абонента.
<DOMAIN> - имя виртуальной АТС.
Созданные контексты маршрутизации, назначаются на iface. Более подробно описано на странице /domain/<DOMAIN>/iface/ - команды управления интерфейсами
delete
Команда предназначена для удаления из системы заданного контекста маршрутизации.
Путь команды:
/domain/<DOMAIN>/routing/delete
Синтаксис:
delete <ROUTING_CONTEXT>
Параметры:
<DOMAIN> - имя виртуальной АТС;
<ROUTING_CONTEXT> - контекст маршрутизации, который требуется удалить.
Пример:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/delete ctx_from_smgreg Context was deleted [exec at: 14.03.2019 13:53:54, exec time: 133ms, nodes: ds1@ecss1]
edit
Данной командой производится редактирование контекстов маршрутизации.
При выполнении команды осуществляется запуск редактора, который выбран командой shell-options editor
Путь команды:
/domain/<DOMAIN>/routing/edit
Синтаксис:
edit <NODE> <ROUTING_CONTEXT>
Параметры:
<NODE> - имя ноды;
<DOMAIN> - имя виртуальной АТС;
<ROUTING_CONTEXT> - название контекста маршрутизации.
Примеры:
Редактирование определенного контекста:
admin@[ds1@ecss1]:/$ domain/biysk.local/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]
export
Данной командой производится экспорт модулей контекстов маршрутизации в файлы, описывающие эти контексты для их резервного копирования и/или модификации.
При выполнении команды осуществляется выгрузка информации о требуемом контексте маршрутизации в XML-файл с именем: имя_домена_имя_контекста_метка_даты-времени-последнего-изменения-маршрутизации.xml по следующему пути: ECSS_DATA_ROOT/routing/ctx/src/<DOMAIN>, по умолчанию это /var/lib/ecss/routing/ctx/src/<DOMAIN>. Информацию о конкретных путях в системе можно посмотреть по команде /node/nodes-info root_dirs.
Путь команды:
/domain/<DOMAIN>/routing/export
Синтаксис:
export <NODE> <ROUTING_CONTEXT>
Параметры:
<NODE> - имя ноды;
<DOMAIN> - имя виртуальной АТС;
<ROUTING_CONTEXT> - название контекста маршрутизации. При выборе "*" экспортируются все контексты
Примеры:
Экспорт определенного контекста:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/export ecss1 ctx_city_common Context ctx_city_common has been exported [exec at: 14.03.2019 13:58:54, exec time: 275ms, nodes: ds1@ecss1]
Экспорт всех контекстов:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/export ecss2 * Context ctx_to_ivr has been exported Context ctx_city_common has been exported Context ctx_from_smgreg has been exported Context ctx_to_ewsd has been exported Context default_routing has been exported Context ctx_from_local has been exported Context ctx_from_ewsd has been exported [exec at: 14.03.2019 14:07:42, exec time: 1s 465ms, nodes: ds1@ecss1,ds1@ecss2]
Содержимое каталога (команда выполняется на сервере из shell):
sasha@ecss2:~$ ls -la /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_* -rw-rw-r-- 1 ssw ssw 4258 мар 14 14:07 /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_ctx_city_common_2019_3_6_11_11_20_568644.xml -rw-rw-r-- 1 ssw ssw 3676 мар 14 14:07 /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_ctx_from_ewsd_2019_2_6_21_35_26_767199.xml -rw-rw-r-- 1 ssw ssw 5371 мар 14 14:07 /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_ctx_from_local_2019_1_28_16_42_30_686647.xml -rw-rw-r-- 1 ssw ssw 3632 мар 14 14:07 /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_ctx_from_smgreg_2019_3_14_13_54_34_513084.xml -rw-rw-r-- 1 ssw ssw 497 мар 14 14:07 /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_ctx_to_ewsd_2019_2_6_13_37_13_599256.xml -rw-rw-r-- 1 ssw ssw 986 мар 14 14:07 /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_ctx_to_ivr_2019_3_4_13_7_59_265923.xml -rw-rw-r-- 1 ssw ssw 417 мар 14 14:07 /var/lib/ecss/routing/ctx/src/biysk.local/biysk_local_default_routing_2019_1_28_16_42_25_272337.xml
generate_digitmaps
Данной командой производится генерация плана нумерации для всех контекстов маршрутизации в указанном домене (где поле плана нумерации устанавливается в "auto") и сохранение в DS.
Путь команды:
/domain/<DOMAIN>/routing/generate_digitmaps
Синтаксис:
generate_digitmaps
Параметры:
<DOMAIN> - имя виртуальной АТС.
Пример:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/generate_digitmaps Starting digitmap generation for context: ctx_to_ivr Success: (C101|C102|C103) Starting digitmap generation for context: ctx_city_common Success: X. 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_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_ewsd Success: X. Generation has been finished ok [exec at: 14.03.2019 14:29:48, exec time: 670ms, nodes: ds1@ecss1]
import
Команда осуществляет импорт ранее сохраненных файлов, описывающих контексты маршрутизации.
Файлы должны находиться по по пути: ECSS_DATA_ROOT/routing/ctx/src/<DOMAIN>, по умолчанию это /var/lib/ecss/routing/ctx/src/<DOMAIN>. Информацию о конкретных путях в системе можно посмотреть по команде /node/nodes-info root_dirs.
Во время импортирования производится проверка на правильность формата файла (проверка корректности XML описания контекста маршрутизации), производится компиляция контекста маршрутизации. Полученный исполняемый модуль встраивается в систему маршрутизации. При совпадении имени контекста маршрутизации с существующим в системе контексте производится замена существующего контекста на импортируемый контекст маршрутизации.
Путь команды:
/domain/<DOMAIN>/routing/import
Синтаксис:
import <NODE> <FILE>
Параметры:
<NODE> - имя ноды;
<DOMAIN> - имя виртуальной АТС;
<FILE> - имя файла с контекстом маршрутизации, который необходимо установить;
При задании имени файла можно использовать маску поиска:
- "?" - соответствует одному символу;
- "*" - соответствует любому количеству символов до конца файла, следующей точки или символа "/". {Item,...} - для указания альтернативного файла.
Пример:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/import ecss1 ctx_from_local.xml importing file ctx_from_local.xml... generated 133 rules 1 context has been successfully imported [exec at: 14.03.2019 14:37:13, exec time: 3s 375ms, nodes: ds1@ecss1]
list
Команда позволяет просмотреть список имен контекстов маршрутизации в данном домене.
Путь команды:
/domain/<DOMAIN>/routing/list
Синтаксис:
list
Параметры:
<DOMAIN> - имя виртуальной АТС.
Пример:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/list 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: 14.03.2019 14:38:19, exec time: 75ms, nodes: ds1@ecss1]
show
Команда позволяет просмотреть содержание файла контекста маршрутизации с именем <ContextName>.
Путь команды:
/domain/<DOMAIN>/routing/show
Синтаксис:
show <ROUTING_CONTEXT>
Параметры:
<ROUTING_CONTEXT> - имя контекста маршрутизации.
Пример:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/show ctx_to_ivr
Context was imported at 04.03.2019 13:07:59
<?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: 14.03.2019 15:13:32, exec time: 125ms, nodes: ds1@ecss1]
trace
Данной командой осуществляется запуск процесса маршрутизации и вывод результатов для указанного набора входных данных об устанавливаемом телефонном соединении.
Эта команда предоставляет удобный способ проверки корректности описания маршрутизации в системе, четко отображающий шаги маршрутизации конкретного вызова с указанием переходов между контекстами маршрутизации.
Путь команды:
/domain/<DOMAIN>/routing/trace
Синтаксис:
trace [<KEY1> = <VALUE1>[, ... [, <KEY> = <VALUE>]]]
Параметры:
<KEY> - название параметра, принимает следующие значения:
- calling. - переопределение свойств алиаса А (calling.access_intercity, calling.access_international, calling.access_local, calling.access_private, calling.access_zone, calling.category, calling.provider), опциональный параметр.
- cause - причина разъединения;
- 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), опциональный параметр;
- context - исходный контекст маршрутизации, опциональный параметр. По умолчанию устанавливается контекст маршрутизации для интерфейса А. Задается в виде имя_домена/контекст_маршрутизации;
- date - дата эмуляции вызова, задается в виде: D.M.Y или Y/M/D, опциональный параметр. По умолчанию устанавливается текущая дата;
- iface - интерфейс вызывающего абонента;
- iface_name - имя интерфейса;
- mode - режим набора по префиксу(опциональный параметр, по умолчанию установлено: overlap), принимает значения:
- enblock - номер абонента передается блоком;
- overlap - номер абонента передается с перекрытием (по одной цифре);
ocdpn. - оригинальный номер абонента(ocdpn.apri, ocdpn.digits, ocdpn.empty, ocdpn.incomplete, ocdpn.nai, ocdpn.ni, rgn.npi);
rgn. - переадресованный номер(rgn.apri, rgn.digits, rgn.empty, rgn.incomplete, rgn.nai, rgn.ni, rgn.npi);
- tag - специальный параметр, который можно установить для вызова при маршрутизации. Параметр действует только на этапе маршрутизации, устанавливается в каком-либо правиле маршрутизации и в последующем используется для изменения отработки логики маршрутизации;
- time - время эмуляции вызова, задается в виде: H:M, опциональный параметр. По умолчанию устанавливается текущее время.
<VALUE> - значение параметра.
Пример:
admin@[ds1@ecss1]:/$ domain/biysk.local/routing/trace cgpn.digits=240470 cdpn.digits=83832741001 mode=enblock Traceroute to 83832741001 from 240470(<<"708c5c15c1d0802d">>) at 14.03.2019 15:55:37, 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: "240470"(displayName=undefined, ni=private, nai=subscriberNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240470") B: "83832741001"(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: 3854240470 action: transform calling alias - sorm_digits: "73854240470", sorm_ni: private result: keep on 2. ctx_from_local / default A: "3854240470"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240470") B: "83832741001"(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: 3832741001, ni: intercity action: transform called alias - sorm_digits: "73832741001", sorm_ni: intercity result: keep on 3. ctx_city_common / default A: "3854240470"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240470") B: "3832741001"(displayName=undefined, ni=intercity, nai=nationalNumber, inc=false, inni=undefined, npi=undefined, category=undefined) applying rule: national (CDPN: nai=nationalNumber) action: change context to ctx_to_ewsd action: transform cdpn ni: intercity result: keep on 4. ctx_to_ewsd / default A: "3854240470"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240470") B: "3832741001"(displayName=undefined, ni=intercity, 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: 3832741001 ------------------------------------------ Routing result: external A: "3854240470"(displayName=undefined, ni=private, nai=nationalNumber, inc=false, npi=isdnTelephony, apri=presentationAllowed, screening=networkProvided, category=ordinarySubscriber(10), caller_id="240470") B: "3832741001"(displayName=undefined, ni=intercity, nai=nationalNumber, inc=false, inni=undefined, npi=undefined, category=undefined) Options: sorm_ni_b: intercity sorm_digits_b: 73832741001 sorm_ni_a: private sorm_digits_a: 73854240470 A interface info: B interfaces info: [{[dtmf_source],'rfc+info'}, [[{[dtmf_source],'rfc+info'}, {[site],<<"local">>}, {[site],<<"local">>}, {[terminal_type],basic}, {[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],<<"708c5c15c1d0802d">>}, {[iface],<<"smg-4">>}, {[type],sip}, {[type],sip}, {[name],"240470@biysk.local"}, {[name],"smg-4"}, {[group],"loc.gr"}, {[group],"smg.gr"}, {[isActive],true}, {[isActive],true}, {[account],{"...50-52-48-52-55-48","...101-71-104-111-104-120-105-101"}}, {[mode],sipt}, {['routing.context'],ctx_from_local}, {['routing.context'],ctx_from_ewsd}, {[subtype],user}, {[subtype],trunk}, {['support-encoding'],utf8}, {[trunk],"biysk.local.smg.gr.trunk.autoname"}, {['media-profile'], {['media-profile'], {media_profile,"biysk.local","default", {media_profile,"biysk.local","default", "Default media profile for current domain.",user, "Default media profile for current domain.",user, [{media_profile_codecs,'<other>', [{media_profile_codecs,'<other>', [{media_profile_codec,<<"<other>">>,<<"*">>,true,[]}], [{media_profile_codec,<<"<other>">>,<<"*">>,true,[]}], [{[offroad],true}]}, [{[offroad],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],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],"240470"}, {[alias],{"biysk.local",<<"708c5c15c1d0802d">>}}, {[cdr_group],bsk3}, {[conversation_timeout],11000}, {[cpt,traces],[]}, {[domain],"biysk.local"}, {[iface],<<"708c5c15c1d0802d">>}, {[isActive],true}, {[language],ru}, {[last_incoming_call_info], {rtop_last_incoming_call_info,1,"240474",3452227353,{1552,374583,315161}}}, {['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}]}], []}}, {[no_answer_timeout],14000}, {[pin],"1111"}, {[ss], [{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],"240470"}, {[subscriber_portal,password],"wvLwm3jZ"}, {[timetables,tt2], {ecss_timetable,tt2,[{ecss_timetable_filter,'HOLIDAY',{8,0},{17,0}}],[]}}, {[timezone],'UTC+07:00'}, {[uid],<<"708c5c165d83f86a">>}, {[original_address],"240470"}, {[original_cdpn_address],"83832741001"}] [exec at: 14.03.2019 15:55:37, exec time: 92ms, nodes: ds1@ecss1]