[Из песочницы] Asterisk + FreeSwitch + Skype. Подробное руководство

hEja2AV1RzI.jpgДоброго времени суток, жителям Хабра!

Имея опыт в области установки voip-серверов на базе Asterisk, решил предложить своё подробное руководство по установке call-центра на базе Asterisk в связке со Skype. В виду популяризации Skype эта сеть стала использоваться для call-центров многих компаний. Использование ее официального клиента очень ограничивает нас в возможностях. Данная сборка позволяет увеличить число одновременных вызовов со Skype-сети.

1. Обновляем серверУстанавливаем все необходимые пакеты и обновления. В консоли вводим команды: apt-get update apt-get upgrade apt-get install build-essential mc automake autoconf bison flex libtool libncurses5-dev libssl-dev dahdi-source subversion x11vnc yate-qt4 yate-mysql yum op-panel apt-get -f install apt-get install yate-qt4 yate-mysql yum op-panel 2. Замечания по безопасности Почти всегда сразу после установки сервера начинается подбор паролей по стандартному порту (22) протокола ssh к вашему серверу. Если не дай Бог, Вы поставите стандартный, известный «подборщикам» пароль, ваш сервер захватят и удалят все важные данные. Самый простой способ — изменить номер порта: nano /etc/ssh/sshd_config Найдите строку (почти в самом начале): Port 22. Смените число 22 на любое, которое вам нравится, до бесконечности (желательно, не более 65535). Перезапустите ssh: /etc/init.d/ssh restart 3. Установка Asterisk 3.1. Все устанавливается из репозиториев apt-get install asterisk asterisk-mp3 asterisk-mysql asterisk-ooh323c asterisk-h323 asterisk-sounds-main asterisk-moh-opsound-g722 asterisk-moh-opsound-gsm asterisk-moh-opsound-wav 3.2. Установка Web GUI: mkdir -p /root/asterisk/asterisk-gui cd /root/downloads/asterisk-gui/ svn checkout http://svn.digium.com/svn/asterisk-gui/trunk asterisk-gui svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0/ cd /root/downloads/asterisk-gui/2.0/ ./configure make make install # (Устанавливается в /var/lib/asterisk/) cp -r /etc/asterisk /etc/asterisk.backup chown -R asterisk: asterisk /var/lib/asterisk/ 3.3. Добавляем в файл manager.conf данные для входа: nano /etc/asterisk/manager.conf

enabled = yes webenabled = yes port = 5038 bindaddr = 127.0.0.1

[root] secret = toor read = system, call, log, verbose, command, agent, user, config write = system, call, log, verbose, command, agent, user, config Где «root» это администратор сервера, а «toor» это пароль администратора.Редактируем http.conf: nano /etc/asterisk/http.conf enabled=yes enablestatic=yes bindaddr = 127.0.01 redirect = / /static/config/cfgbasic.html [post_mappings] backups = /var/lib/asterisk/gui_backups 3.4. Проводим необходимые действия для завершения cd /root/downloads/asterisk-gui/2.0/ make checkconfig Удаляем папку /usr/share/asterisk/static-http/ перед созданием символьной ссылки: ln -s /var/lib/asterisk/static-http/ /usr/share/asterisk/ mk dir /usr/share/asterisk/static-http/config chmod 777 /usr/share/asterisk/static-http/config /etc/init.d/asterisk restart Проверить: В Ubuntu корневая директория веб сервера Asterisk’a располагается в /usr/share/asterisk/static-http/, а GUI устанавливается в /var/lib/asterisk/static-http, поэтому необходимо удалить пустую папку:

rmdir /usr/share/asterisk/static-http/ И создать ссылку: ln -s /var/lib/asterisk/static-http/ /usr/share/asterisk/

cd ~/asterisk-gui/ sudo make checkconfig 3.5. Запуск и остановка AsteriskЕсли вы установили Asterisk, можно запустить его командой:

/usr/src/asterisk -vvvgc Остановить Asterisk из CLI можно командой «stop now».Командой без аргументов, Asterisk запускается как демон. /usr/sbin/asterisk Подключится к командному интерфейсу (CLI) можно используя аргумент 'r'. /usr/sbin/asterisk -r или просто asterisc -r Перезагрузка файлов конфигураций без полной перезагрузки: asterisk -rx reload Если GUI зависает на «Checking write permission for gui folder», то: Сначала нужно заменить строчку в файле /var/lib/asterisk/static-http/config/js/astman.js timeout: '60000' На timeout: '6' Если не помогло, то сбросить все права:

