Я давно присматривался к FreeSwitch. Ряд преимуществ заставляют задуматься о внедрении. Одно из них — работа со Skype через API, причем бесплатно ;) Часто возникает необходимость принять Skype-звонки. Оборудование и ПО стоит немалых денег. В интенете есть материалы как сочетать прошлую версию Skype с FreeSwitch, но Мелкомягкие перекрыли эту возможность. Но добрые люди решили этот вопрос. Правда статей по этому вопросу почти нет. Пришлось компилить из старых описаний, новых поправок и главное решить задачу — собрать все только из репозиториев. Только .deb пакеты.
Итак по действиям.
1. добавим репозиторий
echo 'deb http://files.freeswitch.org/repo/deb/debian/ wheezy main' >> /etc/apt/sources.list.d/freeswitch.list
2. Добавим ключ
curl http://files.freeswitch.org/repo/deb/debian/freeswitch_archive_g0.pub | apt-key add -
or
gpg --keyserver pool.sks-keyservers.net --recv-key D76EDC7725E010CF
gpg -a --export D76EDC7725E010CF | sudo apt-key add -
3. Обновим список пакетов и установим FSW
apt-get update
apt-cache search freeswitch
apt-get install freeswitch-meta-vanilla freeswitch-sounds freeswitch-lang-ru\
freeswitch-mod-say-ru freeswitch-sounds-ru
НЕ ЗАПУСКАЕМ ЕГО !!!!
4. подготовка к установке skype
apt-get install \
libx11-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev \
x11proto-core-dev x11proto-input-dev x11proto-kb-dev xtrans-dev
apt-get install xvfb pulseaudio
nano /etc/init/pulseaudio.conf # раскоментировать "start on ..." и там же удаляем в строке запуска --high-priority
nano /etc/pulse/system.pa # добавляем:
load-module module-null-sink
load-module module-native-protocol-unix
У меня просто закоментить все и оставить только это не получилось. Опытным путем заработало :
# ------------------------------------------------------------------------------
load-module module-null-sink
load-module module-native-protocol-unix
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
load-module module-detect
.endif
.ifexists module-esound-protocol-unix.so
###############load-module module-esound-protocol-unix ## Если забыли закоментить - Глюк еще тот.
.endif
###load-module module-native-protocol-unix
### Automatically restore the volume of streams and devices
load-module module-stream-restore
load-module module-device-restore
### Automatically restore the default sink/source when changed by the user
### during runtime
### NOTE: This should be loaded as early as possible so that subsequent modules
### that look up the default sink/source get the right value
load-module module-default-device-restore
### Automatically move streams to the default sink if the sink they are
### connected to dies, similar for sources
load-module module-rescue-streams
### Make sure we always have a sink around, even if it is a null sink.
####load-module module-always-sink
### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle
### Enable positioned event sounds
load-module module-position-event-sounds
###----------------------------------------------------------------
nano /etc/init.d/pulseaudio # удалить в строке запуска --high-priority
в /etc/pulse/daemon.conf выставляем значения:
daemonize = yes
system-instance = yes
resample-method = trivial
flat-volumes = yes
default-sample-rate = 48000
default-sample-channels = 1
default-fragment-size-msec = 20
alternate-sample-rate = 44100
не забудьте снять коммент к строке :
default-script-file = /etc/pulse/default.pa
!!! Настройка пульс-аудио самый мерзкий и гиморный кусок. Малейшая опечатка и либо звук не идет, либо срываются звонки.
5. Собственно скайп
раскомментировать в /etc/apt/sources.list
deb http://archive.canonical.com/ubuntu trusty partner
Далее:
apt-get update
apt-get install skype freeswitch-mod-skypopen
apt-get install <module_name> # если чего еще надо. например :
aptitude install freeswitch-mod-callcenter freeswitch-mod-flite \
freeswitch-mod-shout freeswitch-mod-pocketsphinx \
freeswitch-mod-xml-curl freeswitch-mod-rtmp
Создадим пользователя под скайп (пароль любой, к примеру 'nopassword'), я не хочу что бы skype под root крутился. ну не верю я MS.
adduser skypeuser
добавим его в пульс
adduser skypeuser pulse-access
Копируем конфиг в /etc/freeswitch
cp -a /usr/share/freeswitch/conf/vanilla /etc/freeswitch
Меняем владельца папок на freeswitch
chown -R freeswitch:freeswitch /var/{log,lib}/freeswitch
создадим файл конфигурации для skypopen - /etc/freeswitch/autoload_configs/skypopen.conf.xml :
<configuration name="skypopen.conf" description="Skypopen Configuration">
<global_settings>
<param name="debug" value="8"/>
<param name="dialplan" value="XML"/>
<param name="context" value="default"/>
<param name="destination" value="7676"/>
<param name="skype_user" value="PupkinTehnologies"/>
<param name="report_incoming_chatmessages" value="true"/>
<param name="silent_mode" value="false"/>
<param name="write_silence_when_idle" value="true"/>
<!-- <param name="setsockopt" value="true"/> -->
</global_settings>
<!-- one entry follows per each skypopen interface -->
<per_interface_settings>
<interface id="1" name="skype101">
<param name="X11-display" value=":101"/>
<param name="skype_user" value="PupkinTehnologies"/>
</interface>
<interface id="2" name="skype102">
<param name="X11-display" value=":102"/>
<param name="skype_user" value="PupkinTehnologies"/>
</interface>
<interface id="3" name="skype103">
<param name="X11-display" value=":103"/>
<param name="skype_user" value="PupkinTehnologies"/>
</interface>
</per_interface_settings>
</configuration>
и прописываем в /etc/init.d/sk.sh параметры запуска Skype`ов и Х`ов :
#!/bin/sh
chown -R skypeuser /run/user/0
#start the fake X server on the given port
/usr/bin/Xvfb :101 -ac -screen 0 1024x768x8 &
sleep 3
# start a Skype client instance that will connect to the X server above, and will login to the Skype network using the 'username password' you send to it on stdin.
su skypeuser -c "/bin/echo 'PupkinTehnologies password123'| DISPLAY=:101 /home/skypeuser/skypopen/linkdir/skype101 --dbpath=/home/skypeuser/skypopen/confdir/skype101 --pipelogin &"
sleep 7
#start the fake X server on the given port
/usr/bin/Xvfb :102 -ac -nolisten tcp -screen 0 1024x768x8 &
sleep 3
# start a Skype client instance that will connect to the X server above, and will login to the Skype network using the 'username password' you send to it on stdin.
su skypeuser -c "/bin/echo 'PupkinTehnologies password123'| DISPLAY=:102 /home/skypeuser/skypopen/linkdir/skype102 --dbpath=/home/skypeuser/skypopen/confdir/skype102 --pipelogin &"
sleep 7
#start the fake X server on the given port
/usr/bin/Xvfb :103 -ac -nolisten tcp -screen 0 1024x768x8 &
sleep 3
# start a Skype client instance that will connect to the X server above, and will login to the Skype network using the 'username password' you send to it on stdin.
su skypeuser -c "/bin/echo 'PupkinTehnologies password123'| DISPLAY=:103 /home/skypeuser/skypopen/linkdir/skype103 --dbpath=/home/skypeuser/skypopen/confdir/skype103 --pipelogin &"
sleep 7
exit 0
!!! помните, что путь /home/skypeuser/skypopen/ должен существовать.
mkdir /home/skypeuser/skypopen/
mkdir /home/skypeuser/skypopen/confdir
mkdir /home/skypeuser/skypopen/confdir/skype101
mkdir /home/skypeuser/skypopen/confdir/skype102
mkdir /home/skypeuser/skypopen/confdir/skype102
mkdir /home/skypeuser/skypopen/linkdir
ln -s /usr/bin/skype /home/skypeuser/skypopen/linkdir/skype101
ln -s /usr/bin/skype /home/skypeuser/skypopen/linkdir/skype102
ln -s /usr/bin/skype /home/skypeuser/skypopen/linkdir/skype103
Создайте каталоги и сделайте для очистки совести :
chown -R skypeuser:skypeuser /home/skypeuser/skypopen
первый раз надо зацепиться по VNC и уговорить скайп работать :) проставить язык и согласться с лицензией.
ВХОДИТЬ В ЗАПИСЬ НЕ НАДО !!! просо дождитесь приглашения и закройте vnc.
apt-get install x11vnc
x11vnc -display :101 ( первый скайп-клиент)
далее через vnc c клиентской машины vnc:<IP-address>:5900
повторите так же с клиентом :102 и :103
ну собственно reboot !!! :)
Теперь новый гимор. открываем два терминальчика для удобства. запускаем /etc/init.d/sk.sh
в первом открываем fs_cli . набираем load mod_skypopen
бежим во второе окошко и срочно запускаем x11vnc -display :101
коннектимся по vnc и разрешаем freeswich подключиться к API скайп. Не забываем галочку "запомнить выбор".
И так по очереди.
если все ок, добавим sk.sh в запуск при старте.
update-rc.d sk.sh enable default
перегружаемся.
создадим тестовые конфиги для FreeSwitch
диалпланчик /etc/freeswitch/dialplan/default/01_skcall.xml :
<include>
<extension name="local.skype">
<condition field="destination_number" expression="^7676$">
<action application="bridge" data="sofia/gateway/allokuku/89031112560"/>
</condition>
</extension>
</include>
подключение к провайдеру /etc/freeswitch/sip_profiles/external/allokuku.xml
<include>
<gateway name="allokuku">
<param name="username" value="1256"/>
<param name="password" value="PriveKitai"/>
<param name="realm" value="88.77.66.55"/>
<param name="from-user" value="1256"/>
<param name="from-domain" value="88.77.66.55"/>
<param name="proxy" value="88.77.66.55"/>
<param name="expire-seconds" value="800"/>
<param name="register" value="true"/>
<param name="retry-seconds" value="60"/>
<param name="context" value="public"/>
</gateway>
</include>
в /etc/freeswitch/autoload_configs/modules.conf.xml добавим строку <load module="mod_skypopen"/>
Помните !!! Для успешной работы СКАЙПЫ должны грузится ДО Freeswitch. Иначе модуль skypopen не будет грузится.
Рекомендую проверить загрузку модулей в файле modules.conf.xml :
mod_rtmp
mod_directory
mod_callcenter
mod_tts_commandline
mod_dingaling
mod_flite
mod_shout
mod_pocketsphinx
mod_cidlookup
mod_skypopen
mod_curl
mod_xml_curl
Если у вас не грузится автоматом модуль skypopen , скорее всего freeswitch прогружается раньше скайпов. вставьте в конец файла sk.sh строку. Должно быть так :
....
sleep 7
fs_cli -x "load mod_skypopen"
exit 0
Теперь материалы и благодарности добрым людям. Спасибо разработчикам. Вот ссылки на их сайт :
https://freeswitch.org/confluence/display/FREESWITCH/Debian
https://freeswitch.org/confluence/display/FREESWITCH/mod_skypopen
Респект и уважуха Олегусу за внятный русский мануал.
http://asterisk-pbx.ru/wiki/freeswitch/freeswitch_install
Нопасаран !!!! Мелкософт не пройдет !!!!