Как да FreeSwitch Skype Gateway
В тази статия бих искал да обмисля създаването на SIP Skype шлюз за пренасочване на входящи skype повиквания към корпоративна IP PBX (в този случай ще бъде Asterisk). Тъй като Skype е може би най-популярният VoIP клиент сред потребителите в момента, възможността да се обадите на вашата компания чрез Skype ще бъде допълнителен плюс за клиентите. За задачата е избран следният софтуер:
- Дебиан Лени
- свободен превключвател
- mod_skypiax
Как работи всичко
Тъй като протоколът на Skype е затворен, единственият начин за свързване към мрежата на Skype е нативният клиент, с който mod_skypiax взаимодейства чрез Skype API. Всеки стартиран Skype се равнява на един гласов канал, т.е. ако имате 30 работещи Skype-а, 30 души могат да ви се обадят едновременно. Струва си да се отбележи, че тази статия обсъжда използването само на един акаунт в Skype, който се използва едновременно от всички работещи Skype.
За да се сведе до минимум натоварването на сървъра, се използва "фалшив" X-сървър Xvfb и драйверът snd_dummy. Използването на фиктивния драйвер е оправдано и от факта, че по правило сървърите нямат истинска звукова карта.
Модулът mod_sofia отговаря за SIP във FreeSwitch, който, както можете да видите на диаграмата, осигурява SIP trunk към Asterisk PBX.
Алгоритъмът за входящо повикване изглежда по следния начин:
- Потребителят инициира обаждане до вашия скайп акаунт;
- mod_skypiax приема повикване, използвайки първото налично копие на skype клиента;
- 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++. Каним само професионалисти.