Freeswitch debian 10 настройка

Обновлено: 04.07.2024

Как вы помните из нулевой части, в качестве backend (media) серверов будет использоваться FreeSWITCH. Интеграцию Kamailio + Asterisk в этой статье мы рассматривать не будем, это отдельная тема. В качестве надстройки над FreeSWITCH мы будем использовать FusionPBX, который позволяет хранить все данные (dialplan, IVR, группы и.т.д) непосредственно в базе данных. Сам FreeSWITCH использует синтаксис XML для написания конфигурационных файлов (dialplan, IVR…), FusionPBX хранит все данные в базе данных, использует lua скрипты для реализации XML Handler. Т.е переводит данные из базы данных в понятный FreeSWITCH’у вид, в XML файлы.

Kamailio — интеграция с FreeSWITCH

Алгоритм работы Kamailio + FreeSWITCH

Предлагаю рассмотреть алгоритм работы между абонентом => Kamailio (Frontend) => FreeSWITCH (backend, media сервер)

Может показаться, что сейчас все немного запутано, но при виде трассировки все станет понятней.

Практическая реализация в Kamailio

Предлагаю начать реализацию вышеописанного алгоритма пошагово т.е начнем выполнять сверху вниз.

Для начала предлагаю посмотреть какие сетевые интерфейсы у меня есть на виртуальной машине:


Как видно, у меня есть два сетевых интерфейса: eth0 и eth1. Eth0 — интерфейс с публичным («белым») IP адресом, eth1 — интерфейс с приватным IP адресом.
Для обработки SIP запросов от абонентов мы будем использовать оба интерфейса.

Для Kamailio мы будем слушать два порта с разными IP. Для этого изменим kamailio.cfg и добавим в самый верх:

Директива listen используется для того, чтобы указать Kamailio, какие порты и IP адреса слушать. В данном случае т.к пока мы работаем только с UDP, мы будем слушать внешний (публичный) IP адрес 78.**.241.199 с портом 5060 и внутренний IP адрес 172.19.0.2 с портом 5060 для работы с FreeSWITCH.

Далее, чтобы Kamailio отправлял SIP запросы на FreeSWITCH через приватный сетевой интерфейс (eth1) необходимо указать параметр mhomed. По умолчанию значения = 0 (выключено). Для включения параметра необходимо в /etc/sysctl.conf разрешить форвардинг (передачу пакетов) между сетевыми интерфейсами:

После чего применить изменения выполнив команду из под root пользователя:

После чего уже в конфигурационном файле kamailio.cfg необходимо разрешить форвардинг пакетов (датаграм) между сетевыми интерфейсами. Для этого в самом верху, после директив listen, alias необходимо включить параметр mhomed:

А также добавим два флага:

Мы будем использовать флаги для того, чтобы помечать в какую сторону идет звонок. В данном случае tswitch — это вызов, который поступил на Kamailio от абонента, а fswitch — это запрос, который пришел уже от media сервера (FreeSWITCH).

И добавим параметр модуля RR (record_route) для отключения вставки tag’ов в заголовки Record-Route:

Также замечу, что сейчас мы реализуем примитивную схему работы (один Kamailio сервер + один FreeSWITCH сервер), в следующей статье мы будет использовать модуль dispatcher который позволяет использовать множество media серверов.

На этом подготовительная часть закончена и теперь реализуем сам алгоритм. Для этого мы изменим пользовательский маршрут route[DIALOG] созданный в предыдущих статьих (ссылка на все статьи):

Красным цветом выделена измененная часть маршрута DIALOG. Давайте более подробно рассмотрим, что мы здесь делаем:

  1. Проверяем IP адрес с которого пришел SIP запрос. Если IP адрес не является IP адресом FreeSWITCH — это значит, что это запрос от абонента, поэтому мы авторизуем INVITE запрос с помощью маршрута AUTH (рассматривалось в третьей статье). Далее мы помечаем этот запрос флагом tswitch, который означает, что мы отправим этот запрос на media сервер FreeSWITCH
  2. Если же IP адрес является IP адресом FreeSWITCH — помечаем этот вызов флагом fswitch и выполняем стандартную обработку INVITE, как мы это делали в предыдущих статьях.

Теперь давайте посмотрим как изменился пользовательский маршрут route[RELAY]:

