8(499)-709-97-83
Работаем с 8:00 до 19:00

FreeSWITCH: подключение к VoIP оператору и настройка диалплана

  • 11 декабря 2014

В предыдущей статье мы рассказывали, как устанавливать FreeSwitch на CentOS 6.5  , сегодня же мы расскажем, как подключить FreeSWITCH к VoIP оператору и сделать входящую и исходящую маршрутизацию.

 

Все конфигурационные файлы FreeSWITCH представлены в формате XML, что может отпугнуть начинающих администраторов, но, на самом деле, после первой настройки страх пропадет, и вы будете удивлены производительностью и гибкостью этой платформы.

Сильными сторонами FreeSwitch являются:

  • Высокая производительность и гибкость
  • SIP-стек промышленного качества
  • Совместимость с обработкой широкополосного (HD) звука, в том числе, и в конференциях
  • Широкий диапазон поддерживаемых кодеков
  • Интеграции с языками программирования
  • Поддержка Multi-tenant
  • Поддержка  платформы Windows
 

Углубляться в рассказы об архитектуре мы не будем, так как на просторах интернета есть множество книг и статей, которые помогут вам в освоении данной платформы. Приступим сразу к настройке.

 

Добавим пару внутренних номеров

По умолчанию в FS уже есть внутренние номера с 1000 по 1019, но мы решили завести два новых номера: 1234 и 1235 и объединить их в группу вызова voipnotes.

 

Пример одного из номеров:

<include>
 <user id="1234">
  <params>
   <param name="password" value="admin!123033 "/>
   <param name="vm-password" value="1234"/>
  params>
  <variables>
   <variable name="callgroup" value="voipnotes"/>
  variables>
 user>
include>
 

Подключение SIP gateway VoIP провайдера

Первым делом нужно настроить sip gateway для подключения провайдера телефонии (в нашем случае это МТТ). По умолчанию добавление/изменение существующих шлюзов производится в  /usr/local/freeswitch/conf/sip_profiles/external. Создадим файл conf/sip_profiles/external/MTT.xml и поместим туда следующие данные:

 
<include>
 <gateway name="mtt">
   <param name="username" value="74997099783"/>        - SIP ID( SIP аккаунт)
   <param name="password" value="***********"/>        - пароль от аккаунта
   <param name="realm" value="voip.mtt.ru"/>
   <param name="from-user" value="74997099783"/>       - имя пользователя для поля From
   <param name="from-domain" value="voip.mtt.ru"/>     - домен для поля From
   <param name="proxy" value="voip.mtt.ru"/>           - сервер регистрации
   <param name="expire-seconds" value="800"/>          - время регистрации в секундах
   <param name="register" value="true"/>               - false: не посылать запросы "Register". true: посылать запросы "Register"
   <param name="register-transport" value="udp"/>      - используемый транспортный протокол
  <param name="context" value="office"/>               - контекст диалплана, который обрабатывает вызовы для этого SIP профиля и соотнесенных с ним IP адресов и портов
 gateway>
include>
 

Сохраняем наш файл, переходим в консоль FS (/usr/local/freeswitch/bin/fs_cli) .

В консоли перезагружаем  XML  командой reloadxml. Иногда перезагрузки XML  достаточно для того, чтобы изменения вступили в силу, но иногда следует воспользоваться командой  reload mod_sofia. Теперь проверяем регистрацию sofia status gateway mtt.

   

Если все настройки были выполнены правильно, то в консоли вы увидите, что ваш шлюз зарегистрирован. Если шлюз не зарегистрировался, то в консоли вводим sofia global siptrace on и смотрим trace с логами, в поисках решения проблемы.

 

Входящая маршрутизация

Теперь можно перейти к настройке диалплана в conf/dialplan/*. Номерной план делится на контексты (context), которые обрабатывают вызовы для этого SIP профиля и соотнесенных с ним IP адресов и портов.

 

Создадим диалплан conf/dialplan/office.xml и опишем простой контекст.

 
<include>
 
 <context name="office">
  <extension name="from-mtt">
   
   <condition field="destination_number" expression="^(74997099783)$">
    
    <action application="bridge" data="user/1234@$${domain}"/>
    
    <action application="hangup"/>
   condition>
  extension>
 context>
include>
 

Небольшое пояснение про bridge и $${domain}.С помощью bridge можно установить соединение со шлюзом или другими пользователями.

Общий вид:

$${domain} это домен FreeSwitch по умолчанию, назначенный в vars.xml.

 

Пример маршрутизации входящего вызова на 2 номера одновременно:

<extension name="1234 and 1235">
 
 <condition field="destination_number" expression="^(74997099783)$">
   
   <action application="bridge" data="user/1234@$${domain},user/1235@$${domain}"/>
   
   <action application="hangup"/>
 
<condition>
<extension>

Пример маршрутизации входящего вызова на группу:

<extension name="group_dial_voipnotes">
 
 <condition field="destination_number" expression="^(74997099783)$">
  
  <action application="bridge" data="group/voipnotes@$${domain}"/>
 
<condition>
<extension>
 

Примеры, указанные выше, довольно простые, потому что мы не хотели делать их сложными и нагружать лишним. Если хочется сделать более сложный диалплан с ivr, с маршрутизацией в зависимости от времени суток и т.д., то можно посмотреть примеры в conf/dialplan/default.xml, а мы перейдем к настройке исходящей связи.

 

Исходящая маршрутизация

Продолжаем настройки нашего диалплана в conf/dialplan/office.xml.Для маршрутизации вызова через шлюз используется выражение: sofia/gateway/имя_шлюза/номер.В нашем случае исходящие вызовы будут осуществляться через созданный нами выше gateway MTT

 
<extension name="out-moskow">
 
 <condition field="destination_number" expression="^(84\d{9})$">
  
  <action application="bridge" data="sofia/gateway/mtt/$1"/>
  
  <action application="hangup"/>
 
<condition>
<extension>
 

Небольшое пояснение по выражению ^(84\d{9})$

^ - Указывает на начало регулярного выражения (обязательно);

(- Свидетельствует о начале регулярного блока выражения - в блоке важно определить внутренние выражения, чтобы на них можно было ссылаться на переменные $ 1, $ 2, $ 3, и т.д.;

84 - соответствует символу '84';

\ d - соответствует любой цифре;

{9} - определяет число вхождений для предыдущего выражения, т.е. ровно 9 цифр

) - Закрывает внутренний блок;

$ - Указывает на конец регулярного выражения (обязательно);

 

В итоге наш контекст будет выглядеть следующим образом:

<include>
 <context name="office">
  <extension name="from-mtt">
   <condition field="destination_number" expression="^(74997099783)$">
    <action application="bridge" data="user/1234@$${domain}"/>
    <action application="hangup"/>
   condition>
  extension>
  <extension name="out-moskow">
   <condition field="destination_number" expression="^(84\d{9})$">
    <action application="bridge" data="sofia/gateway/mtt/$1"/>
    <action application="hangup"/>
   condition>
  extension>
 context>
include>
 

Нам остается отредактировать файлы наших добавочных номеров conf/directory/1234.xml и 1235.xml и  вставить user_context со значением office.

Тем самым, мы укажем FS, что звонки от пользователя надо обрабатывать в соответствии с нашим созданным контекстом office.Теперь перезагружаем XML из консоли FS и наслаждаемся проделанной работой.

 

На этом пока всё. Если вы в статье нашли ошибки или несоответствия, мы будем благодарны, если вы напишите нам о них в комментариях.

 
Powered by SEO CMS ver.: 23.1 TOP 2 (opencartadmin.com)