четверг, 15 октября 2020 г.

Freeswitch первоначальная настройка.

 Freeswitch установлен из репозитория. Как известно, Freeswitch имеет свой репозиторий, а не как Asterisk. Да, я собирал из исходников Freeswitch, но видимо что-то пошло не так, видимо из-за отсутствия опыта, по этому я переставил Freeswitch из репозитория.

Вобщем начать лучше с создания своего профиля настройки PBX, у меня он называется test в отличии от уже имеющегося предоставленного разработчиками default.

Делаем:

cd /etc/freeswitch/directory

mv default.xml default.xml.orig

nano default.xml.orig

здесь меняем:

<X-PRE-PROCESS cmd="include" data="default/*.xml"/>

на 

<X-PRE-PROCESS cmd="include" data="test/*.xml"/> 

при выходе из nano сохраняем файл под именем test.xml.

Находясь в каталоге /etc/freeswitch/directory создаем каталог test, в 

него копируем два-три профиля телефонных аппаратов (каждый файл - аппарат), и файл default.xml из каталога default. Каталог default я на всякий случай переименовал переименовал.

mv default default.orig

Открываем профили учеток телефонных аппаратов:

nano  /etc/freeswitch/directory/test/100X.xml

Приводим в соответствие контекст:

<variable name="user_context" value="test"/>

На всякий выкладываю листинг:

cat /etc/freeswitch/directory/test/1000.xml

<include>

<user id="1000">

    <params>

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

      <param name="vm-password" value="1000"/>

    </params>

    <variables>

      <variable name="toll_allow" value="domestic,international,local"/>

      <variable name="accountcode" value="1000"/>

      <variable name="user_context" value="test"/>

      <variable name="effective_caller_id_name" value="1000"/>

      <variable name="effective_caller_id_number" value="1000"/>

      <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>

      <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>

      <variable name="callgroup" value="techsupport"/>

    </variables>

  </user>

</include>


Делаем на всякий копию файла 

mv /etc/freeswitch/autoload_configs/acl.conf.xml /etc/freeswitch/autoload_configs/acl.conf.xml.orig

Открываем /etc/freeswitch/autoload_configs/acl.conf.xml, и приводим его к такому виду:

<configuration name="acl.conf" description="Network Lists">

 <network-lists>

<list name="lan" default="allow">

<node type="allow" cidr="192.168.11.0/26"/>

<node type="allow" cidr="192.168.11.9/32"/>

</list>

<list name="domains" default="deny">

</list>

</network-lists>

</configuration>

192.168.11.0/26 моя подсеть, 192.168.11.9/32 хост с freeswitch.

Открываем файл /etc/freeswitch/vars.xml (так же предварительно можно скопировать оригинал, и переименовать). Здесь добавляем:

звуки

<X-PRE-PROCESS cmd="set" data="default_language=ru"/>

общий пароль для аппаратов

<X-PRE-PROCESS cmd="set" data="default_password=1000"/>

IP сервера для sip и rtp:

<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=192.168.11.9"/>
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=192.168.11.9"/>

Дефолтное удаляем или комментим
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=stun:stun.freeswitch.org"/>
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=stun:stun.freeswitch.org"/>

Далее идем в /etc/freeswitch/sip_profiles/external, и здесь создаем файлы с учетками своих транков, у меня их два. Привожу как пример, вам самим (с помощью провайдера sip) нужно будет их настроить. Мои учетки транков:
cat sip1.xml
<include>
    <gateway name="sip1">
        <param name="username" value="1111111"/>
        <param name="password" value="XXXXXXXXX"/>
        <param name="realm" value="sip1.ru"/>
        <param name="from-user" value="1111111"/>
        <param name="from-domain" value="sip1.ru"/>
        <param name="proxy" value="sip1.ru"/>
        <param name="expire-seconds" value="300"/>
        <param name="register" value="true"/>
        <param name="register-transport" value="udp"/>
        <param name="context" value="sip1"/>
    </gateway>
</include>

cat sip2.xml
<include>
    <gateway name="sip2">
        <param name="username" value="2222222"/>
        <param name="password" value="XXXXXXXXX"/>
        <param name="realm" value="sip2.ru"/>
        <param name="from-user" value="2222222"/>
        <param name="from-domain" value="sip2.ru"/>
        <param name="proxy" value="sip2.ru"/>
        <param name="expire-seconds" value="300"/>
        <param name="register" value="true"/>
        <param name="register-transport" value="udp"/>
        <param name="context" value="sip2"/>
    </gateway>
</include>

Теперь идем в /etc/freeswitch/dialplan и создаем тут файл test.xml
Обращаю внимание, что входящие вызовы тут не описаны, только исходящие.
Мой text.xml - диалплан.
<?xml version="1.0" encoding="UTF-8"?>
<include>
    <context name="test">
        <extension name="unloop">
            <condition field="$${unroll_loops}" expression="^true$" />
            <condition field="${sip_looped_call}" expression="^true$" >
                <action application="deflect" data="${destination_number}" />
            </condition>
        </extension>
      <extension name="out-sip1">
            <condition field="destination_number" expression="^(8\d{10})$">
                <action application="bridge" data="sofia/gateway/sip1/$1" />
                <action application="hangup"/>
            </condition>
        </extension>
        <extension name="out-sip2">
               <condition field="destination_number" expression="^(7\d{10})$">
               <action application="bridge" data="sofia/gateway/sip2/$1" />
                <action application="hangup" />
            </condition>
        </extension>
       <extension name="local">
            <condition field="destination_number" expression="^\d{4}$">
                <action application="answer" />
                <!-- <action application="sleep" data="1000" /> -->
                <action application="bridge" data="user/${destination_number}@$${domain}" />
                <action application="hangup" />
            </condition>
            </extension>
    </context>
</include>

Обратите внимание, на то, что выделено красным - вызов с первой цифры 8 и затем 10 цифр, и вызов пойдет через sip1, вызов с первой цифры 7 и затем 10 цифр, и вызов пойдет через sip2.

Можно настроить аппараты или софтфоны, перезапустить Freeswitch и попробовать позвонить.
Вход в консоль: FS - fs_cli
Статус транков: sofia status gateways
Статус транка: sofia status gateway sip

Если вы работали с Asterisk полезно взглянуть сюда
Я не претендую на абсолютную правильность написанного, т.к. основная цель данного текста зафиксировать свой опыт по работе с новой платформой. С данным конфигом у меня все работало - звонили внутренние телефоны, уходили звонки на внешние транки. Если будут вопросы - пишите, постараюсь ответить.