Как да FreeSwitch Skype Gateway

В тази статия бих искал да обмисля създаването на SIP Skype шлюз за пренасочване на входящи skype повиквания към корпоративна IP PBX (в този случай ще бъде Asterisk). Тъй като Skype е може би най-популярният VoIP клиент сред потребителите в момента, възможността да се обадите на вашата компания чрез Skype ще бъде допълнителен плюс за клиентите. За задачата е избран следният софтуер:

  • Дебиан Лени
  • свободен превключвател
  • mod_skypiax
По принцип mod_skypiax може да работи и със Asterisk, но ми беше интересно да усетя FreeSwitch, а този модул първоначално беше написан за FreeSwitch.

Как работи всичко

Тъй като протоколът на Skype е затворен, единственият начин за свързване към мрежата на Skype е нативният клиент, с който mod_skypiax взаимодейства чрез Skype API. Всеки стартиран Skype се равнява на един гласов канал, т.е. ако имате 30 работещи Skype-а, 30 души могат да ви се обадят едновременно. Струва си да се отбележи, че тази статия обсъжда използването само на един акаунт в Skype, който се използва едновременно от всички работещи Skype.

За да се сведе до минимум натоварването на сървъра, се използва "фалшив" X-сървър Xvfb и драйверът snd_dummy. Използването на фиктивния драйвер е оправдано и от факта, че по правило сървърите нямат истинска звукова карта.

Модулът mod_sofia отговаря за SIP във FreeSwitch, който, както можете да видите на диаграмата, осигурява SIP trunk към Asterisk PBX.

Алгоритъмът за входящо повикване изглежда по следния начин:

  1. Потребителят инициира обаждане до вашия скайп акаунт;
  2. mod_skypiax приема повикване, използвайки първото налично копие на skype клиента;
  3. mod_sofia инициира SIP връзка към Asterisk PBX,който е свързан с mod_skypiax.

Обмислете процеса на инсталиране и конфигуриране на софтуера.

Инсталиране на FreeSwitch и mod_skypiax

Debian няма пакет за FreeSwitch, така че ни остават две опции за инсталиране: изграждане на източници от svn или създаване на източници на версия. Разбира се, има опция да се изгради deb пакет от изходните кодове и да се инсталира от него (което е идеологически най-правилното решение), но в този случай ще бъдат събрани и инсталирани куп модули, които са ненужни за шлюза. Затова ще разгледаме варианта с изходни кодове, а именно със svn.

Първо, нека поставим всичко необходимо за по-нататъшно сглобяване:

След това всички команди и действия се изпълняват като root, освен ако не е указано друго

apt-get -y install build-essential subversion automake autoconf wget libtool \ libncurses5-dev xvfb libx11-dev libasound2-dev xfs xfonts-100dpi xfonts-75dpi xfonts-scalable

Веднага ще направя резервация, че Xvfb и всичко, свързано с X сървъра, са необходими за стартиране на Skype клиента и изграждане на mod_skypiax

Изтеглете дървото на източника от svn:

cd /usr/src svn co svn.freeswitch.org/svn/freeswitch/trunk freeswitch cd freeswitch

Редактирайте /usr/src/freeswitch/modules.conf, за да отговаря на нашите нужди. За мен изглеждаше така: loggers/mod_console loggers/mod_logfile loggers/mod_syslog applications/mod_commands applications/mod_dptools applications/mod_fifo applications/mod_limit applications/mod_expr applications/mod_esf codecs/mod_g723 _1 codecs/mod_amr codecs/mod_g729 codecs/mod_voipcodecs codecs/mod_ilbc codecs/mod_speex dialplans/mod_dialplan_xml endpoints/mod_sofia endpoints/mod_ skypiax event_handlers/mod_event_socket event_handlers/mod_cdr_csv formats/mod_native_file formats/mod_sndfile formats/mod_local_stream formats/mod_tone_stream formats/mod_file_string xml_int/mod_xml_cdr

Всъщност монтаж и монтаж:

cd /usr/src/freeswitch; ./bootstrap.sh ; ./configure make && направете инсталиране

По подразбиране инсталацията се извършва в директорията /usr/local/freeswitch. Копирайте конфигурацията на mod_skypiax и началния скрипт, за да стартирате FreeSwitch:

cp /usr/src/freeswitch/src/mod/endpoints/mod_skypiax/configs/skypiax.conf.xml \ /usr/local/freeswitch/conf/autoload_configs/ cp /usr/src/freeswitch/debian/freeswitch.init /etc/init.d/freeswitch sed -i 's/ opt/usr\/ local/g' /etc/init.d/freeswitch

Стартираме потребителя, под който ще работи FreeSwitch: adduser --disabled-password --quiet --system --home /usr/local/freeswitch \ --gecos "FreeSwitch Voice Platform" --ingroup daemon freeswitch adduser freeswitch audio chown -R freeswitch.daemon /usr/local/freeswitch

Инсталиране и конфигуриране на Skype

Готовият deb пакет може да бъде изтеглен от официалния уебсайт на Skype, така че изтеглете и опитайте да инсталирате:

wget www.skype.com/go/getskype-linux-deb dpkg -i skype-debian_2.0.0.72-1_i386.deb

Тази статия първоначално е написана преди пускането на новата бета версия на Skype за Linux. Смея да предположа, че всичко работи и в новата версия.

Най-вероятно dpkg ще се закълне в липсващите зависимости, ще ги инсталира с apt-get и ще опита да инсталира Skype отново.