chown -R asterisk: asterisk /var/lib/asterisk/ chmod -R 777 /var/lib/asterisk/ chown -R asterisk: asterisk /etc/asterisk/ chmod -R 777 /etc/asterisk/ 3.6. Создание группы и пользователя Asterisk /usr/sbin/groupadd asterisk /usr/sbin/useradd -d /var/lib/asterisk -g asterisk asterisk 3.7. Изменение правИзмените права на использование следующих файлов:

chown --recursive asterisk: asterisk /var/lib/asterisk chown --recursive asterisk: asterisk /var/log/asterisk chown --recursive asterisk: asterisk /var/run/asterisk chown --recursive asterisk: asterisk /var/spool/asterisk chown --recursive asterisk: asterisk /usr/lib/asterisk chown --recursive asterisk: asterisk /etc/asterisk/ ## Если Вы используете Zaptel: chown --recursive asterisk: asterisk /dev/zap ## Если Вы используете DAHDI chown --recursive asterisk: asterisk /dev/dahdi #---------------------------------------------------- chmod --recursive u=rwX, g=rX, o= /var/lib/asterisk chmod --recursive u=rwX, g=rX, o= /var/log/asterisk chmod --recursive u=rwX, g=rX, o= /var/run/asterisk chmod --recursive u=rwX, g=rX, o= /var/spool/asterisk chmod --recursive u=rwX, g=rX, o= /usr/lib/asterisk ## Если Вы используете Zaptel chmod --recursive u=rwX, g=rX, o= /dev/zap ## Если Вы используете DAHDI chmod --recursive u=rwX, g=rX, o= /dev/dahdi #---------------------------------------------------- chown --recursive asterisk: asterisk /etc/asterisk chmod --recursive u=rwX, g=rX, o= /etc/asterisk 3.8. Директории Asterisk/usr/lib/asterisk/modules: Содержит бинарные файлы (модули, кодеки)./var/lib/asterisk: Содержит переменные данные (звуки, скрипты и т.д.)./var/spool/asterisk: Файлы создаваемые в процессе работы (голосовые сообщения, исходящие вызовы и т.д.)./var/log/asterisk: Логи, информация о вызовах./etc/asterisk: Конфигурационные файлы Asterisk.

Конфигурации: musiconhold.conf — Настройка параметров «музыки при удержании» MusicOnHold.cdr_mysql.conf — Настройка хранения записей о звонках в MySQL.manager.conf — Настройка интерфейса Manager.meetme.conf — Настройка конференций (meetme).mgcp.conf — Настройка параметров MGCP-устройств.parking.conf — Параметры «парковки» вызовов «Call parking».voicemail.conf — Параметры голосовой почты (VoiceMail).agents.conf — Агенты Asterisk.extensions.conf — Номерной план Asterisk.iax.conf — Настройка IAX-устройств.modem.conf — Настройка ISDN с использованием ISDN4Linux.vpb.conf — Настройка аппаратуры Voicetronix.alsa.conf — Настройки звукового драйвера ALSA для консольного пользователя.festival.conf — Параметры работы с синтезатором речи festival.modules.conf — Настройка модулей Asterisk.zapata.conf — Настройка аналоговых устройств телефонии digium.asterisk.conf — Определение расположения каталогов Asterisk.indications.conf — Настройка параметров аналоговых АТС различных стран.rpt.conf — Параметры протокола rtp.logger.conf — Параметры журналирования Asterisk.

Панель управления Asterisk Web GUI будет доступна по адресу: host:8088, где host — адрес сервера, на котором расположен Asterisk.

3.9 Настройка Asterisk через Web GUI

Trunks. Voip trunks: Provider Name: SIBNETHostname: sibnet.ruUsername: user123Password: pass123CallerID: userFromDomain: sibnet.ruFromUser: user123

Outgoing Calling Rules: Calling Rule Name: WorldPattern: _XXXXXXXXXXXCaller ID: AdminDestination: 6001Use Trunk: SIBNET

DialPlans: DialPlan Name: userInclude Outgoing Calling Rules: WorldInclude Local Contexts: default parkedcalls conferences ringgroups voicemenus queues voicemailgroups directory pagegroups page_an_extension

