Перевод настроек файла sofia.conf.xml (Часть вторая)
Структура профиля
Каждый профиль может состоять из нескольких разных подразделов. В настоящее время для 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.
© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку