- Статьи из других ресурсов
- Asterisk + FreeSwitch + Skype. Подробное руководство
Доброго времени суток, жителям Хабра!
Имея опыт в области установки 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: SIBNET
Hostname: sibnet.ru
Username: user123
Password: pass123
CallerID: user
FromDomain: sibnet.ru
FromUser: user123
Outgoing Calling Rules:
Calling Rule Name: World
Pattern: _XXXXXXXXXXX
Caller ID: Admin
Destination: 6001
Use Trunk: SIBNET
DialPlans:
DialPlan Name: user
Include Outgoing Calling Rules: World
Include Local Contexts: default parkedcalls conferences ringgroups voicemenus queues voicemailgroups directory pagegroups page_an_extension
Incoming Calling Rules:
Pattern: _XXXXXXXXXXX
Destination: 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 со следующим содержимым:
Спойлер
Делаем его исполняемым:
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-100dpi xfonts-75dpi 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. Приведя вот такой вид:
<UI>
<API>
<Authorizations>skypopen</Authorizations>
<BlockedPrograms></BlockedPrograms>
</API>
<CaptureDevice>2</CaptureDevice>
<Notifications>
<Enable>
<SkypeLogin>0</SkypeLogin>
</Enable>
</Notifications>
<SoundDevice>2</SoundDevice>
</UI>
6. Настройка конфигурации
Важным моментом является то, что skype-клиенты должны запускаться до загрузки модуля mod_skypopen, т.е. перед стартом FreeSwitch. Также, остановка уже задействованных mod_skypopen копий Skype приведет к падению FreeSwitch.
6.1. Mod_skypopen
nano /usr/local/freeswitch/conf/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="skype_user" value="username"/>
<param name="report_incoming_chatmessages" value="false"/>
<param name="write_silence_when_idle" value="false"/>
<param name="silent_mode" value="false"/>
<param name="setsockopt" value="true"/>
<param name="codec-prefs" value="gsm,ulaw"/>
<param name="hold-music" value="$${moh_uri}"/>
</global_settings>
<per_interface_settings>
<interface id="1" name="skypopen1">
<param name="destination" value="5000"/>
<param name="context" value="default"/>
<param name="X11-display" value=":101"/>
<param name="tcp_cli_port" value="15556"/>
<param name="tcp_srv_port" value="15557"/>
<param name="hold-music" value="$${moh_uri}"/>
</interface>
</per_interface_settings>
</configuration>
Здесь:
5000 — extension, на который будет маршрутизироваться входящий Skype-вызов;
:101 — дисплей X-сервера;
skype_user — имя Skype-акаунта.
6.2. Добавляем Skypopen в автозагрузку
Добавляем mod_skypopen в список модулей, загружающихся во время старта FreeSwitch.
Для этого в файле /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml нужно раскоментировать или дописать строчку:
<load module="mod_skypiax"/>
6.3. Конфигурация extension 5000
Как Вы, вероятно, помните входящие Skype-вызовы будут маршрутизироваться на extension 5000, который еще надо создать. Для этого в директории /usr/local/freeswitch/conf/dialplan/default создаем файл 02_skype.xml следующего содержания:
<include>
<extension name="skype_incoming">
<condition field="destination_number" expression="^7770$">
<action application="set" data="hangup_after_bridge=true"/>
<action application="set" data="effective_caller_id_name=6001"/>
<action application="bridge" data="sofia/gateway/asterisk/6001"/>
<action application="hangup"/>
</condition>
</extension>
</include>
Где:
asterisk — название шлюза, на который будет уходить вызов (АТС на базе Asterisk);
6001 — extension в Asterisk, на который будет поступать вызов;
<action application=«bridge»...> — здесь указан 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
С содержимым:
<extension name="SKYPE#1">
<condition field="destination_number" expression="^8(\d{10})$">
<action application="set" data="continue_on_fail=true"/>
<action application="set" data="hangup_after_bridge=true"/>
<action application="bridge" data="skypopen/RR/+7$1"/>
</condition>
</extension>
6.4. Конфигурация sip_profiles
На сервере c FreeSwitch в директории /usr/local/freeswitch/conf/sip_profiles/external создаем файл asterisk.xml следующего содержания:
<include>
<gateway name="asterisk">
<param name="username" value="freeswitch"/>
<param name="realm" value="127.0.0.1"/>
<param name="password" value="pass123"/>
<param name="register" value="true"/>
<param name="ping" value="25"/>
</gateway>
</include>
Где:
asterisk — имя шлюза (должно совпадать с указанным в предыдущем шаге);
127.0.0.1 — хост с Asterisk;
freeswitch — имя пользователя для доступа к шлюзу;
pass123 — его пароль.
6.5. Конфигурация sip.conf
На сервере с Asterisk добавляем в /etc/asterisk/sip.conf следующее:
Спойлер
Где:
6001 — extension из предыдущих шагов
1.1.1.1 — адрес сервера с FreeSwitch
pass123 — пароль от Extensions 6001
Осталось перечитать sip.conf:
rasterisk -x 'sip reload'
6.6. Конфигурация users.conf
Спойлер
Где:
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.