Небольшая инструкция по установке, первоначальной настройки и интеграции SIP сервера FreeSWITCH на систему Majordomo (базовый образ для RPi) для создания домашней АТС с возможностью видео вызовов.
FreeSWITCH – это программно-определяемый телекоммуникационный стек, позволяющий осуществлять цифровое преобразование проприетарных телекоммуникационных коммутаторов в универсальную программную реализацию, которая работает на любом стандартном оборудовании. Разработчики FreeSWITCH в качестве эталонной операционной системы рекомендуют использовать Debian 10.
1) Устанавливаем freeswitch из пакетов на сайте freswitch есть корректная инструкция по установке для Raspberry Pi:
И для Debian 10:
Установка (у меня RPi 3B) на базовом образе 4_44, приведу свой алгоритм:
Входим под пользователем sudo
sudo -i
apt-get update && apt-get install -y gnupg2 wget lsb-release
wget -O - https://files.freeswitch.org/repo/deb/rpi/debian-release/freeswitch_archive_g0.pub | apt-key add -
echo "deb http://files.freeswitch.org/repo/deb/rpi/debian-release/ `lsb_release -sc` main" > /etc/apt/sources.list.d/freeswitch.list
echo "deb-src http://files.freeswitch.org/repo/deb/rpi/debian-release/ `lsb_release -sc` main" >> /etc/apt/sources.list.d/freeswitch.list
apt-get update && apt-get install -y freeswitch-meta-all
Установка длится около получаса. По окончании перегрузим малинку.
Для проверки работоспособности зайдем в консоль 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, приведя строки к следующему виду:
<X-PRE-PROCESS cmd="set" data="default_password=1111"/>
……
….
<X-PRE-PROCESS cmd="set" data="use_profile=internal"/>
Перейдём к sip профилям. Сейчас мы будм использовать профиль internal (внутренний). Причина срывов связи у меня заключается в неправильной настройки сети SIP сервера. отредактируем его заменив пару строк:
sudo nano /etc/freeswitch/sip_profiles/internal.xml
<!-- закомментируем:
<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
<param name="ext-sip-ip" value="$${external_rtp_ip}"/>
-->
<param name="ext-rtp-ip" value="auto-nat"/>
<param name="ext-sip-ip" value="auto-nat"/>
Freeswitch имеет модульную структуру, подключаемые модули можно посмотреть в файле modules.conf.xml
Отредактируем его, подключив mod_xml_rpc, включающий поддержку WEB API, расскоментировав строку с этим модулем.
sudo nano /etc/freeswitch/autoload_configs/modules.conf.xm
Подробнее о модуле
Описание команд можно найти здесь:
Большинство команд в домашнем использовании не нужно.
На этом можно сказать первоначальная настройка SIP сервера закончена.
Перезапустим FreeSWITCH
sudo systemctl restart freeswitch.service
Попробуем организовать воздействие на SIP сервер с целью внешнего (со стороны сервера УД MajorDoMo) управления вызовами.
Попробуем организовать проверку работы нашей VoIP АТС.
Для начала я использую на ПК с Windows Sip клиенты MicroSIP (мне больше всех сипфонов понравился) и Linphone. На смартфоне с Android Linphone и ряд других.
На Raspberry Pi консольный клиент Linphonec (но в нём на данный момент ограниченная работоспособность)
Приведу для примера настройки MicroSIP:
Сетевый настройки, настройки нат и прочее пока не рассматриваю, для начала всё делаем в своей локальной сети.
Приблизительно такие же настройку и у других SIP клиентов.
Внимание! Старайтесь в настройке кодеков, особенно видео, чтоб предпочтительные были одинаковы. У меня установлен VP8.
Сделаем видеовызов с одного клиента на другой:
В качестве иллюстрации, я сделал звонок на одном ПК с двух sip клиентов. Включена отладочная информация
Так же можно и с двух ПК провести набор и ПК-Смартфон. Главное чтоб они были в одной сети.
Перейдем к небольшой интеграции с системой "Умного Дома"
Проверим работу WEB API
Набрав в браузере http://IP_RASPBERRY:8080/ попадаем на заглушку вебстраницы.
Запустить вебстраницу мне не удалось, но я особо и не пробовал, т.к. это не влияет на работоспособность voip сервера. Внешние команды просмотра и управления через API вполне работают.
О модуле xml_rpc
Набрав в браузере запрос получаем отображение статуса FS:
http://freeswitch:works@IP_RASPBERRY:8080/webapi/sofia?status%20profile%20internal
Откроем консоль MajorDoMo и выполним этот запрос консоли:
GetURL("http://freeswitch:works@IP_RASPBERRY:8080/webapi/sofia?status%20profile%20internal")
Получаем:
Сейчас сделаем вызов с инициатором которого будет наша система "Умного Дома":
Идея в том, чтобы инициировать звонок (с помощью функции originate) со стороны «MajorDomo» абоненту с номером 1003 (MicroSip), а потом состоявшийся вызов переводить в план набора для исходящих вызовов на абонента 1007 (смартфон Android sip клиент Linphone). Команда API выглядит так: originate user/1003 1007 XML default инициирование вызов в консоли номер 1003, после поднятия (или автоподнятия) трубки вызывается номер 1007 из плана набора default и видеозвонок поступает на смартфон.
Переводим её в понятный вид для MajorDoMo и браузера:
GetURL("http://freeswitch:works@192.168.1.99:8080/webapi/originate?user/1003%201007%20XML%20default")
Вначале звонит один софтфон, спустя несколько секунд идёт звонок на второй. Ради эксперемента, последний вызов я поставил оба sip клиента в режим автоответа.
Видеовызов установился автоматически.
Эту же команду можно поставить и в сценарии, действия и т.д.
На этом заканчиваю эту часть, единственное отмечу полу деятельности для последующей как настройки так и интеграции, довольно большое.
Этот способ довольно лёгкий, можно сделать и использовать Websocket, и управление по DTMF с мобильного телефона, так же имеется возможность использования технологии WebRTC и прикрутить к Web серверу УД SIP клиент.
Минск, Беларусь
На форуме: udvnl