В этом маршруте мы реализуем маршрутизацию согласно флагам. Все, что приходит с флагом tswitch — мы отправляем на media сервер FreeSWITCH с помощью функции rewritehostport. Эта функция выполняет перенаправление на указанный IP адрес и указанный порт, после чего выполняем отправку запросов с помощью функции t_relay(). IP адрес 172.19.0.2 — приватный IP адрес, на котором находится FreeSWITCH, порт 5090 — это порт, который слушает FreeSWITCH (настройка FreeSWITCH рассматривается ниже)

Все что приходит с флагом fswitch — мы обрабатываем точно также как и раньше с помощью Kamailio и функции t_relay

FreeSWITCH (FusionPBX)

Сама установка занимает очень мало времени т.к разработчики FusinPBX предоставляют уже готовые установочные bash скрипты. Установка заключается в выполнении этих скриптов из под root (sudo) пользователя.

Установка FreeSWITCH в Linux

FusionPBX на Debian 10 (buster), 9 (stretch), 8 (jessie)

Для установки на дистрибутивы семейства Debian необходимо скачать установочные скрипты командой:

После чего выполнить установку, выполнив команду

Все действия необходимо выполнить из под пользователя root

FusionPBX на CentOS 7

Необходимо скачать пакет wget через менеджер пакетов yum:

После чего, также как и на Debian, необходимо скачать установочные скрипты:

И также выполняем скачанные скрипты:

PostgreSQL при установке FusionPBX

На официальном сайте Postgres выбрать необходимую версию и дистрибутив. Ссылка на официальные postgres репозитории здесь. Для CentOS 7 ссылка на репозиторий, например 11 версии, следующая:

После чего отредактировать файл, которые находится в /usr/src/fusionpbx-install.sh/centos/resources/postgresql.sh

И закоментировать саму строку установки пакетов postgres версии 9. Вместо этих строк мы добавляем следующий репозиторий (приведу пример для 11 версии):

Ниже приводится мой файл для установки PostgreSQL 11 версии:

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

После этого, будет установлена база данных Postgres версии 11.

Но вполне вероятно, что у вас уже будет установленна БД т.к с Kamailio мы работает через PostgreSQL. Поэтому для того, что бы не устанавливать занового Postgres, необходимо удалить файл с установкой БД:

После этого достаточно выполнить несколько SQL запросов из под root пользователя:

В остальном же, установка остается одинаковой.

Настройка FreeSWITCH (FusionPBX) для работы с Kamailio

FusionPBX login

Вводим логин/пароль полученный после установки (логин admin) и видим сверху navbar:

fusionpbx navbar

Создание SIP профиля для интеграции с Kamailio

Мы создадим отдельный SIP профиль для работы с Kamailio, для этого в верхнем меню выберем вкладку Advanced, и перейдем в SIP Profile

fusionpbx sip profile

После чего перейден в профиль external и нажмем «Copy»

И введем имя для нового SIP профиля, например softswitch.

После чего изменим порт который будет слушать FreeSWITCH, например на 5090. Для этого откроем созданный SIP профиль (softswitch) и следующие строки:

FusionPBX network setting in SIP profile

В параметре sip-ip у меня указан локальный IP адрес виртуальной машины (сервера), в sip-port задается порт, который будет слушать FreeSWITCH (в данном случае будет слушать порт 5090). После изменение параметров, необходимо сохранить изменения (SAVE) и перезагрузить SIP профиль (это сдалем позднее, после добавления ACL)

Создание ACL в FusionPBX

Для нового SIP профиля мы также создадим новый ACL, это делается во вкладке Advanced — Access Controls:

fusionpbx acl

И нажнем на кнопку «Add» в верхнем правом углу, приведем создаваемый ACL к следующему виду:


Где по умолчанию мы запрещаем весь SIP трафик, но разрешаем с IP адреса 172.19.0.2 (внутренний IP адрес моей виртуальной машины) и с IP 78.**.241.199 — внешний IP адрес моей виртуальной машины. Необходимо изменить параметры на ваши IP адреса. Можно указывать IP адреса с помощью маски подсети, но в данном случае я этого не делаю т.к у меня пока что один сервер Kamailio.

Задаем имя, например SBC и нажимаем сохранить, кнопка «SAVE»

Теперь вернемся в созданный ранее SIP профиль «softswitch» и изменим используемый ACL для этого профиля, для этого в строке apply-inbound-acl укажем созданный нами ACL:

fusionpbx inbound acl

После чего сохраняем настройки SIP профиля с помощью кнопки SAVE.

