В данной статье я постараюсь описать процесс установки и настройки Freeswitch и SIPML5, а заодно расскажу о решении возникших проблем, надеюсь что статья будет полезна и, как минимум, поможет сэкономить время тем кто столкнулся с подобной задачей. Итак, приступим!
В качестве ОС я использовал CentOS 6.6, но этим не ограничивался и пробовал установку также на Ubuntu 12.04 и 14.04, о проблемах, с которыми довелось столкнуться в процессе установки, я обязательно напишу.
Обновляем систему, отключаем SELinux и устанавливаем необходимые зависимости:
Устанавливаем Freeswitch:
Подключаем необходимые модули, редактируем modules.conf:
Продолжаем процесс установки Freeswitch:
Устанавливаем звуковые файлы, на всякий случай ставим все:
Установим русские звуковые файлы:
Добавим пользователя Freeswitch:
Установим права и владельцев на файлы FreeSwitch:
Уберем дефолтные конфиги FreeSwitch и добавим ссылку на CLI:
Наверное первое что нужно сделать, это поменять пароль по-умолчанию для всех пользователей, а также, сменить пароль для голосовой почты:
Включим сообщения на русском:
Устанавливаем необходимые кодеки, я использовал только G711:
Если Вам нужно включить запись разговоров всех внутренних звонков:
Находим “Local_Extension” и добавляем строку:
Применяем изменения командой fs_cli -x «reloadxml». Все записи разговоров будут сохраняться в каталог: /usr/local/freeswitch/recordings/.
Переходим к настройке SIPML5. Активируем транспорт Websocket:
Запускаем Freeswitch и проверяем что вебсокет активирован:
Настройка завершена, но оказалось что в работе связки Freeswitch и SIPML5 есть некоторые проблемы, о которых я собираюсь рассказать:
Проблема № 1:
При звонке с SIPML5 на SIP-телефон или на SIPML5 клиента, происходит сброс звонка через n-секунд (обычно через 60 секунд). Причина такого странного поведения оказалась в проблеме обмена пакетами веб-клиента и сервера «Session-Expires: 120;refresher=uas», проблему можно решить отключив таймер по RFC 4028 SIP Session Timers:
Проблема № 2:
Неожиданно возникли проблемы с DTMF для клиентов SIPML5, которые решились включением двойного режима DTMF (принимаем RFC2833 и INFO, а предлагаем RFC2833):
Проблема № 3:
Как оказалось данная связка не хочет работать на ОС Ubuntu 12.04 из-за бага в openssl, который описан тут: freeswitch.org/jira/browse/FS-6431, решается он обновлением пакета openssl.
В качестве ОС я использовал 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.