
Доброго времени суток, жителям Хабра!
Имея опыт в области установки 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 со следующим содержимым:
Спойлер
#!/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-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 следующее:
Спойлер
[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 — адрес сервера с FreeSwitch
pass123 — пароль от 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.