Далее, чтобы применить изменения для SIP профиля, его необходимо перезагрузить. Делается это через navbar (Status -> SIP Status):

fusionpbx sip status profile

И в открывшемся окне, нажимаем «Restart» для созданного SIP профиля:

Создание домена в FusionPBX

FusionPBX create new tenant

И укажем в поле Name название домена:

FusionPBX create new tenant

После чего, можно перейти в новосозданный домен нажав в верхний правый угол:

select domain in FusionPBX

Dialplan для локальных вызовов через FreeSWITCH

Также необходимо создать dialplan для обработки входящих вызовов с Kamailio. Есть два варианта как это можно сделать:

  1. Добавить dialplan через WEB GUI (FusionPBX)
  2. Выполнить SQL запрос в базу данных

Мы будем использовать первый вариант, чтобы показать как это делается через графический интерфейс, но в будущем для экономии времени мы будем выполнять SQL запросы напрямую в базу данных

Итак, для создания нового dialplan необходимо в навигационном меню перейти в Dialplan->Inbound Routes:

fusionpbx create new dialplan

После чего в верхнем правом угле нажать на кнопку ADD и нажать на кнопку ADVANCED. После чего заполним необходимые поля для нового dialplan’а:


Name — название dialplan, в нашем случае он будет называться local_call
Condition 1 — условие при котором будет выполнятся dialplan. В нашем случае это регулярное выражение ^(\d)$, оно означает, что номера от 3-х значный до 5 значных будут обрабатываться этим диалпланом. Т.е, диапазон локальных номеров у нас будет 000-99999 (например 100, 1005, 9003…)
Action 1 — действие, которые будет выполнятся при выполнении условия (Condition), пока поставим Hangup.

Нажимаем сохранить и переходим в то же окно Inbound Routes и выберем созданный маршрут local_call и отредактируем его следующим образом:

Примеры работы Kamailio + FusionPBX (FreeSWITCH)

Давайте теперь рассмотрим трассировки, чтобы наглядно увидеть работоспособность.

Абонент А отправляет запрос INVITE для установления связи с абонентом B. Для этого Абонент А отправляет INVITE на Kamailio, назовем это ногой А (leg-a):

Kamailio + FreeSWITCH integration

185.***.163.**:1120 — IP адрес абонента А
78.**.241.199:5060 — публичный IP адрес Kamailio
172.19.0.2:5060 — приватный IP адрес Kamailio используемый для работы с FreeSWITCH
172.19.0.2:5090 — IP адрес FreeSWITCH

Сам INVITE запрос ничем не отличается от рассмотренных ранее в предыдущих статьях. Но Kamailio вместо того, чтобы сразу пытаться позвонить абоненту B отправляет INVITE запрос абонента А на media сервер FreeSWITCH (172.19.0.2 с портом 5090), стоит обратить внимание на то с какого интерфейса вызов уходит в сторону FreeSWITCH. Как видно, вызов уходит с IP 172.19.0.2 и порта 5060 (помните начало статьи?), это приватный интерфейс eth1 и с помощью mhomed=1 (параметр указанный в начале статьи) мы обрабатываем все SIP запросы между Kamailio и FreeSWITCH в приватной подсети с помощью приватного сетевого интерфейса.

Но что происходит дальше, когда вызов попадает на FreeSWITCH?

Посмотрим на трассировку sngrep:

Kamailio + FreeSWITCH integration

Первый вызов — нога A (leg-a) т.е вызов от абонента А на Kamailio
Второй вызов — нога B (leg-b) т.е вызов от FreeSWITCH на Kamailio

Как видно, появился второй вызов (второй INVITE). И стоит обратить внимание, что IP адрес с которого пришел этот INVITE является IP адресом FreeSWITCH. Т.е это Leg-B (вызов от FreeSWITCH вызываемому абоненту B).

Давайте более подробно посмотрим на этот вызов:

Kamailio + FreeSWITCH integration

172.19.0.2:5090 — IP адрес FreeSWITCH
78.**.241.199:5060 — публичный IP адрес Kamailio
185.**.163.***:1098 — IP адрес абонента B