Incoming Calling Rules: Pattern: _XXXXXXXXXXXDestination: 6001

4. Переходим к установке Skype 4.1. Создать файл /etc/yum.repos.d/skype.repo и внести в него: [skype] name=Skype Repository baseurl=http://download.skype.com/linux/repos/fedora/updates/i586/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-skype Установить командой: yum --nogpgcheck install skype Или из пакетов: wget www.skype.com/go/getskype-linux-deb apt-get -f install dpkg -i skype-debian_2.0.0.72–1_i386.deb или dpkg -i getskype-linux-deb aptitude install skype 4.2. Установка дополнительных пакетовНа rpm.pbone.net ищем, качаем и устанавливаем пакеты qt4, qt4-x11.Также:

yum install x11vnc или apt-get install x11vnc 4.3. НастройкаЗаводим пользователя, под которым будет работать Skype:

adduser --home /home/skype --ingroup audio --disabled-password skype Создаем директорию, из которой Skype будет читать свой конфиг: mkdir -p /home/skype/multi/interface01 chown -R skype.audio /home/skype/multi Если skype будет выключаться, то можно попробовать такой способ: nano или vim /usr/local/bin/skype_start со следующим содержимым: Спойлер #!/bin/sh SKYPE_SYSTEM_USER=skype SKYPE_HOME=/home/skype/multi SKYPE_USER=username SKYPE_PASSWORD=userpass SKYPE_INSTANCES=N XVFB=/usr/bin/Xvfb module_reload () { rmmod snd-dummy modprobe snd-dummy } skype_start () { for i in $(seq 1 $SKYPE_INSTANCES); do i=`printf »%02d» $i` $XVFB:1$i -ac >> /dev/null 2>&1 & sleep 3 su $SKYPE_SYSTEM_USER -c »/bin/echo '$SKYPE_USER $SKYPE_PASSWORD'| DISPLAY=:1$i /usr/bin/skype \ --dbpath=$SKYPE_HOME/interface$i --pipelogin >> /dev/null 2>&1 &» echo «Skype $i started» done } skype_stop () { kill -TERM `ps -u $SKYPE_SYSTEM_USER -o pid=` >> /dev/null 2>&1 sleep 3 kill -TERM `ps -C Xvfb -o pid=` >> /dev/null 2>&1 } case »$1» in start) module_reload sleep 3 skype_start ;; stop) skype_stop ;; restart) skype_stop sleep 3 skype_start ;; *) echo $«Usage: $0 {start|stop|restart}» exit 1 esac Делаем его исполняемым: chmod +x /usr/local/bin/skype_start 4.4. ЗапускЗапускаем VNC-сервер

