Asterisk - это открытый программный сервер телефонии, значительно превосходящий по функционалу все другие существующие решения для организации офисных АТС, включая самые дорогие отдельные телефонные станции Enterprise класса. В сочетании с необходимым интерфейсным оборудованием, обеспечивающим подключение к компьютера к существующим телефонным сетям, Asterisk может воистину всё, что вы только способны себе представить, и даже больше. И это при том, что сам Asterisk является полностью открытым проектом - вам необходимо всего лишь купить интерфейсные платы и подходящий по мощности компьютер, и вы сможете создать АТС любого уровня и сложности. Компьютер на базе Intel Atom с пассивным охлаждением способен обслужить до 50 внутренних и внешних линий.

Голосовое меню, автоответчики, голосовая почта с доставкой аудиофайлов на email ящики, поддержка всех существующих протоколов обмена голосом и кодеков для них, видеозвонки и передача текстовой информации, возможность коммутации различных каналов, например, SIP и обычного телефона - это далеко не полный список возможностей Asterisk.

Общие вопросы

Asterisk доступен в репозиториях Ubuntu, однако настоятельно рекомендуется всегда ставить самую последнюю версию с официального сайта, вручную компилируя её и все необходимые дополнительные модули.

Базовая установка Asterisk состоит из четырёх частей:

  1. Библиотека LibPRI. Эта библиотека предназначена для работы с потоковыми TDM-интерфейсами ISDN: PRI (Primary Rate Interface) и BRI (Basic Rate Interface).
  2. Модули поддержки телекоммуникационного оборудования DAHDI.
  3. Утилиты DAHDI.
  4. Собственно сам сервер Asterisk.

Ставить их необходимо именно в таком порядке. Если у вас нет никакого внешнего оборудования, то можно ограничиться установкой чистого Asterisk, однако разработчики всегда рекомендуют ставить полный пакет. Все необходимые пакеты с исходным кодом можно скачать на официальном сайте:

Имейте ввиду, модули и утилиты DAHDI можно загрузить по отдельности, а можно в виде одного пакета DAHDI Complete. При этом в названии пакета DAHDI Complete всегда содержится два номера версии - первый для включённого в него пакета модулей DAHDI Linux, а второй - для DAHDI Tools. Вообще говоря эти номера могут и не совпадать.

Для сборки Asterisk вам потребуется компилятор GCC и некоторые сопутствующие библиотеки.Минимальный же набор необходимого можно поставить командой:

sudo apt-get install build-essential libncurses5-dev openssl libxml2-dev

Если вы собираете DAHDI кроме самого Asterisk, то так же понадобятся исходники ядра.

Установка из репозитория

Чтобы поставить всё необходимое достаточно просто запустить скрипт install_prereq из каталога contrib/scripts/ в исходных текстах Asterisk с параметром install. Например, вот так:

sudo ./contrib/scripts/install_prereq install

Однако этот скрипт ставит очень много по сути бесполезного мусора. FIXME

Установка из исходников

В статье будет описан процесс установки для сервера 12.04. Начнем с установки необходимых библиотек и дополнительных пакетов.

sudo apt-get install libncurses5-dev openssl libssl-dev zlib1g zlib1g-dev mpg123 linux-headers-`uname -r` build-essential mysql-server libmysqlclient15-dev php5 php5-cli php5-mysql php5-gd php-pear apache2 curl sox bison flex cpp g++ gcc make libauthen-pam-perl libio-pty-perl libnet-ssleay-perl libxml2 libxml2-dev libtiff5 libtiff5-dev libaudiofile-dev subversion libsqlite3-dev libghc-uuid-dev uuid-dev libgtk2.0-dev

Качаем исходники DAHDI с утилитами. Распаковываем, и входим в каталог с исходниками.

sudo make all
sudo make install
sudo make config

В конце появится сообщение, что не найдены устройства DAHDI, ничего страшного. Даже если нет оборудования, драйверами эмулируется внутренний таймер, использующийся, к примеру, для корректной работы конференции.