Как видно из трассировки, вызов от FreeSWITCH на Kamailio обработал корректно, т.е Kamailio понял, что это вызов с его media серверов, поэтому он начал вызывать абонента B (с помощю функции lookup(«location»).

Как видно, сейчас все работает коректно и все взаимодействие между Kamailio (frontend) и FreeSWITCH (backend) происходит с поомщью приватной подсети.

Заключение

В этой статье мы реализовали работу Kamailio + FreeSWITCH (FusionPBX), по аналогии можно выполнить интеграцию с Asterisk или любым другим softswitch 5 класса.

В следующей статье мы более подробно рассмотрим балансировку нагрузки с помощью модуля dispatcher.

Если возникают вопросы — можете задавать их в комментариях, по возможности постараюсь помочь!

Установка VoIP сервера FreeSWITCH с частичной интеграцией в систему MajorDoMo

Небольшая инструкция по установке, первоначальной настройки и интеграции SIP сервера FreeSWITCH на систему Majordomo (базовый образ для RPi) для создания домашней АТС с возможностью видео вызовов.

FreeSWITCH – это программно-определяемый телекоммуникационный стек, позволяющий осуществлять цифровое преобразование проприетарных телекоммуникационных коммутаторов в универсальную программную реализацию, которая работает на любом стандартном оборудовании. Разработчики FreeSWITCH в качестве эталонной операционной системы рекомендуют использовать Debian 10.


Установка длится около получаса. По окончании перегрузим малинку.
Для проверки работоспособности зайдем в консоль freeswitch:
sudo fs_cli

Выход из консоли quit или же CTRL+D

После установки FreeSWITCH почти готов к работе, в нём по умолчанию есть 20 абонентов с номерами 1000-1019. пароль по умолчанию для абонентов VoIP указан в файле /usr/local/freeswitch/conf/vars.xml и равен 1234.
В директории /usr/local/freeswitch/conf/derectory/default находятся 20 xml файлов, каждый из которых отвечает за абонента с соответствующим номером. Можем добавлять абонентов копированием файлов с подстановкой данных.

Из коробки freeswitch частично работоспособен.
При наборе номера идёт задержка 10 секунд, после установки соединения, через 30 секунд разговорное состояние прерывается.
Исправим это, оттредактирова пару конфигурационных файлов:
Символы <!-- --> начало и конец комментариев,

Редектируем файл c глобальными переменными vars.xml
sudo nano /etc/freeswitch/vars.xml

Изменим пароль по умолчанию с 1234 на 1111 (устраняем задержку в 10 секунд при наборе номер), там же поменяем профиль с external на internal, приведя строки к следующему виду:

Перейдём к sip профилям. Сейчас мы будм использовать профиль internal (внутренний). Причина срывов связи у меня заключается в неправильной настройки сети SIP сервера. отредактируем его заменив пару строк:

Freeswitch имеет модульную структуру, подключаемые модули можно посмотреть в файле modules.conf.xml

Отредактируем его, подключив mod_xml_rpc, включающий поддержку WEB API, расскоментировав строку с этим модулем.

Подробнее о модуле
Описание команд можно найти здесь:
Большинство команд в домашнем использовании не нужно.
На этом можно сказать первоначальная настройка SIP сервера закончена.
Перезапустим FreeSWITCH

Попробуем организовать воздействие на SIP сервер с целью внешнего (со стороны сервера УД MajorDoMo) управления вызовами.

Проверка работы SIP сервера, организация видеовызова и небольшая интеграция с MajorDoMo

Попробуем организовать проверку работы нашей VoIP АТС.
Для начала я использую на ПК с Windows Sip клиенты MicroSIP (мне больше всех сипфонов понравился) и Linphone. На смартфоне с Android Linphone и ряд других.
На Raspberry Pi консольный клиент Linphonec (но в нём на данный момент ограниченная работоспособность)
Приведу для примера настройки MicroSIP:


Сетевый настройки, настройки нат и прочее пока не рассматриваю, для начала всё делаем в своей локальной сети.
Приблизительно такие же настройку и у других SIP клиентов.
Внимание! Старайтесь в настройке кодеков, особенно видео, чтоб предпочтительные были одинаковы. У меня установлен VP8.


Сделаем видеовызов с одного клиента на другой:

В качестве иллюстрации, я сделал звонок на одном ПК с двух sip клиентов. Включена отладочная информация
Так же можно и с двух ПК провести набор и ПК-Смартфон. Главное чтоб они были в одной сети.

Набрав в браузере запрос получаем отображение статуса FS:


Откроем консоль MajorDoMo и выполним этот запрос консоли:


Получаем:

Сейчас сделаем вызов с инициатором которого будет наша система "Умного Дома":
Идея в том, чтобы инициировать звонок (с помощью функции originate) со стороны «MajorDomo» абоненту с номером 1003 (MicroSip), а потом состоявшийся вызов переводить в план набора для исходящих вызовов на абонента 1007 (смартфон Android sip клиент Linphone). Команда API выглядит так: originate user/1003 1007 XML default инициирование вызов в консоли номер 1003, после поднятия (или автоподнятия) трубки вызывается номер 1007 из плана набора default и видеозвонок поступает на смартфон.

Переводим её в понятный вид для MajorDoMo и браузера:


Вначале звонит один софтфон, спустя несколько секунд идёт звонок на второй. Ради эксперемента, последний вызов я поставил оба sip клиента в режим автоответа.
Видеовызов установился автоматически.

Эту же команду можно поставить и в сценарии, действия и т.д.
На этом заканчиваю эту часть, единственное отмечу полу деятельности для последующей как настройки так и интеграции, довольно большое.
Этот способ довольно лёгкий, можно сделать и использовать Websocket, и управление по DTMF с мобильного телефона, так же имеется возможность использования технологии WebRTC и прикрутить к Web серверу УД SIP клиент.

Разработчики FreeSWITCH в качестве эталонной операционной системы рекомендуют использовать Debian. В данной статье мы рассмотрим три варианта инсталляции FreeSWITCH 1.10 на Debian 10. Будет установлена последняя версия FreeSWITCH 1.10.

Начиная с версии FreeSWITCH 1.10 pgsql находится не в ядре, а в mod_pgsql.

Вы должны загружать mod_pgsql в pre_load_modules.conf.xml, а не в modules.conf.

pre_load_modules.conf.xml:

Подготовка

Установим необходимые пакеты и зависимости:

Установка из пакетов Debian

Самый простой способ установки последней версии FreeSWITCH из репозитотрия Debian. Выполним установку следующими командами:

FreeSWITCH теперь установлен и доступен по команде:

Установка из репозитотрия FreeSWITCH

Репозиторий Debian зависит от разных библиотек, которые не доступны в виде пакетов дистрибутива Debian. Данные пакеты доступны из репозитория FreeSWITCH. Производим установку:

Компиляция из исходного кода

Перед запуском FreeSWITCH.

Если вы установили FreeSWITCH из исходного кода, вы должны установить права доступа и владельца к файлам перед запуском FreeSWITCH. Если вы запустите FreeSWITCH в первый раз без установки прав доступа и владельца файлами, базы данных FreeSWITCH и файлы журналов будут созданы как пользователь «root». Затем, когда вы смените владельца, FreeSWITCH больше не будет иметь права на запись в эти файлы и не запустится.

Установка прав и разрешений

Systemd

Предварительно скомпилированные пакеты FreeSWITCH поставляются с собственными файлами systemd и сценариями для их установки. Обязательно соблюдайте правильное расположение файлов, поскольку они различаются между скомпилированными установками FreeSWITCH и установками пакетов.

При устранении неполадок, связанных с системой, журналы располагаются в файле /var/log/syslog и /var/log/daemon.log.

Файл модуля запускает Freeswitch как root, поэтому Freeswitch может установить его приоритет, создать несколько каталогов, если это необходимо, и т.д. Затем он отбросит привилегии, чтобы продолжить работу от имени пользователя и группы Freeswitch.

Теперь, когда файл модуля systemd настроен, вы можете скопировать его (не делать линк) в каталог /etc/systemd/system, где systemd ищет локальные пользовательские файлы, которые не будут перезаписаны обновлениями systemd.

Затем уведомите systemd о поиске изменений в его конфигурации:

Теперь вы готовы впервые запустить FreeSWITCH. Поскольку FS принадлежит пользователю freeswitch, он должен создавать свои базы данных и файлы журналов под этим пользователем (вместо root). Чтобы эти файлы были доступны для FreeSWITCH при последующих запусках.

Для остановки FreeSWITCH:

Чтобы настроить автоматический запуск FreeSWITCH во время загрузки системы:

Проверка работы службы FreeSWITCH:

Для перехода в консоль управления вводим команду:

Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.

Продолжаю небольшой цикл статей посвященному созданию «Умного дома» и пошаговых инструкций для самостоятельной установки/настройки.

Но сейчас речь пойдет в основном про Freeswitch и IP телефонию.

В августе разработчик открытой VoIP платформы IP телефонии FreeSWITCH, компания Signalwire опубликовал публичный релиз новой версии ПО – 1.8. (на данный момент уже выпущена 1.8.2).
В связи с выходом этой версии платформы IP телефонии Freesfitch 1.8, появилось решение установить его у себя на Raspberry 3 с установленным базовым образом системы умного дома MajorDoMo, под операционной системой Raspbian (Debian 9 Stretch) с некоторыми элементами автоматизации дома.


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

Спустя три месяца после выпуска и анонса публичного релиза 1.8 версии в руководстве по установке для Debian 9 на официальном сайте, FreeSWITCH на данный момент опубликована инструкция по установке.

Однако мне не удалось установить на свой Rasberry ни один из вариантов, приведенных в инструкции. Не так давно было предупреждение о несовместимости и приходилось устанавливать из исходных кодов. Также в официальной документации можно найти установку на Raspberry Pi, но она уже устарела. Поэтому опишу свой вариант установки на Raspberry P, сделав небольшую пошаговую инструкцию. В прошлых статьях постарался описать, как и с чего начать работу с терминалом и командной строкой, поэтому, если немного непонятно, рекомендую прочитать предыдущие статьи (ссылки будут приведены в конце статьи). Принцип такой же, сделал — заработало, перепроверил, подготовил инструкцию, чтоб старший сын смог повторить и немного разобраться в том, что и как делает.

Установка FreeSWITCH 1.8.2 из исходных кодов

Подключаемся к Raspberry через Putty.

Чтоб перед каждой командой не набирать sudo, выполняем команду sudo –i. После этого, работаем с правами администратора системы, автоматически перешли в директорию root. Чтоб узнать в какой директории находишься можно выполнить команду Pwd.


Переходим в домашнюю директорию, затем скачиваем версию freeswitch 1.8.2:


После завершения скачивания в домашней директории появляется папка с исходниками Freswitch. Переходим в неё (полный путь: /home/pi/freeswitch) и устанавливаем необходимые программы для сборки из исходников и переходим в директорию freeswitch:


Прежде, чем собирать программу из исходников, необходимо сначала собрать конфигуратор, запускаем:


Платформа Freeswitch имеет модульную структуру, поэтому перед установкой отредактируем список необходимых модулей:


По большей части список остался как по умолчанию, у меня отключены некоторые видео кодеки, opal, png.
Подключен русский языковой модуль, mod curl endpoints, mod_portaudio,
Устанавливаем зависимости для конфигурации и сборки сервера. Используем флаг –y, чтобы команда автоматически ответила Yes на все вопросы системы:


Устанавливаемые пакеты зависят от подключаемых модулей. Если не хватает какого-либо пакета, то на следующих двух шагах может появиться ошибка.

Конфигурация и установка сервера FreeSWITCH

После этого необходимо запустить конфигуратор для проверки наличия всех зависимостей, а также установки дополнительных опций сборки. Конфигуратор построит Makefile, основываясь на полученных знаниях и файле makefile.am.


Приступим к самой установке:


При положительном результате Freeswitch устанавливается по умолчанию в директорию /usr/local/freeswitch , на этапе окончания конфигурации можем просмотреть список и размещение директорий FS.



Установим звуковые файлы с поддержкой русского языка:


На этом процесс установки можно сказать завершён.

Для предотвращения записи мелких файлов БД на флэш память и увеличение её срока жизни, в файле /etc/fstab добавляем строчку:

tmpfs /usr/local/freeswitch/db tmpfs defaults 0 0

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

Настройка системы после установки FreeSWITCH.

В документации на FreeSWITCH есть предупреждение, поэтому не рекомендую пробовать запускать FS сразу же после установки.

**Внимание! Если вы устанавливали FreeSWITCH из исходного кода, вам необходимо установить права доступа на каталоги и файлы. Если вы запустите FreeSWITCH после установки — он по умолчанию запустится от 'root'. Менять права на каталоги необходимо до первоначального запуска.**

Создаем нового пользователя и установим права и изменим владельцев на файлы FreeSwitch


Далее копируем файл авто запуска в systemd, переименовывая его, меняем права доступа.
FreeSWITCH поставляется с файлом systemd, который при правильной настройке во время загрузки контролирует FreeSWITCH и запускает его в качестве демона, перезапускает его, если FS не работает.


Делаем ссылку на файл запуска и создаем ссылку на файл запуска консоли FS:


Добавляем сервис freeswitch в автозагрузку:


На всякий случай перегружаем Raspberry (как помните пока мы работаем из под root): reboot

После перезапуска даем команду опять входим через sudo -i, запускаем htop и видим запущенные процессы FreeSWITCH.

Немного о первоначальных настройках:

После установки FreeSWITCH готов к работе, в нём по умолчанию есть 20 абонентов с номерами 1000-1019. пароль по умолчанию для абонентов VoIP указан в файле /usr/local/freeswitch/conf/vars.xml и равен 1234. В директории /usr/local/freeswitch/conf/derectory/default находятся 20 xml файлов, каждый из которых отвечает за абонента с соответствующим номером. Можем поставить пароль на каждого абонента, меняя имя файла и данные в его содержимом можем изменить абонентскую нумерацию и ёмкость.

Если потребуется это делать, то после редактирования файлов нужно запустить консоль FreeSwitch: fs_cli и в консольном окне даем команду reloadxml . По этой команде FS перечитывает XML файлы и принимает изменения.


Выход из консоли: ctrl+D или же набрав команды /exit или /quit

Сейчас попробуем подключить IP абонентов. Для проверки связи я использовал на ПК под Windows: софтфоны MicroSIP и PhonerLite и на мобильном телефоне под ОС Android CSipSimle, настройки следующие (имя аккаунта – номер телефона, SIP сервер – адрес нашего Raspberry,:
Зеленый значок в нижней строке состояния этих программ означает, что абонент авторизован на нашем сервере VoIP и готов к связи.


Набрав номер, мы можем проверить вызов абонента и некоторые другие функции IP мини АТС.
Но особого применения в домашних условиях типовой офисной АТС я не вижу. Попробуем использовать более расширенные возможности FreeSWITCH.

Freeswitch имеет модульную структуру, подключаемые модули можно посмотреть в файле
modules.conf.xml

Отредактируем его, я отключил видео кодеки и подключил русский языковой модуль а также mod_xml_rpc.


в строке перед и после наименования модуля. Отключить — наоборот поставив эти символы, небольшой пример, первый модуль включен, второй отключен:


После этого редактируем, если хочется изменить, несложные настройки (порт, пользователь, пароль) самого модуля в файле xml_rpc.conf.xml, который находится в этой же директории.
nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml

По умолчанию: пользователь — freeswitch, пароль works, порт 8080.

Перегружаем или фрисвитч или же сам сервер. Можно сделать несколькими способами: перезагрузив всю систему (reboot), используя команды управления службами: systemctl stop freeswitch затем systemctl start freeswitch или же systemctl restart freeswitch .


Попробуем немного дальше пойти:

Набрав в браузере запрос получаем отображение статуса FS:



Синтаксис довольно простой, если команда содержит больше чем одно слово, то первое и второе слово разделяются знаком вопроса, а остальные пробелами.

Попробуем выполнить эту команду из MajorDoMo: из главной страницы «Умного Дома» переходим в Панель Управления — Консоль

В ней набираем команду:


В ответ получаем состояние нашего сервера VoIP.


Теперь попробуем провести следующий эксперимент:

Идея в том, чтобы инициировать звонок (с помощью функции originate) со стороны «Умного Дома» абоненту с номером 1001 (MicroSip), а потом состоявшийся вызов переводить в план набора для исходящих вызовов на абонента 1002 (PhonerLite). Команда API выглядит так: originate user/1001 1002 XML default инициирование вызов в консоли номер 1001, после поднятия (автоподнятия) трубки вызывается номер и 1002 из плана набора default.

Переводим её в понятный вид для MajorDoMo и браузера:


Вначале звонит один софтфон, спустя несколько секунд идёт звонок на второй.


В качестве заключения, или небольшая практическая реализация

Не так давно у меня была потребность в организации связи с человеком, который физически не мог позвонить (набрать номер) по сотовому телефону. На данный момент необходимость в этом отпала, но всё таки решил проверить возможность реализации. Используя VoIP шлюз (более бюджетное решение на FXS окончаниях или же подороже GSM шлюз), беспроводную кнопку «умного дома» можно при желании это реализовать.

Второй вариант: Система умного дома MajorDoMo имеет голосового помощника Алису. Сейчас можно попытаться связать «Умный Дом» с владельцем и его мобильным телефоном через сети общего пользования.

Читайте также: