В разделе описаны методы привязки транковых каналов к виртуальным абонентам. Опишем ситуацию, в рамках которой данный функционал реализован.
Существует SIP - транк, за которым находятся несколько FXO портов для выхода в городскую ТфОП. Некоторые абоненты должны иметь возможность выхода в городскую сеть через любой свободный порт, остальные абоненты должна выходить строго через конкретно заданные (один или несколько) порты. В обратном порядке, когда вызов получен со стороны городской сети с конкретного FXO порта, SSW должен иметь возможность обрабатывать данный вызов с использованием различных стратегий. Более того, необходимо посредством BLF наблюдать состояние FXO, какие порты в транке сейчас заняты.
Поэтому, было решено к транкам, для которых явно заданы каналы, добавить возможность сопоставлять внутренние виртуальные номера домена и каждый из каналов в транке. Тогда вызовы будут обрабатываться следующим образом:
domain/<DOMAIN>/alias/virtual/declare <NUMBER> <ROUTING_CONTEXT> <GROUP>
<DOMAIN> - имя виртуальной АТС (домен);
<NUMBER> - номер абонента;
<ROUTING_CONTEXT> - план маршрутизации, используемый абонентом;
<GROUP> - группа, к которой будет причислен абонент.
domain/<DOMAIN>/ss/enable <NUMBER> cggАктивируем на виртуальном абонента услугу распределения вызова
domain/<DOMAIN>/ss/activate <NUMBER> cgg numbers = <NUM1>, <NUM2>, ...
<DOMAIN> - название виртуальной АТС (домена), для которой выполняются настройки;
<NUMBER> - номер виртуального абонента, для которого выполняются настройки;domain/<DOMAIN>/trunk/sip/declare <ROUTINGCONTEXT> <GROUP> <TRUNKNAME> <IPSET> static <DSTADDR> <DSTPORT> <MODE> <SRCPORT>
<DOMAIN> - имя виртуальной АТС (домен);
<ROUTING_CONTEXT> -план маршрутизации, используемый транком;
<GROUP> - группа, к которой будет причислен транк;
<TRUNK_NAME> - имя создаваемого транка;
<IP_SET> - набор IP-адресов;
<DST_ADDR> - адрес назначения для создаваемого транка;
<DST_PORT> - порт назначения, для создаваемого транка;
<MODE> - режим инкапсуляции ISUP:
<SRC_PORT> - порт приема, для создаваемого транка.
domain/<DOMAIN>/trunk/sip/set <TRUNK_GROUP> <TRUNK> remote-client <CLIENT><DOMAIN> - имя виртуальной АТС (домен);
<TRUNK_GROUP> - группа, к которой причислен транк;
domain/<DOMAIN>/trunk/sip/set <TRUNK_GROUP> <TRUNK> channel-contact-map add <CHANNEL_RANGE> <NUMBER_RANGE> <CONTACT_RANGE>
domain/<DOMAIN>/trunk/services/activate <TRUNK_GROUP> <TRUNK> fxo_trunkПравила маршрутизации, которые позволяют выйти на FXO порт
Рассмотрим пример, в котором виртуальные абоненты будут иметь маску номера 99x. Городские номера иметь маску xxxxxxx Тогда выход на FXO порт закрепленный за данным номером будет выглядеть так:
<rule name="to_fxo_port_with_empty_b_number">
<conditions>
<cdpn digits="99?"/>
</conditions>
<actions>
<cdpn digits=""/>
</actions>
<result>
<local vdn="{1,2,3}"/>
</result>
</rule>
<rule name="to_fxo_port_with_complete_b_number">
<conditions>
<cdpn digits="99?%"/>
<final value="true"/>
</conditions>
<actions>
<cdpn digits="{%}"/>
</actions>
<result>
<local vdn="{1,2,3}"/>
</result>
</rule>
<rule name="to_fxo_trunk">
<conditions>
<cdpn digits="???????"/>
<final value="true"/>
</conditions>
<result>
<external>
<trunk value="FXO_TRUNK"/>
</external>
</result>
</rule> |
Таким образом, если абонент наберет номер виртуального абонента, то он совершит вызов на FXO порт без номера вызываемого абонента за портом FXO, и встречная станция будет коллектить номер. Если же абонента наберет номер виртуального абонента и вместе с ним номер, на которых он хочет позвонить - то вызов уйдет на определенный FXO порт с уже заполненным номером вызываемого абонента. Если же абонент не хочет выбирать определенный FXO порт, а хочет выйти через любой свободный порт - ему достаточно просто набрать 7-мизначный городской номер. В этом случае вызов по маршрутизации уйдет на FXO_TRUNK, там выберется свободный канал (FXO порт), и уже через него отправится вызов.
Пример команд:
domain/test.domain/alias/virtual/declare 99900{1-2} default_routing fxo.users
domain/test.domain/ss/enable 99900{1-2} cgg
domain/test.domain/ss/activate 99900{1-2} cgg numbers = [364000, 364001]
domain/test.domain/trunk/sip/declare default_routing cspg.trunks FXO_1 ipset1 static 192.168.23.173 5060 sip-proxy 5060
domain/test.domain/trunk/sip/set cspg.trunks FXO_1 remote-client coral
domain/test.domain/trunk/sip/set cspg.trunks FXO_1 channel-contact-map add {1-2} 99900{1-2} u00s15p{0-1}
domain/<DOMAIN>/trunk/services/activate cspg.trunks FXO_1 fxo_trunk |
BLF подписки
За счет того, что описанный выше механизм позволяет выполнять привязку внутренних номеров к каналам транка, появляется возможность выполнить BLF подписку на данный номер (внутренний номер), после чего при звонке через определенный канал транка будут идти BLF оповещения по связанному с ним номеру.