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

Маршрутизация телефонных вызовов — это процесс определения интерфейса назначения для конкретного вызова на основании информации об интерфейсе источника вызова, информации о телефонном номере вызывающего и вызываемого абонента, категории вызывающего абонента, времени суток и дне недели.
Контекст маршрутизации — совокупность правил маршрутизации уникальная в домене маршрутизации, в рамках которого идет определение интерфейса вызываемого абонента.

Для администратора системы команды выполняются на уровне кластера в разделе /cluster/storage/<CLUSTER>/routing/.

<DOMAIN> — имя виртуальной АТС.
<STORAGE> — имя кластера с ролью storage.

delete

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

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

/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]

edit

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

При выполнении команды осуществляется запуск редактора, который выбран командой 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]

export

Данной командой производится экспорт модулей контекстов маршрутизации в файлы, описывающие эти контексты для их резервного копирования и/или модификации.

При выполнении команды осуществляется выгрузка информации о требуемом контексте маршрутизации в 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]

generate_digitmaps

Данной командой производится генерация плана нумерации для всех контекстов маршрутизации в указанном домене (где поле плана нумерации устанавливается в "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]

import

Команда осуществляет импорт ранее сохраненных файлов, описывающих контексты маршрутизации.

Файлы должны находиться по по пути: 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]

list

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

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

/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]

show

Команда позволяет просмотреть содержание файла контекста маршрутизации с именем <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]
XML

trace

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

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

/cluster/storage/<STORAGE>/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 — интерфейс вызывающего абонента, обязательный параметр.
  • mode — режим набора по префиксу, принимает значения:
    • enblock — номер абонента передается блоком;
    • overlap — номер абонента передается с перекрытием (по одной цифре);
      Опциональный параметр, по умолчанию установлено: overlap.
  • tag — специальный параметр, который можно установить для вызова при маршрутизации. Параметр действует только на этапе маршрутизации, устанавливается в каком-либо правиле маршрутизации и в последующем используется для изменения отработки логики маршрутизации;
  • time — время эмуляции вызова, задается в виде: H:M, опциональный параметр. По умолчанию устанавливается текущее время.

<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]