Качаем LibPRI. Распаковываем, и входим в каталог с исходниками.

sudo make
sudo make install
Если не планируется использование факсов, этот шаг можно пропустить.

Качаем spandsp. Распаковываем, и входим в каталог с исходниками.

./configure
sudo make
sudo make install
Статья модифицирована под Asterisk 13 LTS, т.к. старыми версиями врядли кто уже будет пользоваться.

Как было указано выше, берем последнюю LTS версию с официального сайта, а именно, со страницы загрузки всех версий, распаковываем и заходим в каталог исходников. В новых версиях Asterisk необходима установка дополнительных библиотек для работы WebRTC. Для этого выполняем скрипт, входящий в комплект исходников Asterisk.

contrib/scripts/install_prereq install

После установки библиотек необходимо установить дополнительные пакеты libsrtp и pjproject, т.к. они необходимы для работы WebRTC.

.contrib/scripts/install_prereq install-unpackaged

Если вдруг возникнут ошибки, собираем всё ручками.

sudo su
cd /usr/src/
git clone https://github.com/cisco/libsrtp.git
cd libsrtp
./configure CFLAGS=-fPIC
make libsrtp.a
make uninstall
make install
cd ..
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local.conf
ldconfig
 
git clone https://github.com/asterisk/pjproject.git
cd pjproject
./configure --enable-shared --with-external-speex --with-external-gsm --with-external-srtp --disable-sound --disable-resample
make dep
make
make install
ldconfig

Жмем Ctrl+D для выхода из рутовой консоли.

Вот теперь можно продолжить установку Asterisk. Выполняем

./configure

Если всех библиотек хватает, вы должны увидеть сообщение об успешном выполнении и лого Asterisk.

Выполняем

sudo make menuselect

Если вы делаете установку по ssh, то предварительно должны убедиться, что размер терминала больше, чем 80×25. Здесь необходимо включить нужные модули для компиляции. К примеру, в разделе Add-ons я включил модули format_mp3, app_mysql, cdr_mysql, т.к. дальше планируется установка панели управления FreePBX. В разделе Core Sound Packages включаем CORE-SOUNDS-EN-ALAW, CORE-SOUNDS-EN-GSM, CORE-SOUNDS-EN-G729, CORE-SOUNDS-RU-ALAW, CORE-SOUNDS-RU-GSM, CORE-SOUNDS-RU-G729 (куда же без великого и могучего :-D).

Кратко поясню, для чего в трех кодеках. Для разных транков и внутренних номеров могут использоваться различные кодеки. Устанавливаемая АТС будет использовать основным кодеком alaw, потому что, к примеру, в Казахстане провайдер Казахтелеком использует для SIP телефонии как раз его и g729. В этом случае, будет использоваться меньше ресурсов сервера для транскодирования аудиопотоков. Внутренние номера так же будут использовать alaw, номера, подключаемые снаружи, через внешний интернет, будут работать на g729a, для уменьшения нагрузки на канал. В качестве терминала могут использоваться смартфоны с установленным SIP клиентом. Устойчивая связь была проверена при использовании этого кодека даже на EDGE, не говоря уже про 3G. Кодек GSM будет использоваться в GSM шлюзах.
Если планируется установка FreePBX, необходимо убедиться что для сборки отмечен модуль cdr_odbc.

Далее в разделе Music On Hold File Packages включаем модуль MOH-OPSOUND-WAV просто для того, чтоб он установился. После установки эти мелодии можно будет заменить на свои. Последний раздел Extras Sound Packages. Тут опять же включаем модули для выбранных кодеков ALAW, GSM и G729. Из корневого раздела нажимаем Esc и видим, что нам предложили три варианта выхода. Смело жмем S для сохранения сделанных изменений.

Поскольку мы включили поддежку mp3, то выполняем

contrib/scripts/get_mp3_source.sh

Далее делаем

sudo make install