Получаваме потребителя, под който ще работи Skype:

adduser --home /home/skype --ingroup audio --disable-password skype

mkdir -p /home/skype/multi/interface01 chown -R skype.audio /home/skype/multi

Стартираме Skype на сървъра, за да проверим неговата производителност иконфигурирам:

/usr/bin/Xvfb:101 -ac & su skype -c "/bin/echo 'skype_user skype_secret' DISPLAY=:101 /usr/bin/skype \ --dbpath=/home/skype/multi/interface01 --pipelogin &" къдетоskype_userе името на предварително регистриран Skype акаунтskype_secretе паролата за този акаунт

Можете да проверите дали Skype е стартиран, като просто го потърсите в списъка с процеси. Сега трябва по някакъв начин да стигнете до GUI на Skype, за да направите необходимите настройки. За да направим това, ще използваме VNC сървър.

apt-get инсталирате x11vnc x11vnc -дисплей:101

След като се свържете чрез vnc към сървъра, можете да видите Skype, стартиран в предишната стъпка, в настройките на който трябва да премахнете всички ненужни (деактивиране на събития, автоматични промени на състоянието и т.н.) и да изберете фиктивния драйвер като всички звукови устройства.

Сега да преминем към най-важната настройка - Public API. Тук трябва да разрешите на mod_skypiax достъп до Skype. Самият Skype ви позволява да добавяте програми към списъка "Разрешени програми" само след като се свържат със Skype, но само за да направите такава настройка, не е препоръчително да стартирате FreeSwitch и mod_skypiax, така че създателите на mod_skypiax написаха малка помощна програма, която емулира mod_skypiax, извикващ Skype. Той е в дървото на източника на FreeSwitch и трябва да се компилира отделно:

cd /usr/src/freeswitch/src/mod/endpoints/mod_skypiax/configs gcc -Wall -ggdb skypiax_auth.c -o skypiax_auth -lX11 ./skypiax_auth :101 Върнете се към прозореца за свързване на vnc - в диалоговия прозорец, който се показва, щракнете върху „Да“ и проверете кутия „Запомни тази селекция“.

Това завършва конфигурацията на Skype клиента. Остава само да клонирате получената конфигурация за необходимия брой Skype-канали.

cd /home/skype/multi за i в $(seq 2N); do i=$(printf "%02d" $i); cp -a интерфейс01 интерфейс $i; Свършен

къдетоNе желаният брой Skype канали.

За да стартирате Skype, можете да използвате следния скрипт:

Това завършва настройката на Skype. Остава да свържете FreeSwitch със Skype'ami.

Конфигуриране на mod_skypiax

Редактирайте конфигурацията на mod_skypiax за необходимия брой канали:

По-долу е част от моята конфигурация като пример:

Тук7777е разширението, към което ще бъде насочено входящото Skype повикване;:101- Показване на X сървър (за втория канал ще бъде :102 и т.н.)skype_user- Име на Skype акаунт

Стартираме FreeSwitch и се опитваме да заредим mod_skypiax:

/etc/init.d/freeswitch start /usr/local/freeswitch/bin/fs_cli freeswitch@internal> заредете mod_skypiax

Ако всичко е наред, тогава като изпълните командатаsk list, можете да видите списък с интерфейси на skypiax.

Добаветеmod_skypiaxкъм списъка с модули, заредени по време на стартиране на FreeSwitch. За да направите това, във файла/usr/local/freeswitch/conf/autoload_configs/modules.conf.xmlтрябва да разкоментирате реда

Важен момент е, че skype клиентите трябва да бъдат стартирани преди да се зареди модулът mod_skypiax, т.е. преди да стартирате FreeSwitch. Също така, спирането на копия на Skype, вече активирани от mod_skypiax, ще доведе до срив на FreeSwitch.

Както сигурно си спомняте, входящите Skype повиквания ще бъдат насочвани към разширението7777, което все още не е създадено. За да направите това, в директорията/usr/local/freeswitch/conf/dialplan/defaultсъздайте файл02_skype.xmlсъс следното съдържание:

къдетозвездичкае името на шлюза, към койтооставяне на повикване (PBX базирана на Asterisk)5555- разширение на този шлюз (за тестване е най-добре просто да поставите Music On Hold там)

SIP магистрала между FreeSwitch и Asterisk

На сървъра с FreeSwitch в директорията/usr/local/freeswitch/conf/sip_profiles/externalсъздайте файлasterisk.xmlсъс следното съдържание:

къдетозвездичкае името на шлюза (трябва да съвпада с посочения в предишната стъпка);asterisk.example.tld- име на хост със звездичка;freeswitch— потребителско име за достъп до шлюза;supersecretе паролата.

На сървъра на Asterisk добавете следното къмsip.conf: [freeswitch] type=peer host=1.1.1.1username=freeswitchport=5080 fromdomain=1.1.1.1 secret=supersecret

rasterisk -x 'презареждане на глътка'

Сега, когато постъпи обаждане къмskype_user, FreeSwitch ще го свърже с разширението5555на хоста на Asterisk.

UPD:Според yitzhakv, сега във Freeswitch svn trunk модулът skypiax е преработен и преименуван на skypopen, което е по-малко стабилно. Следователно, за да изтеглите източниците, трябва да използвате командата svn co svn.freeswitch.org/svn/freeswitch/tags/1.0.4 freeswitch

Hardcore conf в C++. Каним само професионалисти.