Подключение к оператору (провайдеру) связи производится через секцию <gateways> sip-профиля. Каждый gateway в секции <gateways> определяет одну регистрацию на сервере оператора. В дефолтном конфиге FS предлагает для таких вот внешних регистраций использовать sip-профиль external, описаный в файле external.xml. В дополнение к файлу external.xml подключается директория external, в котором в каждом xml-файле описан один gateway (вообще, такое деление на мелкие файлы мне лично кажется удобным для администрирования — удобно смотреть, редактировать, добавлять, удалять).
В этой статье я хочу описать несколько вариантов подключения FS к операторам/провайдерам связи. Это не все варианты — на страницах документации freeswitch.org можно найти больше примеров.
1. Регистрация Freeswitch по логину и паролю — один аккаунт у одного провайдера
<gateway name="192.168.100.100"> <param name="username" value="5555555"/> <param name="password" value="VeryStrongPassword"/> <param name="register" value="true"/> </gateway>
В данном случае username, используемый для регистрации, является и нашим номером — 5555555, — на который мы будем принимать звонки, и номером, с которого мы будем звонить через этот gateway — поле From тоже будет 5555555. Регистрация будет происходить на сервере 192.168.100.100 — ip-адрес сервера прописан в gateway name.
2. Регистрация Freeswitch по логину и паролю — несколько аккаунтов у одного провайдера
<gateway name="gateway1"> <param name="realm" value="192.168.100.100"/> <param name="username" value="5555555"/> <param name="password" value="VeryStrongPassword"/> <param name="register" value="true"/> </gateway> <gateway name="gateway2"> <param name="realm" value="192.168.100.100"/> <param name="username" value="2221100"/> <param name="password" value="VeryStrongPassword"/> <param name="register" value="true"/> </gateway>
Для того, чтобы зарегистрировать пару аккаунтов на одном и том же sip-сервере, нужно создать два отдельных gateway c разными названиями (name) — при этом name не должен быть ip-адресом либо доменным именем, просто произвольное слово, например, gateway1 и gateway2, — а реальный ip-адрес сервера необходимо прописать в параметре realm.
3. Регистрация Freeswitch по логину и паролю, один номер, username для регистрации отличается от номера
<gateway name="192.168.100.100"> <param name="username" value="user1"/> <param name="password" value="VeryStrongPassword"/> <param name="register" value="true"/> <param name="from-user" value="5555555"/> <param name="extension" value="5555555"/> </gateway>
Параметр from-user используется для установки поля From при исходящих вызовах через данный gateway, параметр extension — для установки поля To при входящих вызовах с gateway. Если эти параметры явно не указать, по умолчанию применится значение username — user1 и, логично, вызовы с/на 5555555 проходить не будут.
4. Регистрация Freeswitch по логину и паролю, несколько номеров в одном аккаунте (построение транка с регистрацией)
<gateway name="192.168.100.100"> <param name="username" value="user1"/> <param name="password" value="VeryStrongPassword"/> <param name="register" value="true"/> <param name="caller-id-in-from" value="true"/> </gateway>
Параметр caller-id-in-from позволяет каждому абоненту звонить со своим параметром From. Для этого в диалплане в extension, который описывает исходящий вызов через этот внешний gateway, нужно в переменную effective_caller_id_number подставить значение реального номера.
Например, есть абонент с внутренним номером 11, который при звонке «в город» должен звонить с номера 5555557. Прописываем в переменную абонента outbound_caller_id_number значение 5555557:
<user id="11"> <params> <param name="password" value="password4"/> </params> <variables> <variable name="effective_caller_id_number" value="11"/> <variable name="outbound_caller_id_number" value="5555557"/> </variables> </user>
И прописываем в диалплане extension, в котором effective_caller_id_number подменяется значением переменной outbound_caller_id_number:
<extension name="out-city"> <condition field="destination_number" expression="^(\d{7})$"> <action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/> <action application="bridge" data="sofia/gateway/192.168.100.100/$1"/> </condition> </extension>
5. Подключение Freeswitch к провайдеру без регистрации
<gateway name="192.168.100.100"> <param name="username" value="5555555"/> <param name="password" value="VeryStrongPassword"/> <param name="register" value="false"/> </gateway>
Просто ставим register=false и FS не будет отправлять запросы REGISTER к провайдеру. Обратите внимание, что username и password все равно должны присутствовать.
Зависимость значений некоторых параметров друг от друга в описании gateway
gateway name — обязательно нужно указывать. Параметр realm, если не указано другое, принимает значение gateway name. Параметр from-domain, если не указано другое, принимает значение realm и т.д.