Управление SIP-транками
Понятия, определения
- Транк - представляет собой совокупность ресурсов для обслуживания телефонных вызовов в заданном направлении (см. Транки и бриджи).
- SIP-Транк - представляет собой направление, работающее по протоколу SIP/SIP-Т/SIP-I.
- Динамический транк - транк с обязательной поддержкой регистрации. Для совершения вызова по динамическому транку взаимодействующий шлюз должен быть зарегистрирован по данному транку в системе ECSS-10.
Типы динамической регистрации:
- "Операторский" тип регистрации подразумевает регистрацию с использованием одного аккаунта. При запросе данных аутентификации для всех вызовов используется один и тот же логин и пароль.
- "Абонентский" тип регистрации подразумевает регистрацию с использованием разных аккаунтов. Для каждого абонента встречного шлюза должен быть заведен отдельный аккаунт (логин и пароль).
В системе ECSS-10 реализован "операторский" тип регистрации. Регистрация выполняется с одним аккаунтом.
Если SIP-транк не зарегистрирован или истек тайм-аут регистрации, входящие и исходящие вызовы не будут совершаться через данный SIP-транк.
Вызовы выполняются под разными номерами. Для аутентификации используется единый логин и пароль.
Порядок настройки SIP-транков
Настройка SIP-транка состоит из двух этапов:
1. Подготовка контекста маршрутизации.
Для подготовки контекстов маршрутизации необходимо:
- создать новый контекст маршрутизации или добавить правило маршрутизации в существующий контекст;
- импортировать контекст маршрутизации в базу данных ECSS-10.
Процесс создания и настройки контекстов маршрутизации описан в разделе Виртуальная АТС. Маршрутизация телефонных вызовов.
2. Декларирование и настройка SIP-транка.
Порядок настройки SIP-транка:
- декларирование SIP-транка;
- настройка дополнительных параметров SIP-транка (опционально);
- проверка активности SIP-транка.
Настройка SIP-транков через CLI
Создание SIP-транков
Перед созданием SIP-транка необходимо выполнение следующих условий:
- создана виртуальная АТС;
- созданы и проимпортированы контексты маршрутизации.
Для создания SIP-транка используется команда:
/domain/<DOMAIN>/trunk/sip/declare <ROUTING_CONTEXT> <GROUP> <TRUNK_INTERFACE> <IPSET> [static <DEST_HOST> <DEST_PORT> <MODE> <LISTEN_PORT> | dynamic <LOGIN> <PASSWORD>]
где
<DOMAIN> - имя виртуальной АТС;
<ROUTING_CONTEXT> - название существующего контекста маршрутизации;
<GROUP> - название группы интерфейсов (может быть задана существующая или новая группа);
<TRUNK_INTERFACE> - имя системного интерфейса, описывающего данное направление. Имя интерфейса является внутрисистемным идентификатором, участвующем в маршрутизации, отображении статистики и другое;
<IPSET> - имя группы локальных адресов;
static - декларация статического транка;
dynamic - декларация динамического транка (с регистрацией);
- При декларации динамического транка операторская регистрация должна выполнятся для пользователя <TRUNK_INTERFACE>@<GROUP>.
- Параметры <DEST_HOST>, <DEST_PORT>, <MODE>, <LISTEN_PORT> не задаются.
- Режим для динамических транков устанавливается sip-proxy, регистрация для транков с инкапсуляцией ISUP использоваться не должна.
<DEST_HOST> - IP-адрес или доменное имя встречного устройства для взаимодействия;
<DEST_PORT> - транспортный порт встречного устройства для взаимодействия с ним по протоколу SIP;
<MODE> - режим работы транка:
- sip-proxy - на направлении работает протокол SIP;
- sip-t - на направлении работает протокол SIP-T (используется инкапсуляция ISUP);
- sip-i - на направлении работает протокол SIP-I (используется инкапсуляция ISUP);
- sip-q - на направлении работает протокол SIP-Q(используется для инкапсуляции ISUP)
<LISTEN_PORT> - транспортный порт, используемый SIP-адаптером для приема сигнализации. SIP-адаптер может использовать несколько портов для приема сигнализации, что позволяет организовать несколько транков с одним и тем же устройством. Как минимум один локальный (слушающий) порт должен быть назначен в обязательном порядке.
<LOGIN> - логин;
<PASSWORD> - пароль.
В режиме sip-proxy осуществляется работа по протоколу SIP, базовая рекомендация RFC 3261.
В режимах sip-t, sip-i в тело сообщений протокола SIP инкапсулируются сообщения ISUP. Работа протокола SIP-I описана в рекомендации Q.1912.5, протокола SIP-T в RFC 3372, а протокола SIP-Q в ECMA-143, ECMA-165.
При создании SIP-транка производится проверка имени интерфейса (в системе запрещено создавать транки с одинаковыми именами в пределах одной виртуальной АТС) и связки <dest_host>:<dest_port>:<ip_set>:<listen_port>. Если имя интерфейса SIP-транка совпадет с существующим именем, системой будет выдано предупреждение "trunk already exists". Декларация интерфейса в этом случае не будет выполнена.
При успешном создании SIP-транка имеется возможность сразу (в рамках одной команды) проверить доступность указанного направления посредством передачи запроса OPTIONS. Для этого используется ключ --check
, в отличие от версии 2.14, где попытка такой проверки была безусловной. Результат проверки доступности:
- {final,"is accessible"} - направление доступно, если встречное оборудование отвечает на запрос OPTIONS;
- {final,"timeout"} - направление недоступно, если встречное оборудование не отвечает на запрос OPTIONS.
Для удаления SIP-транка или всех транков одной группы используется команда:
/domain/<DOMAIN>/trunk/sip/remove <GROUP> <TRUNK_INTERFACE> [--force]
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков, логическая группировка транков в определенной виртуальной АТС;
<TRUNK_INTERFACE> - имя SIP-транка;
--force - дополнительный параметр (ключ), предназначен для безусловного удаления группы транков или транка.
Настройка параметров SIP-транка
Для настройки параметров SIP-транка используется команда:
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK_INTERFACE> <PARAMETER> <VALUE>
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков, логическая группировка транков внутри виртуальной АТС;
<TRUNK_INTERFACE> - имя SIP-транка;
<PARAMETER> - настраиваемый параметр, список параметров приведен в Приложении Б. Набор параметров интерфейса SIP.
<VALUE> - значение параметра.
Для просмотра информации о SIP-транке используется команда:
/domain/<DOMAIN>/trunk/sip/info <GROUP> [<TRUNK_INTERFACE>]
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - название существующей группы интерфейсов, символ "*" используется для указания всех групп транков;
<TRUNK_INTERFACE> - логическое имя транка, символ "*" используется для указания всех интерфейсов группы.
Для просмотра свойств группы имя интерфейса транка (символ "*") не указывается.
Проверка состояния SIP-транка
Проверка доступности транка выполняется передачей запроса OPTIONS. Тест может выполняться для определенного транка или для всех транков группы.
Для проверки состояния SIP-транка используется команда:
/domain/<DOMAIN>/trunk/sip/check <GROUP> [<TRUNK_INTERFACE>] [timerF = <TIMERF>]
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - название существующей группы интерфейсов. Символ "*" используется для указания всех групп транков;
<TRUNK_INTERFACE> - логическое имя транка. Символ "*" используется для указания всех интерфейсов группы.
Если ответ не получен (направление на данный транк не доступно), то выводится результат "timeout".
- Если удаленный клиент не поддерживает запросы OPTIONS, и при этом не отвечает ответом 405, то результат будет таким же, хотя реально направление доступно для вызовов.
- В таком случае периодический контроль доступности должен быть отключен (set options_control 0).
<TIMERF> - тайм-аут ожидания ответа, в пределах которого отправляются повторные запросы, если удаленная сторона не отвечает. Задается в миллисекундах. Для выключения контроля установите значение тайм-аута - 0.
Если встречное оборудование доступно, то результатом выполнения команды будет значение "Accessible", если недоступно - "Unaccessible".
Динамический SIP-транк
Для направлений, на которых необходима регистрация встречных SIP-транков в системе ECSS-10, создаются динамические SIP-транки.
Создание, удаление динамического транка
Создание динамического SIP-транка
Перед созданием динамического SIP-транка необходимо выполнение следующих условий:
- создана виртуальная АТС;
- созданы и проимпортированы контексты маршрутизации.
Для создания динамического SIP-транка используется команда:
/domain/<DOMAIN>/trunk/sip/declare <ROUTING_CONTEXT> <GROUP> <TRUNK_NAME> <IPSET> [dynamic LOGIN PASSWORD]
где
<DOMAIN> - имя виртуальной АТС;
<ROUTING_CONTEXT> - контекст маршрутизации для данного транка;
<GROUP> - имя группы транков (параметр идентичен <TRUNK_GROUP> для обычных SIP-транков);
<TRUNK_NAME> - имя для регистрации динамического SIP-транка;
<IPSET> - имя группы локальных адресов;
<LOGIN> - логин;
<PASSWORD> - пароль.
При создании динамического SIP-транка в системе создается виртуальный абонент-транк с URI <TRUNK_INTERFACE>@<GROUP>.
Удаление динамического SIP-транка
Для удаления динамического SIP-транка используется команда:
/domain/<DOMAIN>/trunk/sip/remove <GROUP> <TRUNK_NAME> [--force]
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков (параметр идентичен <TRUNK_GROUP> для обычных SIP-транков);
<TRUNK_NAME> - имя для регистрации динамического SIP-транка (параметр идентичен <TRUNK_NAME> для обычных SIP-транков);
--force - дополнительный параметр (ключ), предназначен для безусловного удаления группы транков или транка;
Настройка параметров динамического транка
Для настройки параметров динамического SIP-транка используется команда:
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK_NAME> <PARAMETER> <VALUE>
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков, логическая группировка транков в определенной виртуальной АТС;
<TRUNK_NAME> - имя динамического SIP-транка;
<PARAMETER> - настраиваемый параметр;
<VALUE> - значение параметра.
Основной перечень параметров динамического SIP-транка соответствует параметрам стандартного SIP-транка и описан выше.
Дополнительные параметры для динамического SIP-транка:
- inc_authentication - требование авторизации входящих со стороны транка вызовов, принимает значения:
- false - авторизация не требуется, установлено по умолчанию;
- true - необходима авторизация;
- inc_authentication_type - метод авторизации входящих вызовов, принимает значения:
- proxy - требование авторизации передается в ответе 407/Proxy-Authenticate;
- user - требование авторизации передается в ответе 401/WWW-Authentication, установлено по умолчанию;
- inc_authentication_login - имя, используемое при авторизации входящих вызовов, по умолчанию не задано;
- inc_authentication_password - пароль, используемый при авторизации входящих вызовов, по умолчанию не задан.
Для просмотра информации о динамическом SIP-транке используется команда:
/domain/<DOMAIN>/trunk/sip/info <GROUP> <TRUNK_NAME>
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков, символ "*" используется для просмотра информации о всех транках кластера;
<TRUNK_NAME> - имя динамического SIP-транка.
Исходящая регистрация транков SIP-адаптера
Регистрация транка выполняется на вышестоящем сервере. Запрос регистрации отправляется только с одной из нод кластера.
Количество контактов, передаваемое в запросе регистрации, равно количеству нод в кластере. IP-адреса в контактах устанавливаются из параметра "ip-set", назначенного транку.
Параметр "ip-set" настраивается командой domain/<DOMAIN>/sip/network/set node_ip
.
Настройка параметров SIP-транка для исходящей регистрации выполняется командами:
- Настройка периода времени регистрации на вышестоящем сервере или отключение регистрации:
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK_INTERFACE> out_registration <EXPIRE>
где <EXPIRE> - период регистрации в секундах, 0 - отключение регистрации, при этом отправляется запрос разрегистрации (REGISTER с Expire=0). При изменении параметра <EXPIRE> будет отправлен внеочередной (первый, если параметр не был установлен ранее) запрос регистрации, и время последующей передачи запроса будет пересчитано от текущего момента. - Настройка регистрируемого имени SIP-транка
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK_INTERFACE> user_name <NAME>
где <NAME> - имя SIP-транка для исходящей регистрации. Если имя не указано, то по умолчанию используется имя интерфейса. - Настройка домена регистрации SIP-транка
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK_INTERFACE> sipdomain <SipDomain>
где <SipDomain> - имя SIP-домена. Если параметр не задан, то в его качестве используется параметр "host" (IP-адрес или доменное имя транка), настроенный в параметрах транка.
Для просмотра информации о SIP-транке используется команда:/domain/<DOMAIN>/trunk/sip/info <GROUP> [<TRUNK_INTERFACE>]
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков, символ "*" используется для просмотра информации о всех транках кластера;
<TRUNK_INTERFACE> - имя SIP-транка. - Установка логина
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK_INTERFACE> out_authentication_login <ENTRY_LOGIN_TO_OUTGOING_PROXY_AUTHENTICA>
где
<ENTRY_LOGIN_TO_OUTGOING_PROXY_AUTHENTICA> - имя SIP-транка, используемое при аутентификации, опциональный параметр.
Установка пароля
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK_INTERFACE> out_authentication_password <ENTRY_PASSWORD_TO_OUTGOING_PROXY_AUTHENT>
где
<ENTRY_PASSWORD_TO_OUTGOING_PROXY_AUTHENT> - пароль SIP-транка, используемый при аутентификации, опциональный параметр.
Примеры:
Создание нового SIP-транка "new_test_trunk" в группу "sip_trunks", режим sip-proxy, транк направлен на 192.168.123.123:5060, транк использует контекст маршрутизации default_context
admin@[mycelium1@ecss1]:/$ domain/test.domain/trunk/sip/declare default_context sip_trunks new_test_trunk ipset 192.168.123.123 5060 sip-proxy 5070 Executed on the sip1@ecss1 declared
Просмотр информации о SIP-транке "test"
admin@[mycelium1@ecss1]:/$ domain/test.domain/trunk/sip/info test_group test Executed on the sip1@ecss1 ┌───────┬──────┬───────────┬────────────┬────────────┬────────────────────────────────────────────────────────────────────────┐ │ Group │ Uri │ Is active │ Is blocked │ Is dynamic │ Parameters │ ├───────┼──────┼───────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────────┤ │ test │ test │ false │ false │ true │ declared by admin at 02.11.2015 09:20:28 │ │ │ │ │ │ │ │ │ │ │ │ │ │ listen-port = 50000 │ │ │ │ │ │ │ ip-set = ipset1 │ │ │ │ │ │ │ mode = 'sip-proxy' │ │ │ │ │ │ │ current number of calls = 0 │ │ │ │ │ │ │ disconnect time = 29.12.2015 10:19:49 │ │ │ │ │ │ │ disconnections number = 0 │ ... │ │ │ │ │ │ try-contact-for-anonymous = true │ │ │ │ │ │ │ unreliable-early-media = false │ │ │ │ │ │ │ user_name = test │ └───────┴──────┴───────────┴────────────┴────────────┴────────────────────────────────────────────────────────────────────────┘
Создание динамического транка "new_test_trunk_reg" в группе "sip_trunks", транк использует контекст маршрутизации default_context
admin@[mycelium1@ecss1]:/$ domain/test.domain/trunk/sip/declare default_context sip_trunks new_test_trunk_reg ipset --registration Executed on the sip1@ecss1 {declared,["test.domain",default_context,"sip_trunks",<<"new_test_trunk_reg">>, "dynamic",0,sipproxy]}
Удаление SIP-транка "new_test_trunk"
admin@[mycelium1@ecss1]:/$ domain/test.domain/trunk/sip/remove sip_trunks new_test_trunk [remove] This command removes trunks interfaces. Undo will be impossible. Continue: yes/no ?> yes Executed on the sip1@ecss1 [{"new_test_trunk",removed}]
Управление медиапрофилями для транка
Для установки/изменения медиапрофиля для транка используются следующие команды:
- Установка медиапрофиля по входящей и исходящей связи для транка или нескольких транков. Если media-profile-outgoing для транка установлен, то параметр влияет только на входящую связь.
/domain/<DOMAIN>/alias/set-for-iface <IFACE_GROUP> <IFACE_RANGE> media-profile <MEDIA_PROFILE_NAME>
где
<DOMAIN> - имя виртуальной АТС;
<IFACE_GROUP> - имя группы транков (интерфейсов),
<IFACE_RANGE> - имя одного транка (интерфейса) или список транков, для которых будет устанавливаться медиапрофиль,
<MEDIA_PROFILE_NAME> - имя медиа-профиля Установка медиапрофиля по исходящей связи для транка или нескольких транков. Если параметр не задан, то для исходящей связи используется тот же медиапрофиль, что и для входящей связи - заданный параметров media-profile.
/domain/<DOMAIN>/alias/set-for-iface <IFACE_GROUP> <IFACE_RANGE> media-profile-outgoing <MEDIA_PROFILE_NAME>
где
<DOMAIN> - имя виртуальной АТС;
<IFACE_GROUP> - имя группы транков (интерфейсов),
<IFACE_RANGE> - имя одного транка (интерфейса) или список транков, для которых будет устанавливаться медиапрофиль,
<MEDIA_PROFILE_NAME> - имя медиа-профиляПросмотр текущего медиапрофиля на транке.
/domain/<DOMAIN>/alias/iface-info <IFACE_GROUP> <IFACE_RANGE>
где
<DOMAIN> - имя виртуальной АТС;
<IFACE_GROUP> - имя группы транков (интерфейсов),
<IFACE_RANGE> - имя одного транка (интерфейса) или список транков для которых будут отображаться параметры.Команда выдаст таблицу со всеми параметрами установленными для транка. В таблице необходимо найти параметры media-profile и media-profile-outgoing.
Если параметров не установлено, то используется медиапрофиль по умолчанию (default).Сброс медиапрофиля на транке в значение по умолчанию
/domain/<DOMAIN>/alias/iface-clean <IFACE_GROUP> <IFACE_RANGE> media-profile
где
<DOMAIN> - имя виртуальной АТС;
<IFACE_GROUP> - имя группы транков (интерфейсов),
<IFACE_RANGE> - имя одного транка (интерфейса) или список транков, для которых будет сбрасываться параметр.Сброс медиапрофиля для исходящей связи в значение по умолчанию
/domain/<DOMAIN>/alias/iface-clean <IFACE_GROUP> <IFACE_RANGE> media-profile-outgoing
где
<DOMAIN> - имя виртуальной АТС;
<IFACE_GROUP> - имя группы транков (интерфейсов),
<IFACE_RANGE> - имя одного транка (интерфейса) или список транков, для которых будет сбрасываться параметр.
Настройка SIP-транков через WEB-конфигуратор
Порядок создания SIP-транков через Web-конфигуратор.
- Подключиться к WEB-конфигуратору.
- В определенной виртуальной АТС создать контекст маршрутизации, описание приведено в разделе Настройка параметров маршрутизации через WEB-конфигуратор.
- Открыть приложение "Менеджер транков" ("Trunk Manager").
Настройка транков с помощью стандартного режима Web-конфигуратора описана в разделе Транки (Trunks).
Авторизация транзитных вызовов на транке по RADIUS
Для обеспечения контроля над принятыми из транка вызовами и предоставления услуг абонентам, подключенным к ECSS-10 по этому транку, может использоваться RADIUS-сервер. В этом случае авторизация и аутентификация вызовов, принятых из транка осуществляется на RADIUS-сервере.
Настройка авторизации вызовов, принятых из транка на RADIUS-сервере, выполняется следующей командой:
/domain/<DOMAIN>/trunk/sip/set <GROUP> <TRUNK> <PARAMETER> <VALUE>
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков, логическая группировка транков в определенной виртуальной АТС;
<TRUNK_INTERFACE> - имя SIP-транка;
<PARAMETER> - настраиваемый параметр, принимает значения:
- inc_authentication - требование авторизации входящих из транка вызовов, принимает значения:
- false - авторизация не требуется, установлено по умолчанию;
- true - авторизация требуется;
- area - область аутентификации, которая описывает взаимодействие с RADIUS-серверами. Область аутентификации должна быть предварительно создана, описание приведено ниже. Если параметр принимает значение "undefined", то работает локальная аутентификация, для которой используются логин и пароль, настроенные в параметрах транка.
<VALUE> - значение параметра.
Для просмотра информации используется команда:
/domain/<DOMAIN>/trunk/sip/info <GROUP> [<TRUNK_INTERFACE>] [--profile <PROFILE>]
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы транков, символ "*" используется для просмотра информации о всех транках виртуальной АТС;
<TRUNK_INTERFACE> - имя SIP-транка;
--profile - флаг используется для просмотра информации о конфигурации профилей транка;
<PROFILE> - имя профиля, символ "*" используется для указания всех профилей транков.
Пример:
domain/d.408/sip/pa_sip1/trunk/info smg.test SMG.2 Executed on the pa_sip@alex --------------------------------------------------------------------------------------------------------- | Group | Uri | Is active | Is blocked | Parameters | |----------+-------+-----------+------------+-----------------------------------------------------------| | smg.test | SMG.2 | true | false | amqp_exchange = ecss.call.control.ex | ... | | | | | inc_authentication = true | ... | | | | | "radius area" = radius.direction | ...
При отсутствии корректного ответа от RADIUS-сервера вызов помечается, и на уровне системы принимается решение о продолжении обслуживания.
Настройка области аутентификации (area) и RADIUS-серверов выполняется командами:
/domain/<DOMAIN>/sip/user/dynamic-area/info|new|remove|set ...
/domain/<DOMAIN>/sip/user/dynamic-radius-server/info|new|remove|set ...
Подробное описание данных команд приведено в разделе Настройка динамических абонентов и системы Radius.
Управление транковой записью разговоров
Транковая запись разговоров осуществляет запись всех вызовов (входящих и исходящих) которые проходят через транк.
Транковая запись разговоров существует независимо от активности абонентской запись разговоров.
Управление транковой записью разговоров осуществляется следующими командами:
- Активация транковой записи разговоров
/domain/<DOMAIN>/iface/user-set <OWNER> <GROUP> <IFACE-RANGE> call_record true
где
<DOMAIN> - имя виртуальной АТС;
<OWNER> - имя кластера адаптера владельца интерфейсов, для sip-адаптера обычно sip1;
<GROUP> - имя группы интерфейсов, в данном случае транков;
<IFACE-RANGE> - диапазон/список интерфейсов, в данном случае тарнков. Деактивация транковой записи разговоров
/domain/<DOMAIN>/iface/user-set <OWNER> <GROUP> <IFACE-RANGE> call_record false
где
<DOMAIN> - имя виртуальной АТС;
<OWNER> - имя кластера адаптера владельца интерфейсов, для sip-адаптера обычно sip1;
<GROUP> - имя группы интерфейсов, в данном случае транков;
<IFACE-RANGE> - диапазон/список интерфейсов, в данном случае тарнков.Просмотр статуса транковой записи разговоров
/domain/<DOMAIN>/iface/info <OWNER> <GROUP> <IFACE-RANGE> call_record
где
<DOMAIN> - имя виртуальной АТС;
<OWNER> - имя кластера адаптера владельца интерфейсов, для sip-адаптера обычно sip1;
<GROUP> - имя группы интерфейсов, в данном случае транков;
<IFACE-RANGE> - диапазон/список интерфейсов, в данном случае тарнков.В результате выполнения команды будет выдана информация о том включена или нет (true/false) транковая запись разговоров.
Метод привязки транковых каналов к виртуальному абоненту для станций Coral
В разделе описаны методы привязки транковых каналов к виртуальным абонентам. Опишем ситуацию, в рамках которой данный функционал реализован.
Существует SIP - транк, за которым находятся несколько FXO портов для выхода в городскую ТфОП. Некоторые абоненты должны иметь возможность выхода в городскую сеть через любой свободный порт, остальные абоненты должна выходить строго через конкретно заданные (один или несколько) порты. В обратном порядке, когда вызов получен со стороны городской сети с конкретного FXO порта, SSW должен иметь возможность обрабатывать данный вызов с использованием различных стратегий. Более того, необходимо посредством BLF наблюдать состояние FXO, какие порты в транке сейчас заняты.
Поэтому, было решено к транкам, для которых явно заданы каналы, добавить возможность сопоставлять внутренние виртуальные номера домена и каждый из каналов в транке. Тогда вызовы будут обрабатываться следующим образом:
- Если вызов приходит из конкретного канала в транке, к которому привязан номер виртуального абонента, то номер вызывающего абонента для этого вызова меняется на заданный номер виртуального абонента (на виртуальном абоненте можно активировать различные ДВО, таким образом вызов из транка будет обрабатываться этими ДВО в том числе BLF);
- Звонок на номер виртуального абонента со стороны локального абонента приведет к звонку через определенный канал транка (тот канал, за которым закреплен номер данного виртуального абонента);
Пошаговая настройка привязки канала транка к номеру
- Создаем виртуально абонента с номером NUMBER, контекстом маршрутизации ROUTING_CONTEXT
domain/<DOMAIN>/alias/virtual/declare <NUMBER> <ROUTING_CONTEXT> <GROUP>
<DOMAIN> - имя виртуальной АТС (домен);
<NUMBER> - номер абонента;
<ROUTING_CONTEXT> - план маршрутизации, используемый абонентом;
<GROUP> - группа, к которой будет причислен абонент. - На данного виртуального абонента активируем один из сервисов распределения вызова (CGG, CHunt и т.п.). При этом нужно помнить, что когда групповые сервисы активны, также используется несколько абонентских линий и нужно активировать соответствующий сервис ml (мультилайн)
domain/<DOMAIN>/ss/enable <NUMBER> cgg
<DOMAIN> - название виртуальной АТС (домена), для которой выполняются настройки;
<NUMBER> - номер виртуального абонента, для которого выполняются настройки.Активируем на виртуальном абонента услугу распределения вызова
domain/<DOMAIN>/ss/activate <NUMBER> cgg numbers = <NUM1>, <NUM2>, ...
<DOMAIN> - название виртуальной АТС (домена), для которой выполняются настройки;
<NUMBER> - номер виртуального абонента, для которого выполняются настройки;<NUM1>, <NUM2> - номера на FXO порте, привязываемые к виртуальному номеру. - Создаем SIP транк
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:- sip-proxy - направление работает только по протоколу SIP (RFC 3261);
- sip-t - направление работает по SIP с инкапсуляцией ISUP по протоколу SIP-T (RFC 3372);
- sip-i - направление работает по SIP с инкапсуляцией ISUP по протоколу SIP-I (Q.1912-5).
<SRC_PORT> - порт приема, для создаваемого транка.
- Указываем клиента, в чью сторону направлен транк:
domain/<DOMAIN>/trunk/sip/set <TRUNK_GROUP> <TRUNK> remote-client <CLIENT>
<DOMAIN> - имя виртуальной АТС (домен);
<TRUNK> - имя транка, для которого происходит настройка;<CLIENT> - название организации, с которой связан созданный транк.
<TRUNK_GROUP> - группа, к которой причислен транк; - В созданный транк добавляем Coral контакты, закрепленные за ними номера виртуальных абонентов и номера каналов
<DOMAIN> - имя виртуальной АТС (домен);domain/<DOMAIN>/trunk/sip/set <TRUNK_GROUP> <TRUNK> channel-contact-map add <CHANNEL_RANGE> <NUMBER_RANGE> <CONTACT_RANGE>
<TRUNK_GROUP> - группа, в которую входит транк;
<TRUNK> - имя транка, для которого происходит настройка;
<CHANNEL_NUMBER> - номер выделенного в транке канала. формат: порядковый номер канала, или диапазон в {} через "-", или перечисление или ",";
<NUMBER> -номер виртуального абонента, закрепляемый за каналом в транке;
<CONTACT_RANGE> - Специальный идентификатор порта для Coral шлюза. - Активируем на транке ДВО fxo_trunk
domain/<DOMAIN>/trunk/services/activate <TRUNK_GROUP> <TRUNK> fxo_trunk
<DOMAIN> - имя виртуальной АТС (домен);
<TRUNK_GROUP> - группа, в которую входит транк;
<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>
CODE
Таким образом, если абонент наберет номер виртуального абонента, то он совершит вызов на 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 оповещения по связанному с ним номеру.
Команды управления SIP-транками
Команды управления SIP-транками включают в себя:
- команды блокировки, разблокировки - данные команды предназначены для временного вывода транка из работы в административных целях;
- команды проверки состояния - данные команды предназначены для проверки доступности встречного оборудования для взаимодействия с ним по протоколу сигнализации;
- команды для работы с конфигурацией транка - данные команды предназначены для просмотра, импорта и экспорта настроек SIP-транка;
- команды просмотра активных вызовов - данные команды предназначены для просмотра детальной информации о вызовах, совершаемых через транк.
Блокировка и разблокировка SIP-транка
block
unblock
Проверка состояния SIP-транка
check
Просмотр информации о SIP-транке
info
Просмотр активных вызовов, установленных через SIP-транк
call-list