Структура профиля


Каждый профиль может состоять из нескольких разных подразделов. В настоящее время для sofia.conf.xml нет XSD или DTD — по этой причине очень приветствуются все желающие помочь с разработкой.

    <!ELEMENT configuration (global_settings?, profiles)>

    <!ELEMENT global_settings (param+)>

    <!ELEMENT profiles (profile+)>

    <!ELEMENT profile (aliases, gateways, domains, settings)>

    <!ELEMENT aliases (alias*)>

    <!ELEMENT gateways (gateway*)>

    <!ELEMENT gateway (param+, variables?)>

    <!ELEMENT variables (variable+)>

    <!ELEMENT domains (domain*)>

    <!ELEMENT settings (param+)>

    <!ELEMENT alias EMPTY>

    <!ELEMENT param EMPTY>

    <!ELEMENT variable EMPTY>

    <!ELEMENT domain EMPTY>

    <!ATTLIST configuration name CDATA #REQUIRED description CDATA #REQUIRED>

    <!ATTLIST profile name CDATA #REQUIRED domain CDATA #IMPLIED>

    <!ATTLIST gateway name CDATA #REQUIRED>

    <!ATTLIST alias name CDATA #REQUIRED>

    <!ATTLIST param name CDATA #REQUIRED value CDATA #REQUIRED>

    <!ATTLIST variable name CDATA #REQUIRED data CDATA #REQUIRED direction CDATA #IMPLIED>

    <!ATTLIST domain name CDATA #REQUIRED alias (true | false) #IMPLIED parse (true | false) #IMPLIED>

Шлюзы

В каждом профиле может быть несколько шлюзов:

    <gateways>

     <gateway>

       elements...

     </gateway>

     <gateway>

       elements...

     </gateway>

    </gateways>

Каждый шлюз имеет атрибут "name", по которому его можно идентифицировать. Шлюз определяет, как с использованием различных юзер-агентов добраться до назначения. Например, он может предоставлять доступ к телефонным сетям общего пользования или к частной сети SIP. Необходимость в определении имени шлюза, вытекает из потребности в определенной информации для шлюза до принятия вызова от юзер-агента FreeSWITCH.

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

Пример конфигурации может выглядеть таким образом:

     <gateway name="gateway012">

       <param name="realm" value="sip.voipcarrier.com" />

       <param name="username" value="WBrandes" />

       <param name="password" value="myvoiceismypassword" />

       <param name="register" value="true" />

       <param name="caller-id-in-from" value="true" />

       <param name="ping" value="5" />

       <param name="ping-max" value="3" />

       <param name="retry-seconds" value="5" />

       <param name="expire-seconds" value="60" />

       <variables>

         <variable name="verbose_sdp" value="true"/>

         <variable name="absolute_codec_string" value="PCMU,PCMA" direction="outbound"/>

         <variable name="customer_id" value="3532" direction="inbound"/>

       </variables>

     </gateway>

Чтобы попасть из диалплана на определенный шлюз, можно использовать

    sofia/gateway/<gateway_name>/<dialstring>

С помощью FreeSWITCH также можно подписаться на получение с шлюза уведомлений о различных событиях. Подробности можете посмотреть здесь: Presence#Use_FreeSWITCH_as_a_client

Параметры

Ниже приведен список элементов param, являющихся потомками по отношению к элементам шлюза:

    <!-- /// имя пользователя учётной записи, *обязательно* /// -->

    <param name="username" value="foo"/>

Примечание: параметр имени пользователя для шлюза не следует путать с именем пользователя в конфигурационном файле настроек профиля!

    <!--/// область авторизации (realm): *опционально*, если поле остаётся пустым, параметр совпадает с именем шлюза ///-->

    <!-- realm -->

    <param name="realm" value="sip.example.com[:port]"/>

    <!--/// пароль учётной записи *обязательно* ///-->

    <param name="password" value="a password"/>

    <!--/// имя пользователя для поля from: *опционально*, совпадает с именем пользователя, если не определено другое значение ///-->

    <param name="from-user" value="fooman"/>

    <!--/// доменное имя для поля from: *опционально* совпадает с realm, если не определено другое значение; также могут быть установлены значения "auto-aleg-full" или "auto-aleg-domain" ///-->

    <param name="from-domain" value="asterlink.com"/>

    <!--/// заменяет INVITE пользователя на caller-id канала ///-->

    <!--/// по умолчанию установлено значение false, так как для исходящих вызовов обычно требуется имя пользователя в INVITE ///-->

    <!--Можно использовать callerid входящего вызова в поле from для совершения исходящих звонков через этот шлюз -->

    <param name="caller-id-in-from" value="false"/>

    <!--/// расширение для входящих вызовов: *опционально*, совпадает с именем пользователя, если не установлено другое значение. Для того, чтобы использовать данные из переменной ${sip_to_user} нужно установить "auto_to_user" ///-->

    <param name="extension" value=""/>