Пьем кофе минут 10-30, в зависимости от мощности компьютера и толщины канала. =) Будут качаться архивы звуковых сообщений. Ну вот, все скачалось, установилось. Создаем тестовые конфиги.

sudo make samples

И мы уже можем сделать первый запуск нашей станции.

asterisk -vvvcd

Для того, чтоб не сочинять скрипт автозапуска выполняем

sudo make config

Теперь мы уже можем запустить нашу станцию как демон.

sudo /etc/init.d/asterisk start

И подключиться к его консоли.

sudo asterisk -rvvvcd

Выйти из консоли можно по Ctrl+Ctrl или набрав quit и нажав Enter. Осталось взять модуль кодека g729 с русской страницы проекта, который больше соответствует конфигурации вашего железа и положить его в /usr/lib/asterisk/modules. Затем следует перезагрузить Asterisk, или загрузить модуль из консоли управления.

Asterisk запускается от пользователя root!

Сделаем ему отдельного пользователя, предварительно остановив Asterisk, если запустили, добавим его в нужные группы.

sudo adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk
sudo adduser asterisk dialout
sudo adduser asterisk audio
sudo adduser www-data asterisk

Создадим каталог запуска.

sudo mkdir -p /var/run/asterisk

Изменим права на нужные каталоги.

sudo chown -R asterisk:asterisk /var/lib/asterisk
sudo chown -R asterisk:asterisk /var/log/asterisk
sudo chown -R asterisk:asterisk /var/run/asterisk
sudo chown -R asterisk:asterisk /var/spool/asterisk
sudo chown -R asterisk:asterisk /usr/lib/asterisk
sudo chown -R asterisk:asterisk /dev/dahdi
sudo chmod -R u=rwX,g=rX,o= /var/lib/asterisk
sudo chmod -R u=rwX,g=rX,o= /var/log/asterisk
sudo chmod -R u=rwX,g=rX,o= /var/run/asterisk
sudo chmod -R u=rwX,g=rX,o= /var/spool/asterisk
sudo chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
sudo chmod -R u=rwX,g=rX,o= /dev/dahdi
sudo chown -R root:asterisk /etc/asterisk
sudo chmod -R u=rwX,g=rX,o= /etc/asterisk

В файле /etc/default/asterisk раскомментируем две строчки. AST_USER=«asterisk» AST_GROUP=«dialout»

Вот теперь можно запустить Asterisk.

sudo /etc/init.d/asterisk start

Смотрим, от какого пользователя запустился Asterisk.

ps aux|grep aster

Получаем.

asterisk  2547  0.1  1.6  40680 16532 ?        Ssl  12:49   0:01 /usr/sbin/asterisk -U asterisk -G dialout

Спокойно пользуемся дальше. ;-)

Вот, собственно, и весь процесс установки этого замечательного продукта.

Постскриптум

Для ознакомления с языком программирования Asterisk, можете почитать книгу Asterisk™ - будущее телефонии. А, изучив язык программирования и структуру конфигурационных файлов Asterisk, вы будете обладать поистине безграничными возможностями «взрослой» АТС в вашем офисе. Хотя, вопреки различным оппозиционно настроенным к этому продукту людям, называть этот продукт «детской АТС» или «недостанцией», по меньшей мере, неправильно. Есть поклонники АТС Panasonis, есть Nortel. У каждой есть свои преимущества. Но нет основного, бесплатности. Тот же Panasonic берет деньги за лицензии на внешние подключения, лицензии на системный телефон, берет еще за множество вещей, которые в Asterisk уже есть. Если у вас в офисе 4-6 телефона и одна внешняя линия, тут, бесспорно, лучше взять недорогую железку, прокинуть провода и настроить АТСку как надо. При количестве телефонов больше 8, лучше уже перейти на цифру. В таких офисах уже есть, как правило, сетевая инфраструктура. Встроить в нее несколько SIP телефонов и станцию будет не сложно. О преимуществах перед аналоговой станцией говорить не приходится. Никаких подвижных контактов, коммутирующих элементов. Никаких плинтов, кроссов, если не используется аналоговая часть. Беспроблемное подключение различных VoIP и GSM шлюзов, интеграция с провайдерами IP телефонии. Объединение офисов в других городах в общее адресное пространство. Автообзвон клиентов, получение и передача данных в различные бухгалтерские и CRM системы. При всем при этом, система достаточно безопасна в пользовании при правильной настройке. Хотелось бы надеяться, что данная статья кому-то поможет установить Asterisk.

