FreeSwitch: настройка SIP gateway и маршрутизации
Настройка Sip_profiles (транспорта) и gateways (транков). Входящая и исходящая маршрутизация. Примеры и комментарии.
Gateway basics
Допустимые параметры для gateway:
- register - например
false
, когда вы не хотите регистрироваться, но для вызова нужна авторизация на шлюзе, или вызов авторизуется по ACL.true
илиfalse
- schema - Оставить пустым (Digest по умолчанию).
Digest
- realm - область авторизации, в некоторых случаях удаленный сервер может требовать этот параметр.
- realm name
- username - Авторизация от имени заданного пользователя, только если
from-user
не задано.- username
- auth-username - имя пользователя для исходящей регистрации
- username
- password - просто пароль
- password (vEry&stRoNg8paSs)
- caller-id-in-from - брать CallerId из заголовка
From:
или нет.true
илиfalse
- extension - Контакт, будет использован как DID удаленной стороной.
- extension (12345)
- extension-in-contact - посылать extension в SIP Contact header.
true
илиfalse
(default)
- proxy - если не задано, будет использовано gateway name.
- адрес|имя удаленного сервера
- context - контекст для входящих вызовов.
- context
- expire-seconds - как часто посылать запрос на регистрацию register по умолчанию 3600, если не задано другое.
- seconds
- retry-seconds - как часто повторять попытки регистрации при неудаче.
- seconds
- from-user - имя пользователя используемое по умолчанию, если username не задано
- username
- from-domain - Домен в поле
From
.- domain
- register-proxy - для тех случаев, когда у вас есть прокси-сервер на котором вы регистрируетесь и другой сервер для отправки вызовов, если это один и то же сервер - оставьте пустым.
- proxy
- contact-params -дополнительные параметры в поле
Contact:
. Например: tport=tcp.- param
- register-transport -
udp
,tcp
илиtls
если вкл. в профиле.udp
,tcp
илиtls
Простейший пример sip gateways и dialplan
+---------------------+ +-----------------------+ | Extensions | | Profiles | | ../conf/directory | | ../conf/sip_profiles | +---------------------+ +-----------------------+ | | +----------+ +-----------+ | | V V +---------------------+ | Contexts | | ../conf/dialplan | +---------------------+
Подробнее о конфигурации sip_profiles и directory
Легенда
Значения использованные в примерах: данные шлюзов.
IP/domain | Gateway Name |
---|---|
192.168.0.252 | samsung |
sip.itsp.com | itsp |
SIP транк (gateway) частной сети АТС.
../conf/sip_profiles/internal/samsung.xml
- freeswitch
<include> <gateway name="samsung"> <param name="username" value="samsung"/> <param name="password" value="register:false"/> <param name="proxy" value="192.168.0.252"/> <param name="register" value="false"/> <param name="context" value="default"/> <param name="caller-id-in-from" value="true"/> </gateway> </include>
Если в параметре <param name="proxy" value="192.168.0.252"/> порт не задан, то используется 5060, по умолчанию.
Чтобы задать специфический порт SIP сигнализации, используйте форму записи: <param name="proxy" value="192.168.0.252:5077"/>
Так как gateway создан в sip_profile — internal, входящие вызовы из корпоративной АТС будут попадать непосредственно в контекст default и если пользователь с вызываемым номером существует, он будет вызван. Дополнительные правила входящей маршрутизации не требуются. Таким образом вы можете создать корпоративную телефонную сеть со сквозной нумерацией.
Поле <param name="caller-id-in-from" value="true"/> обеспечит передачу внутреннего номера из поля From: в качестве CallerID.
SIP gateway провайдера ( ITSP )
../conf/sip_profiles/external/itsp.xml
<include> <gateway name="itsp"> <param name="username" value="itsp"/> <param name="password" value="12345"/> <param name="realm" value="sip.itsp.com"/> <param name="from-user" value="itsp_user"/> <param name="from-domain" value="sip.itsp.com"/> <param name="proxy" value="sip.itsp.com:5060"/> <param name="expire-seconds" value="800"/> <param name="register" value="true"/> <param name="retry-seconds" value="60"/> <param name="context" value="public"/> <param name="caller-id-in-from" value="false"/> </gateway> </include>
Входящая маршрутизация из контекста Public
../conf/dialplan/public/00_inbound_did.xml
<include> <extension name="public_did"> <condition field="destination_number" expression="^(7771000)$"> <!-- $${domain} это домен FreeSwitch по умолчанию, назначенный в vars.xml.** --> <action application="set" data="domain_name=$${domain}"/> <!-- этот пример направляет вызовы по DID 7771000 на внутренний номер 1000 в контексте default --> <action application="transfer" data="1000 XML default"/> </condition> </extension> </include>
<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>
<X-PRE-PROCESS cmd="set" data="domain_name=$${domain}"/>
Устанавливает домен по умолчанию используемый FreeSWITCH, если другое не задано.
По умолчанию $${local_ip_v4}, т.е. IP сервера определенный FS по умолчанию.
Исходящая маршрутизация через gateway's
вводные данные маршрутизации
Набор Четырехзначных номеров в частную сеть АТС
цифры | expression | extension name |
---|---|---|
2XXX | ^(2\d{3})$ | local.samsung |
../conf/dialplan/default/01_samsung.xml
<include> <extension name="local.samsung"> <condition field="destination_number" expression="^(2\d{3})$"> <action application="set" data="effective_caller_id_name=${user_data(${username}@${domain_name} var effective_caller_id_name)}"/> <action application="set" data="effective_caller_id_number=${user_data(${username}@${domain_name} var effective_caller_id_number)}"/> <action application="bridge" data="sofia/gateway/samsung/$1"/> </condition> </extension> </include>
Внешние вызовы через провайдера без префикса
цифры | extension name |
---|---|
XXXXXXX | local.itsp |
8[09]XXXXXXXXX | mobile.itsp |
8[1-8]X. | inter.itsp |
../conf/dialplan/default/01_itsp.xml
<include> <extension name="local.itsp"> <condition field="destination_number" expression="^(\d{7})$"> <action application="set" data="outbound_caller_id_number=${user_data(${username}@$${domain} var outbound_caller_id_number)}"/> <action application="set" data="outbound_caller_id_name=${user_data(${username}@$${domain} var outbound_caller_id_name)}"/> <action application="bridge" data="sofia/gateway/itsp/$1"/> </condition> </extension> <extension name="moble.itsp"> <condition field="destination_number" expression="^(8[09]\d{9})$"> <action application="set" data="outbound_caller_id_number=${user_data(${username}@$${domain} var outbound_caller_id_number)}"/> <action application="set" data="outbound_caller_id_name=${user_data(${username}@$${domain} var outbound_caller_id_name)}"/> <action application="bridge" data="sofia/gateway/itsp/$1"/> </condition> </extension> <extension name="inter.itsp"> <condition field="destination_number" expression="^(8[1-8]\d+)$"> <action application="set" data="outbound_caller_id_number=${user_data(${username}@$${domain} var outbound_caller_id_number)}"/> <action application="set" data="outbound_caller_id_name=${user_data(${username}@$${domain} var outbound_caller_id_name)}"/> <action application="bridge" data="sofia/gateway/itsp/$1"/> </condition> </extension> </include>
Глобальная переменная ${outbound_caller_id_number} задается в файле vars.xml:
<X-PRE-PROCESS cmd="set" data="outbound_caller_id_name=fs"/> <X-PRE-PROCESS cmd="set" data="outbound_caller_id_number=777777"/>
обычно требуется передать провайдеру callerID из вашего пула номеров, это можно сделать для каждого маршрута:
<action application="set" data="effective_caller_id_number=8129981138"/> <action application="set" data="effective_caller_id_name=8129981138"/>
Переменная ${effective_caller_id_number} указывает непосредственно на поле From: из SIP заголовка вызывающего устройства.
Её можно заменить переменной заданной в настройках юзера — ../directory/default/user.xml — <variable name="effective_caller_id_number" value="8129981138"/>,
получается при помощи команды ${user_data(${username}@${domain_name} var effective_caller_id_number)}
Внешние вызовы через провайдера через префикс "9".
префикс | цифры | extension name |
---|---|---|
9 | XXXXXXX | local.itsp |
9 | 8[09]XXXXXXXXX | mobile.itsp |
9 | 8X. | international.itsp |
<include> <extension name="local.itsp"> <condition field="caller_id_number" expression="^397\d$"/> <condition field="destination_number" expression="^9(\d{7})$"> <action application="set" data="effective_caller_id_number=8129981138"/> <action application="set" data="effective_caller_id_name=8129981138"/> <action application="bridge" data="sofia/gateway/itsp/$1"/> </condition> </extension> <extension name="mobile.itsp"> <condition field="caller_id_number" expression="^397\d$"/> <condition field="destination_number" expression="^9(8[09]\d{9})$"> <action application="set" data="effective_caller_id_number=8129981138"/> <action application="set" data="effective_caller_id_name=8129981138"/> <action application="bridge" data="sofia/gateway/itsp/$1"/> </condition> </extension> <extension name="international.itsp"> <condition field="caller_id_number" expression="^397\d$"/> <condition field="destination_number" expression="^9(8\d+)$"> <action application="set" data="effective_caller_id_number=8129981138"/> <action application="set" data="effective_caller_id_name=8129981138"/> <action application="bridge" data="sofia/gateway/itsp/$1"/> </condition> </extension> </include>
Условие
<condition field="caller_id_number" expression="^397\d$"/>
можно использовать для ограничения доступа к gateway.
В примере через данный gateway смогут звонить только номера 3970-3979.
См. также:
sc qc FreeSWITCH