aptitude install x11vnc /usr/bin/Xvfb:101 -ac & x11vnc -display:101 Создать файлик, где будет храниться пароль для авторизации: mcedit /home/passwd Создать пароль: x11vnc -storepasswd 123456 /home/passwd Права: chmod 777 /home/passwd chown rr /home/passwd Остановка процесса: ps ax | grep vnc kill 22062 # (номер процесса) Перед запуском Skype нужно запустить вот эти модули: rmmod snd-dummy modprobe snd-dummy echo «snd_dummy» >> /etc/modules Запуск Skype: su skype -c »/bin/echo 'username userpass'| DISPLAY=:101 /usr/bin/skype --dbpath=/home/skype/multi/interface01 --pipelogin &» kill skype # остановка Skype ps aux # проверка Подключившись по vnc к серверу, можно лицезреть запущенный в предыдущем шаге Skype, в настройках которого нужно убрать все лишнее (отключить события, автоматическое изменение статуса и т.д.) и выбрать dummy-драйвер в качестве всех звуковых устройств (Dummy-HW 2.0).5. Установка FreeSwitch 5.1. Установка нужных библиотек: apt-get -y install build-essential subversion automake autoconf wget libtool libncurses5-dev xvfb libx11-dev libasound2-dev xfs xfonts-100 dpi xfonts-75 dpi xfonts-scalable apt-get install autoconf automake g++ git-core libjpeg62-dev libncurses5-dev libtool make python-dev gawk pkg-config gnutls-bin apt-get install libcurl4-openssl-dev libexpat1-dev libgnutls-dev libtiff4-dev libx11-dev unixodbc-dev libssl-dev python2.6-dev zlib1g-dev libzrtpcpp-dev libasound2-dev libogg-dev libvorbis-dev libperl-dev libgdbm-dev libdb-dev python-dev uuid-dev bison yum install expat-devel gnutls-devel libtiff-devel libX11-devel unixODBC-devel libssl-devel python-devel zlib-devel libzrtpcpp-devel alsa-lib-devel libogg-devel libvorbis-devel perl-libs gdbm-devel libdb-devel uuid-devel @development-tools 5.2. Скачиваем FreeSwitch: cd /usr/local/src git clone git://git.freeswitch.org/freeswitch.git cd freeswitch ./bootstrap.sh 5.3. Редактируем modules.conf: nano /usr/local/src/freeswitch/modules.conf Проверяем и добавляем всё недостающее: applications/mod_limit codecs/mod_voipcodecs endpoints/mod_skypopen mod_say_ru formats/mod_file_string 5.4. Сборка и установка cd /usr/local/src/freeswitch ./configure make make install all cd-sounds-install cd-moh-install uhd-sounds-install uhd-moh-install hd-sounds-install hd-moh-install sounds-install moh-install 5.5. Копируем конфигурацию mod_skypopen и init-скрипт для запуска FreeSwitch: cp /usr/src/freeswitch/src/mod/endpoints/mod_skypopen/configs/skypopen.conf.xml /usr/local/freeswitch/conf/autoload_configs/ cp /usr/src/freeswitch/debian/freeswitch.init /etc/init.d/freeswitch cp debian/freeswitch.default /etc/default/freeswitch sed -i 's/opt/usr\/local/g' /etc/init.d/freeswitch sed -i 's/false/true/g' /etc/default/freeswitch 5.6. Заводим пользователя для 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 chmod -R o-rwx /usr/local/freeswitch/ 5.7. Запуск и другие команды FreeSwitch load mod_skypiax # загрузка модуля sk list # проверка загруженности модуля console loglevel 9 # поднимаем уровень логирования shutdown # остановка работы FreeSwitch /usr/local/freeswitch/bin/freeswitch # запуск FreeSwitch 5.8. Mod SkypopenТеперь перейдем к самой важной настройке — Public API. Здесь нужно разрешить mod_skypopen обращаться к Skype.Сам Skype позволяет добавлять программы в список «Allowed programs» только по факту их обращения к Skype, но только для того, чтобы произвести такую настройку, нецелесообразно запускать FreeSwitch и mod_skypopen, поэтому создатели mod_skypiax написали небольшую утилиту, имитирующую обращение mod_skypopen к Skype. Она находится в дереве исходников FreeSwitch и ее нужно скомпилировать отдельно:

cd /usr/local/src/freeswitch/src/mod/endpoints/mod_skypopen/configs/old-stuff gcc -Wall -ggdb skypopen_auth.c -o skypopen_auth -lX11 У вас сейчас должен быть обязательно открыт VNC-экран.Запускаем skypopen:

./skypopen_auth:101 Вернитесь в окно vnc-подключения — в появившемся диалоговом окне нужно разрешить Skype подключить к API skypopen. Можно также сделать это в файле /home/skype/multi/interface01/username/config.xml. Приведя вот такой вид: skypopen 2 0 2 6. Настройка конфигурации Важным моментом является то, что skype-клиенты должны запускаться до загрузки модуля mod_skypopen, т.е. перед стартом FreeSwitch. Также, остановка уже задействованных mod_skypopen копий Skype приведет к падению FreeSwitch.6.1. Mod_skypopen

nano /usr/local/freeswitch/conf/autoload_configs/skypopen.conf.xml Редактируем примерно так: Здесь:5000 — extension, на который будет маршрутизироваться входящий Skype-вызов;:101 — дисплей X-сервера; skype_user — имя Skype-акаунта.

6.2. Добавляем Skypopen в автозагрузку

Добавляем mod_skypopen в список модулей, загружающихся во время старта FreeSwitch.Для этого в файле /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml нужно раскоментировать или дописать строчку:

6.3. Конфигурация extension 5000Как Вы, вероятно, помните входящие Skype-вызовы будут маршрутизироваться на extension 5000, который еще надо создать. Для этого в директории /usr/local/freeswitch/conf/dialplan/default создаем файл 02_skype.xml следующего содержания:

