Pull to refresh
69.9
Слёрм
Учебный центр для тех, кто работает в IT

Freeswitch — установка и интеграция с SIPML5

Reading time 4 min
Views 16K
В данной статье я постараюсь описать процесс установки и настройки Freeswitch и SIPML5, а заодно расскажу о решении возникших проблем, надеюсь что статья будет полезна и, как минимум, поможет сэкономить время тем кто столкнулся с подобной задачей. Итак, приступим!

В качестве ОС я использовал CentOS 6.6, но этим не ограничивался и пробовал установку также на Ubuntu 12.04 и 14.04, о проблемах, с которыми довелось столкнуться в процессе установки, я обязательно напишу.

Обновляем систему, отключаем SELinux и устанавливаем необходимые зависимости:

yum install git gcc-c++ autoconf automake libtool libogg-devel wget python ncurses-devel zlib-devel libjpeg-devel openssl-devel e2fsprogs-devel sqlite-devel libcurl-devel pcre-devel speex-devel ldns-devel libedit-devel patch libICE




Устанавливаем Freeswitch:

cd /usr/src
git clone https://freeswitch.org/stash/scm/fs/freeswitch.git
cd /usr/src/freeswitch
./bootstrap.sh –j


Подключаем необходимые модули, редактируем modules.conf:

mod_rtmp
mod_directory
mod_callcenter
mod_tts_commandline
mod_dingaling
mod_flite
mod_shout
mod_cidlookup
mod_curl
mod_xml_curl


Продолжаем процесс установки Freeswitch:

./configure -C
make
make install


Устанавливаем звуковые файлы, на всякий случай ставим все:

make sounds-install
make moh-install
make hd-moh-install
make hd-sounds-install
make uhd-moh-install
make uhd-sounds-install
make cd-sounds-install
make cd-moh-install


Установим русские звуковые файлы:

make sounds-ru-install
make cd-sounds-ru-install
make uhd-sounds-ru-install
make hd-sounds-ru-install


Добавим пользователя Freeswitch:

useradd --system --home-dir /usr/local/freeswitch freeswitch
passwd -l freeswitch


Установим права и владельцев на файлы FreeSwitch:

chown -R freeswitch:freeswitch /usr/local/freeswitch/
chmod -R g+w  /usr/local/freeswitch/
cp /usr/src/freeswitch/build/freeswitch.init.redhat /etc/init.d/freeswitch && chmod +x /etc/init.d/freeswitch
cp /usr/src/freeswitch/build/freeswitch.sysconfig /etc/sysconfig/freeswitch

cat >> /etc/sysconfig/freeswitch <<EOT
PID_FILE=/var/run/freeswitch/freeswitch.pid
FS_USER=freeswitch
FS_FILE=/usr/local/freeswitch/bin/freeswitch
FS_HOME=/usr/local/freeswitch
EOT

chkconfig --level 5 freeswitch on


Уберем дефолтные конфиги FreeSwitch и добавим ссылку на CLI:

rm -rf /usr/local/freeswitch/conf/dialplan/default/00* /usr/local/freeswitch/conf/dialplan/default/01_Talking_Clock.xml 
cd /usr/local/bin/ && ln -s /usr/local/freeswitch/bin/fs_cli fs_cli


Наверное первое что нужно сделать, это поменять пароль по-умолчанию для всех пользователей, а также, сменить пароль для голосовой почты:

/usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="default_password=ваш_новый_пароль"/>


Включим сообщения на русском:

/usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/ru/RU/elena"/>


Устанавливаем необходимые кодеки, я использовал только G711:

<X-PRE-PROCESS cmd="set" data="global_codec_prefs=PCMU,PCMA"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA"/>


Если Вам нужно включить запись разговоров всех внутренних звонков:

/usr/local/freeswitch/conf/dialplan/default.xml


Находим “Local_Extension” и добавляем строку:

<action application="record_session" data="$${base_dir}/recordings/${strftime(%Y%m%d_%H%M%S)}_${caller_id_number}_${destination_number}.wav"/>


Применяем изменения командой fs_cli -x «reloadxml». Все записи разговоров будут сохраняться в каталог: /usr/local/freeswitch/recordings/.

Переходим к настройке SIPML5. Активируем транспорт Websocket:

/usr/local/freeswitch/conf/sip_profiles/internal.xml
<param name="ws-binding"  value=":5066"/>


Запускаем Freeswitch и проверяем что вебсокет активирован:

fs_cli -x "sofia status profile internal" | grep WS-BIND-URL

WS-BIND-URL     	sip:mod_sofia@X.X.X.X:5066;transport=ws


Настройка завершена, но оказалось что в работе связки Freeswitch и SIPML5 есть некоторые проблемы, о которых я собираюсь рассказать:

Проблема № 1:

При звонке с SIPML5 на SIP-телефон или на SIPML5 клиента, происходит сброс звонка через n-секунд (обычно через 60 секунд). Причина такого странного поведения оказалась в проблеме обмена пакетами веб-клиента и сервера «Session-Expires: 120;refresher=uas», проблему можно решить отключив таймер по RFC 4028 SIP Session Timers:

/usr/local/freeswitch/conf/sip_profiles/internal.xml
<param name="enable-timer" value="false"/>


Проблема № 2:

Неожиданно возникли проблемы с DTMF для клиентов SIPML5, которые решились включением двойного режима DTMF (принимаем RFC2833 и INFO, а предлагаем RFC2833):

/usr/local/freeswitch/conf/sip_profiles/internal.xml 
<param name="liberal-dtmf" value="true"/>


Проблема № 3:

Как оказалось данная связка не хочет работать на ОС Ubuntu 12.04 из-за бага в openssl, который описан тут: freeswitch.org/jira/browse/FS-6431, решается он обновлением пакета openssl.
Tags:
Hubs:
+4
Comments 4
Comments Comments 4

Articles

Information

Website
slurm.io
Registered
Founded
Employees
51–100 employees
Location
Россия
Representative
Антон Скобин