SIP-телефония является самым продвинутым видом телефонной связи, и пользоваться ею может каждый, у кого есть доступ к интернету. Самое широкое распространение она получила в корпоративных кругах, где наиболее высоко ценится соотношение качества связи и экономичности.
Благодаря возможности гибкой настройки решение на базе протокола SIP может взаимодействовать с любыми линиями связи. Более того, такие программные продукты, как описываемый в данной статье Asterisk, кроссплатформенны и совместимы с приложениями-клиентами (софтофонами) для Windows, Linux, FreeBSD и так далее.
Asterisk — что это?
Asterisk — это открытая софтовая АТС с модульной архитектурой, в представлении по умолчанию не привязанная ни к одному телефонному протоколу. Независимость и многофункциональность позволяют создавать на ее базе самые различные по масштабу и применению узлы связи от простых телефонных центров для работников, до многоканальных call-центров, объединяющих традиционные средства связи (например, GSM) и VoIP. Asterisk можно установить на Linux, FreeBSD и некоторые другие ОС. Этот процесс в подробностях будет описан далее с акцентом на последние выпущенные к моменту подготовки материала версии Ubuntu Server (19.04 и новее).
На Windows Asterisk не работает. Но можно установить в системе виртуальную машину и уже в нее установить Астериск.
Установка Asterisk
Установить программный комплекс можно двумя способами: быстро через репозитории или более качественно из исходного кода. Быстрая установка предполагает использование всего одной команды
sudo apt install asterisk
Она не является рекомендованной разработчиками самой Ubuntu по причине отсутствия дополнительных компонентов (скачиваются отдельно) и важных шагов, в будущем позволяющих избежать множества проблем.
Установка из исходников включает 4 строго последовательных этапа. Вначале нужно подготовить систему, затем поставить DAHDI (драйверы для аппаратных адаптеров телефонии), после LibPRI (библиотеку для взаимодействия с потоковыми TDM-интерфейсами) и, наконец, сам Asterisk.
Предварительный этап
Нужно запустить терминал, обновить информацию о пакетах:
sudo apt update
, сами пакеты:
sudo apt upgrade
и синхронизировать часы посредством NTP:
sudo ntpdate ru.pool.ntp.org
Если ПО устанавливается на чистый сервер, тогда средства сборки в нем скорее всего отсутствуют, ровно как браузер, файл-менеджер, архиватор и, возможно даже текстовый редактор с графической оболочкой, поэтому следующая команда установит их в систему:
sudo apt install make gcc autoconf epiphany-browser thunar thunar-archive-plugin xarchiver gedit
Сборка DAHDI
Для начала — установка исходников libusb из репозиториев:
sudo apt install libusb-1.0-0-dev
Следует перейти в браузере Epiphany на страницу загрузки драйверов.
После скачивания (желательно выбрать самые новые) их можно распаковать (ПКМ (правая кнопка мыши) на файле — Извлечь сюда) и поместить в удобное место. Затем следует перейти в распакованную папку, открыть в ней терминал (ПКМ на свободном пространстве — Открыть терминал) и выполнить команды сборки:
make sudo make install
Сборка LibPRI
Дальше идет скачивание последней версии библиотеки с официального сайта.
Прединсталляционные действия и команды сборки аналогичны описанным выше.
Сборка Asterisk
Далее скачиваем сам пакет. После распаковки и открытия терминала в папке исходников требуется поставить необходимые для компиляции пакеты (в процессе в терминале может появиться запрос на введение телефонного кода страны).:
sudo ./contrib/scripts/install_prereq install
Затем следует подключить аудио-библиотеки:
sudo ./contrib/scripts/get_mp3_source.sh
Самое время приступить к конфигурированию исходного кода:
./configure --with-pjproject-bundled --with-dahdi --with-pri --with-libcurl --with-speex
Параметр —with-dahdi означает, что при последующей компиляции будут подключены ранее проинсталлированные драйверы DAHDI, а —with-pri — библиотека PRI. Полный перечень допустимых опций вызывается командой
./configure -h
В случае успеха в терминале отобразится такой логотип:
Команды для сборки, опять же, ничем не отличаются от используемых ранее.
Настройка и первый запуск
Для базовой настройки к первому запуску рекомендуется создать конфигурационный файл:
sudo gedit /etc/asterisk/asterisk.conf
С таким содержимым:
[general] runuser = asterisk rungroup = asterisk defaultlanguage = ru documentation_language = ru_RU
И конфиг модулей:
sudo gedit /etc/asterisk/modules.conf
На первых порах включающий только:
[general]
Потом нужно добавить в систему нового юзера asterisk, снабдить его домашней директорией:
sudo useradd asterisk -m
и установить соответствующие привилегии для отдельных каталогов:
sudo chown -R asterisk:asterisk /etc/asterisk sudo chown -R asterisk:asterisk /var/log/asterisk sudo chown -R asterisk:asterisk /var/lib/asterisk sudo chown -R asterisk:asterisk /var/run/asterisk
Проверка всех конфигов:
sudo asterisk -c
Если в последней строке вывода терминала появилась надпись «*CLI>», то есть был выполнен вход в консоль управления программным комплексом, значит критических ошибок нет. Остается настроить автозапуск и перезагрузиться. Для этого можно добавить запись в Cron:
sudo crontab -e
Если появится предупреждение о выборе переменной «editor», лучше приравнять ее к Nano.
Для запуска ПО через 10 секунд после старта системы:
@reboot sleep 10 && /usr/sbin/asterisk -vvvc >/dev/null 2>&1
После перезагрузки, команда:
sudo asterisk -r
должна вызывать уже знакомую консоль управления («*CLI>»). Если в ней выполнить:
core show help
Отобразиться список доступных действий, в частности перезапуск ПО через:
core restart now
Выйти из этой консоли очень просто — достаточно нажать Ctrl+Z.
Возможные ошибки и предупреждения
Распространенные ошибки и консольные уведомления, с которыми сразу может столкнуться пользователь, обычно связаны с модулями. Они будут отображены в выводе:
sudo asterisk -c
Ненужные и мешающие запуску модули можно отключать, добавляя в их конфигурационный файл (расположение — смотреть выше) соответствующие строки. Например, отключить модуль PostgreSQL и так далее:
noload => res_config_pgsql.so
Первая строка [general] — обязательно должна присутствовать в обоих созданных файлах конфигурации. Если они будут пустыми, приложение запустить не удастся!
Ошибка “Name or service not known” указывает на проблему сопоставления имени компьютера с его IP-адресом. Решение — добавление этого имени в /etc/hosts.
Как добавить номера?
Для того, чтобы добавить номера звонков по SIP, понадобится создать следующие 2 файла конфигурации:
sudo gedit /etc/asterisk/extensions.conf
и
sudo gedit /etc/asterisk/sip.conf
В первый помещаются такие строчки:
[outcalling] exten => _XXXX,1,Dial(SIP/${EXTEN},,m)
Прикладывается экстеншн на контекст outcalling, для обслуживания 4-значных внутренних номеров — XXXX — через SIP.
Во второй — собственно, сами номера. Для примера их будет 2 (1010 и 1020):
[1010] type=friend regexten=1010 secret=9999 context=outcalling host=dynamic callerid="1010" <1010> disallow=all allow=ulaw language=ru [1020] type=friend regexten=1020 secret=9999 context=outcalling host=dynamic callerid="1020" <1020> disallow=all allow=ulaw language=ru
Так были оформлены номера 1010 и 1020 с проверкой (type) по имени пользователя и IP-адресу (friend), добавочными номерами (regexten), паролями (secret), группой (context), автоматической регистрацией (dynamic) IP-адреса/ИП (host), идентификаторами звонящего (callerid) и другими параметрами.
Для вступления настроек в силу нужно перезапустить Asterisk.
Как добавить план звонков?
Любой план звонков (dialplan) помещается в /etc/asterisk/extensions.conf. Он может состоять и из нескольких экстеншенов. Например:
[default] exten => 100,1,Wait(5) exten => 100,2,Answer exten => 100,n,Hangup
Вышеперечисленные строки включают 3 действия:
- Ожидать 5 секунд.
- Поднять трубку.
- Повесить трубку (с приоритетом «n», то есть «next» — «следующий», который можно применять вместо любого, кроме 1-го, и позволяет быстро изменять строки без перестановок других приоритетов).
Настройки транка
Получить настройки транка можно у любого SIP-провайдера, в частности на zadarma.com. Вставлять их нужно в конец /etc/asterisk/sip.conf в том же порядке, в каком они представлены в инструкции провайдера. Вроде того:
[379950] host=sip.zadarma.com insecure=invite,port type=friend fromdomain=sip.zadarma.com disallow=all allow=ulaw dtmfmode=auto secret=password defaultuser=379950 trunkname=379950 fromuser=379950 callbackextension=379950 context=call-in qualify=400 directmedia=no nat=force_rport,comedia
«379950» — обозначение номера и одновременно пира, который после перезапуска и выполнения в консоли:
sip show peers
Должен отобразиться в выводе:
379950/379950 109.251.19.236 Auto (No) No 5060 OK (42 ms)
Приветствие
Существующую конфигурацию Asterisk позволяет установить голосовое приветствие. В качестве звукового файла подойдет дорожка в формате WAV, которую нужно переименовать в «ivr-main.wav» и расположить в папке /etc/asterisk/ivr. Эта директория, вместе с сопутствующими настройками будет прописана в /etc/asterisk/extensions.conf, а конкретно — в новом контексте ivr-main:
[call-in] exten => 379950,1,Goto(ivr-main,s,1) [ivr-main] exten => s,1,Background(/etc/asterisk/ivr/ivr-main) exten => s,2,WaitExten(5) exten => s,3,Answer()
Контекст call-in отвечает за входящие звонки на знакомый по предыдущим настройкам номер 379950. Когда поступает вызов, стартует контекст ivr-main, на первом этапе которого проигрывается звуковое приветствие.