Где: asterisk — название шлюза, на который будет уходить вызов (АТС на базе Asterisk);6001 — extension в Asterisk, на который будет поступать вызов;  — здесь указан extension, который будет обрабатываться в asterisk при поступлении вызова, в данном случае 6001.В этом же каталоге находятся примеры других extensions, которые нужно будет закоментировать, что бы нужный нам extension не обрабатывался в другом месте. Ту же операцию нужно проделать и в файле /usr/local/freeswitch/conf/dialplan/default.xml.

Создаём файл 01_skypopen.xml:

nano /usr/local/freeswitch/conf/dialplan/public/01_skypopen.xml С содержимым: 6.4. Конфигурация sip_profilesНа сервере c FreeSwitch в директории /usr/local/freeswitch/conf/sip_profiles/external создаем файл asterisk.xml следующего содержания:

Где: asterisk — имя шлюза (должно совпадать с указанным в предыдущем шаге);127.0.0.1 — хост с Asterisk; freeswitch — имя пользователя для доступа к шлюзу; pass123 — его пароль.6.5. Конфигурация sip.conf

На сервере с Asterisk добавляем в /etc/asterisk/sip.conf следующее:

Спойлер [freeswitch] type=friend host=dynamic username=freeswitch port=5080 secret=pass123

[6001] fullname=Skype registersip=no callgroup=1 transfer=yes callcounter=yes context=default cid_number=6001 hassip=yes hasiax=no nat=no insecure=no autoprov=yes disallow=all alow=ulaw, ulaw, gsm, g726, g729 dtmfmode=rfc2833 host=dynamic username=60001 port=5080 fromdomain=1.1.1.1 secret=supersecret Где:6001 — extension из предыдущих шагов1.1.1.1 — адрес сервера с FreeSwitchpass123 — пароль от Extensions 6001

Осталось перечитать sip.conf:

rasterisk -x 'sip reload' 6.6. Конфигурация users.confСпойлер [freeswitch] type=friend host=dynamic username=freeswitch port=5080 secret=pass123

[6001] fullname=Skype registersip=no callgroup=1 transfer=yes callcounter=yes context=default cid_number=6001 hassip=yes hasiax=no nat=no insecure=no autoprov=yes disallow=all alow=ulaw, ulaw, gsm, g726, g729 dtmfmode=inband host=dynamic username=6001 port=5080 fromdomain=1.1.1.1 secret=pass123 hasvoicemail=yes vmsecret=secret call-limit=100 macaddres=6001 label=6001 linekeys=1 Где: secret — пароль от голосовой почты.100 — максимум линий.nat=yes — обозначает, что клиент может находится за NAT-ом и для открытия медиаканала при звонке этого пользователя требуется трансляция заголовков.host=dynamic — привязка к адресу хоста клиента отсутствует.username=6001 — имя пользователя. Этот логин потом используется в настройках SIP-клиента.dtmfmode=rfc2833 — метод передачи dtmf-тонов набора номера. Существует еще метод info (должен совпадать с настройками в SIP клиенте).disallow=all — запрещаем все кодеки.allow=ulaw — разрешаем кодек ulaw. Кодек должен быть такой, который поддерживается клиентом.context=default — контекст описывает через какую секцию Dailplan будут проходить звонки клиента.

В extentions.conf допишем следующее:

[default] exten => 6000,1, Dial (SIP/6000) exten => 6001,1, Dial (SIP/6001) 7. Порядок запуска После установки нужно по возможности сделать reboot системы. Asterisk будет запущен при загрузке. Софтофон должен быть уже активным до перезагрузки.Очередность: /usr/bin/Xvfb:101 -ac & x11vnc -display:101 su skype -c »/bin/echo 'username userpass'| DISPLAY=:101 /usr/bin/skype --dbpath=/home/skype/multi/interface01 --pipelogin &» /usr/local/freeswitch/bin/freeswitch Если не отображается лог в консоли FreeSwitch при входящем вызове из Skype-сети или не отображается клиент при коннекте с Vnc Viewer’а, необходимо вручную перезапустить Skype-клиент и заново проверить настройки клиента.Использованные ресурсы: wiki.exp-it.ru, wiki.freeswitch.ru, asterisk-pbx.ru + книжки по asterisk.

© Habrahabr.ru