Удачи в освоении продукта!

FIXME

Звонки с/на Skype

Инструкция написана для Asterisk 1.8 на Ubuntu server 9.04. Задача - привязать к астериску аккаунт скайп, чтобы принимать звонки из скайпа на SIP телефон, и звонить с SIP телефона по скайпу. Для этого существует штатное расширение Asterisk производства Digium, но оно коммерческое и лицензии стоят денег. Однако, существует свободный проект - SipToSis, позволяющий сделать то же самое.

Для запуска Skype в консольном Linux используем Xvfb (X Virtual Frame Buffer) и для настройки Skype с другой машины - x11vnc:

apt-get install xvfb x11vnc

Скачаем и установим собственно Skype: Качаем последнюю версию с http://www.skype.com, устанавливаем:

dpkg -i skype.deb

Для работы SipToSis необходима Java версии не ниже 1.5.

Добавляем репозитарий webupd8team. Более подробную информацию можете прочитать на https://launchpad.net/~webupd8team/+archive/java

sudo add-apt-repository ppa:webupd8team/java 
sudo apt-get update

Установим java:

sudo apt-get install oracle-java7-installer

Cкачаем SipToSis.

Разархивируем в /etc/siptosis и проставим chmod на исполняемый файл:

chmod +x /etc/siptosis/SipToSis_linux

FIXME man hier не согласится с этим

Теперь настроим asterisk.

В users.conf добавим:

[Skype]
username=Skype
type=friend
context=Skype
secret=
host=dynamic
nat=no
dtmfmode=auto
canreinvite=no
incominglimit=1
outgoinglimit=1
call-limit=1
busylevel=1

В extensions.conf добавим

exten => 1001,1,Dial(SIP/Skype/echo123)

И перезагрузим asterisk.

sudo /etc/init.d/asterisk restart

Теперь правим конфиг SipToSis:

sudo nano /etc/siptosis/siptosis.cfg

Закомментируем блок настроек, начинающийся с «#Sample AUTO config with NO registration» Раскомментируем блок «#Sample Asterisk registration example», поправим:

host_port=5070
contact_url=sip:Skype@127.0.0.1:5070
from_url="Skype" <sip:Skype@127.0.0.1:5060>
username=Skype
realm=asterisk
passwd=
expires=300
do_register=yes
minregrenewtime=120
regfailretrytime=15

Запускаем:

sudo /usr/bin/Xvfb :101 -ac &
sudo DISPLAY=:101 /usr/bin/skype &
sudo x11vnc -display :101 &

Подключаемся с другой машины (в моем случае, с Windows XP через VNC Viewer), вводим в Skype логин-пароль, отключаем все лишнее.

Теперь запускаем :

DISPLAY=:101 /etc/siptosis/SipToSis_linux

Если все сделано правильно, SipToSis запустится и попытается подключиться к Skype. Skype выдаст вопрос - разрешить ли подключение. Разрешаем и ставим галку «запомнить».

Проверяем: набираем с подключенного к Asterisk клиента 1001 - мы должны услышать тестовый звонок Skype.

Чтобы принимать входящие звонки, в /etc/siptosis/SkypeToSipAuth.props прописываем соответствующее правило. Например:

*,sip:user1@127.0.0.1:5060

-перенаправлять все входящие звонки Skype SIP-юзеру «user1».

Естественно, нужно создать в extensions.conf контекст «Skype», в котором разрешить звонки на этот extension.

Ссылки