База знаний

www. IT-Mehanika .ru --  журнал доброго админа

FeeSwitch + Skype шлюз. Установка из репозиториев

Я давно присматривался к 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

Нопасаран !!!! Мелкософт не пройдет !!!!

 

 

 

 

 

 

 

 

You have no rights to post comments