Примечание: параметр extension оказывает влияние на содержимое канальных переменных Caller-Destination-Number и _destination_number_. Если не установлено никакого значения, Caller-Destination-Number будет соответствовать имени шлюза. Если установлено определённое значение, то именно оно будет присвоено переменной Caller-Destination-Number . Если стоит значение _auto_to_user_, то Caller-Destination-Number будет замещён значением _${sip_to_user}_ что в случае входящего вызова означает реальный набранный номер.

    <!--/// proxy host: *опционально*, совпадает с realm, если не задано другое значение. ///-->

    <param name="proxy" value="proxy.example.com"/>

    <!--/// время регистрации в секундах, *опционально*: 3600, если не задано другое ///-->

    <param name="expire-seconds" value="3600"/>

    <!-- подавлять CNG (comfort noise) в этом профиле с помощь переменной 'suppress_cng' variable -->

    <param name="suppress-cng" value="true"/>

    <!--/// false: не регистрировать. true: регистрировать (по умолчанию) ///-->

    <param name="register" value="false"/>

    <!-- какой транспортный протокол использовать для регистрации -->

    <param name="register-transport" value="udp"/>

    <!--дополнительные параметры протокола SIP для отправки контакту-->

    <param name="contact-params" value="tport=tcp"/>

    <!-- проверка доступности шлюза: *опционально* -->

    <param name="ping" value="15"/>

    <!-- *опционально* -->

    <param name="ping-max" value="10"/>

    <!-- *опционально* -->

    <param name="ping-min" value="1"/>

ping-min означает "сколько успешных пингов должно пройти, прежде чем шлюз будет объявлен активным. ".

Интервал между ping-min и ping-max является "безопасной зоной", в которой шлюз считается доступным (UP). То есть, например, при минимальном значении 3, а максимальном 6, если счёт идёт между 3,4,5 и 6, то шлюз считается активным.

Если из 6 пакетов 4 подряд утеряны (то есть пинг == 2), шлюз будет считаться недоступным.

Обратите внимание, что при старте Sofia шлюз всегда считается активным, даже если ping-min > 1. "Правильный" отсчет начинается только после того, как шлюз упадёт.

    <!--  *опционально* - по умолчанию false-->

    <param name="extension-in-contact" value="true"/>

    <!-- *опционально* -->

    <param name="cid-type" value="rpid"/>

Параметр 'register' используется, когда профиль действует в качестве клиента для другого юзер-агента. . При регистрации FreeSWITCH предоставляет другому юзер-агенту информацию о своем местонахождении. Обычно используется, когда FreeSWITCH ждёт вызова от другого юзер-агента, который также поставлен в известность о необходимости регистрации такого рода. Если FreeSWITCH использует стороннего юзер-агента только в качестве шлюза (то есть, для звонков на телефонные сети общего пользования), то регистрация не обязательна.

Параметр "distinct-to" используется в том случае, когда необходимо, чтобы FreeSWITCH зарегистрировался с использованием определённого Address-of-Record (AOR) для заголовка "To". Это требует соответствующей настройки связанных параметров. Например, если вам надо отправить команду REGISTER со значениями:

       From: <sip:someuser@somedomain.com>

       To: <sip:anotheruser@anotherdomain.com>

То настройки параметров должны быть такими:

       <param name="distinct-to" value="true"/>

       <param name="auth-username" value="someuser"/>

       <param name="from-user" value="someuser"/>

       <param name="from-domain" value="somedomain.com"/>

       <param name="password" value="somepassword"/>

       <param name="username" value="anotheruser"/>

       <param name="realm" value="anotherdomain.com"/>

Последний из параметров, 'ping' используется для проверки доступности шлюза. При установке этой опции FreeSWITCH будет отправлять шлюзу пакеты SIP OPTIONS. В случае, если от шлюза приходит ответ 200 или 404, статус шлюза будет активным, в обратном случае он будет недоступен. [N.B. Получается, что шлюз может вернуть сообщение об ошибке, при этом остаться активным?] Если вызов направляется на неактивный шлюз, FreeSWITCH генерирует причину отказа — NETWORK_OUT_OF_ORDER. Частота запросов указывается в секундах, минимальное значение — 5 секунд.

Параметр "extension-in-contact" используется для вставки контактной информации в регистрационные данные. Если возникают трудности при регистрации с дефолтными параметрами, такими как gw+gateway_name@ip, возможно использование extension@ip. Если параметр extension не задан, будет использоваться username@ip.

© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку