Установка и базовая настройка Asterisk 13 на CentOS 7.2

14822
3
1
2

Если вам нужна телефонная станция с кучей настроек, то ваш выбор - Asterisk! Это программная IP АТС, которую устанавливают на обычный компьютер. Существую готовые решения - дистрибутивы с уже...

Если вам нужна телефонная станция с кучей настроек, то ваш выбор - Asterisk!
Это программная IP АТС, которую устанавливают на обычный компьютер. Asterisk можно установить одним способом из трех доступных: исходники, пакетный менеджер или готовый дистрибутив.
Самый простой способ, это готовые дистрибутивы в формате ISO. Обычно внутри таких дистрибутивов можно найти саму операционную систему, Asterisk и веб интерфейс к нему. Помимо Asterisk'а и веб интерфейса, добавляют дополнительное ПО, чтобы создать комбайн для удовлетворения некоторых прихотей пользователя. Из самых часто встречающихся приложений вы можете найти: почтовый сервер, CRM, jabber сервер и т.д.
Дистрибутивы обычно помогают быстро "поднять" телефонную станцию со стандартными возможностями. Это кратчайший путь когда заказчик не готов платить нормальные деньги или к вам обратился друг, и вы решили ему помочь. На сегодня, таких дистрибутивов хватает, в Интернете часто можно встретить упоминания про: Elastix, AsteriskNow, TripBox и т.д. Для начала, можно выбрать AsteriskNow, он предлагает только веб интерфейс управления к IP АТС без дополнительных программ. Этого хватит чтобы настроить телефонную станцию. Другие варианты, рассматривайте судя по своим потребностям или устоявшейся сетевой инфраструктуре. Многие пользователи выбирают Elastix, это самый популярный дистрибутив на сегодняшний день по количеству скачиваний с сайта sourcforge.net, а также по нему много документации на русском языке. На нем можно построить кол центр или настроить базовую миниАТС для нужд обычной компании.
Разработчики рекомендуют устанавливать Asterisk из исходников. Этот способ позволит вам установить самую свежую версию IP АТС Asterisk.  В отличии от готовых дистрибутивов где доступен красивый веб интерфейс для настройки, этот вариант, потребует от вас знания ручного конфигурирования параметров  в файлах. До того как приступить, желательно прочесть книгу "Будущее телефонии - Asterisk IP АТС",  чтобы понять как на самом деле работает станция. Asterisk имеет свой язык конфигурирования, который похож на скриптовый. Зная его, вам станут доступны без граничные возможности в мире телефонии.
В таком способе установки есть следующие преимущества: конфигурационные файлы будут иметь только то, что вы прописали.  Они будут легко читаемыми и с комментариями. Ничего лишнего, только все что нужно для работы. Плюс, можно усложнять логику работы станции так как вам необходимо. Все что придет вам в голову, может быть воплощено в Asterisk. Здесь не будет рамок которые накладывают веб интерфейсы.
Если вы установили Asterisk из исходников, это не значить что вам больше не доступен веб интерфейс. В сети есть популярная веб морда которая ставится к голому Asterisk, зовут ее FreePBX. После установки FreePBX, рекомендуется ставить модуль из не поддерживаемых "Custom Context", который расширяет возможности по настройке программной станции. На самом деле с помощью FreePBX или же Elastix, возможно создать сложную инсталяцию, для этого существует куча плагинов. Выше был озвучен один из таких плагинов, но есть и другие.
У АТС Asterisk есть злющий конкурент в лице Freeswitch, который таки нравится многим. Этому способствует малая нагрузка на железо/канал и качественный голос по сравнению с тем же Asterisk. В сети встречаются сообщения с форумов, где некоторые пользователи писали, что перешли с Asterisk на FreeSwitch (FS). Популярность Freeswitch вызвана тем, что высоконагруженные станции на борту с Asterisk, не справлялись с большим количеством звонков и нагружали железо/канал, при этом имелась проблема с качеством передаваемого голоса. Поэтому можно встретить перебежчиков в другой лагерь под названием FS, обычно такие юзеры имеют статус опытного телефониста, бородатого сисадмина или разраба. Однако, все бы хорошо, но для обычного пользователя есть один большой минус, к сожалению количество веб интерфейсов к FS очень мало, можно сказать что практически их нет.
Эта статья взята с сайта "Calculate Linux", я в ней исправил ошибки и добавил к ней свои дополнительные настройки.
Про тестовый стенд писать много не буду, скажу только что потребуется 3 виртуальные машины:
  1. Провайдерский Asterisk
  2. Сервер Asterisk в Алматы
  3. Сервер Asterisk в Астане
Конфигурационные файлы могу выложить по требованию. Настройте три сервера: Алматы, Астаны и провайдерский. Все настройки вы найдете в этой записке. Это позволит вам протестировать базовые возможности этой крутой штуки.
Примерно получится следующая картина:
29.09.2016
В записку были добавлены настройки, поэтому возможно настроить Asterisk сразу не получится. Выложу полностью конфигурационные файлы в отдельной записке.
СОДЕРЖАНИЕ ЗАПИСКИ
1. Постановка задачи
2. Установка Asterisk
2.1. Первоначальная подготовка операционной системы
2.2. Установка модулей из исходников
2.3. Установка Asterisk из исходников
3. Настройка Asterisk
3.1. Создание учетных записей
3.2. Базовая настройка плана набора
3.3. Конфигурация внутренних вызовов
3.4. Настройка связи между двумя серверами и вызовов между ними
3.5. Установка связи между двумя Asterisk-серверами по протоколу SIP
3.6. Конфигурация плана набора для связи между серверами
3.7. Настройка SIP учетных записей ID Phone и конфигурация плана набора
3.8. Конфигурация плана набора для приема вызовов
3.9. Создание очередей вызова
3.10. Установка своей музыки (сообщения) ожидания (Music On Hold, MOH)
3.11. Конфигурация плана набора для совершения исходящих вызовов
3.12. Настройка софтфона X-Lite
4. Дополнительные настройки
4.1. Настройка межсетевого экрана firewalld
4.2. Настройка fail2ban
4.3. Настройка logrotate
4.4. Включение кодека g729
4.5. Включение маркировки пакетов TOS
5. Конфигурационные файлы провайдерского сервера
6. Заключение
7. Источники и ссылки
Настроим офисную АТС на дистрибутиве CentOS 7 x64.
Для превращения вашего компьютера в телефонную станцию, понадобятся исходники или пакет Asterisk. Настройка Asterisk производится путем редактирования файлов находящихся в директории /etc/asterisk/.
Базовые функции Asterisk:
  • голосовое меню (IVR);
  • маршрутизация вызовов по времени;
  • очередь центра обработки вызовов
  • группы приема вызовов;
  • переадресации на внутренних или внешних абонентов;
  • голосовые конференции;
  • запись переговоров;
  • статистика звонков.
1. Постановка задачи
  • Мы имеем один настроенный Asterisk-сервер в первом офисе, нам надо настроить второй сервер для нового офиса
  • На наш новый сервер мы получаем две телефонные линии по SIP от Казахтелекома (ID Phone)
  • Две линии используется для телефонных разговоров
  • Имеющийся сервер находится в Астане, новый будет в Алматы
  • Сервера должны быть связаны между собой и иметь единую систему нумерации внутренних номеров
  • На алматинском сервере должна быть следующая схема очередей звонков при поступающем вызове на две основные линии: Поступил звонок → проигрываем приветствие и предлагаем набрать добавочный номер → если добавочный номер не был набран, то переводим звонок на секретаря в Астану → если секретарь не ответил, то переводим звонок на абонентов алматинского сервера → если алматинские абоненты не ответили, то переводим звонок на астанинских абонентов.
  • Исходящие звонки должны совершаться по первой и второй свободной линии. Если первая телефонная линия занята, то звонок идет через вторую и наоборот.
  • Звонки с алматинского сервера в Астану (код 7172) должны проходить через сервер в Астане.
2. Установка Asterisk
Сперва обновим ОС, установим зависимости, далее установим модули и потом уже установим Asterisk.
2.1. Первоначальная подготовка операционной системы
Первый шаг в установке - это обновление операционной системы, установка зависимостей, и консольного менеджера закачек.
Освежим нашу операционную систему введя команду:
# yum update -y
Установим консольный загрузчик файлов:
# yum install wget -y
Подключим репозиторий Epel:
# rpm -Uvh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
Установим зависимости:
# yum install gcc gcc-c++  lynx bison mariadb-devel mariadb-server mariadb gmime-devel psmisc php php-mysql php-pear php-mbstring tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel  kernel-devel-$(uname -r) git subversion kernel-devel php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel libtool sqlite-devel libuuid-devel bzip2 man-pages doxygen -y
Устанавливаем демон времени:
# yum install ntp -y
# systemctl enable ntpd
# systemctl start ntpd
2.2. Установка модулей из исходников
Поставим СУБД MariaDB в автозагрузку и стартуем ее:
# systemctl enable mariadb.service
# systemctl start mariadb.service
Установим модуль PearDB для Pear :
# pear uninstall db
# pear install db-1.7.14
# pear install pear/MDB2#mysql
Установка pjproject:
# wget http://www.pjsip.org/release/2.5.5/pjproject-2.5.5.tar.bz2
# tar -xjvf pjproject-2.5.5.tar.bz2
# cd pjproject-2.5.5
# ./configure  --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --libdir=/usr/lib64
# make dep
# make
# make install
# cd ..
pjproject - добавит в asterisk новый канальный SIP драйвер по имени pjsip. Он призван заменить старый драйвер chan_sip который используется по умолчанию.
Установка jansson:
# wget http://www.digip.org/jansson/releases/jansson-2.9.tar.gz
# tar zvxf jansson-2.9.tar.gz
# cd jansson-2.9
# ./configure --prefix=/usr
# make clean
# make
# make install
# ldconfig
# cd ..
jansson - добавляет в Asterisk поддержку JSON.
Установка lame:
# wget http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz
# tar zxvf lame-3.99.5.tar.gz
# cd lame-3.99.5
# ./configure
# make
# make install
# cd ..
lame - позволит кодировать аудио данные в MP3 формат.
Установка dahdi:
# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.11.1+2.11.1.tar.gz
# tar xvfz dahdi-linux-complete-2.11.1+2.11.1.tar.gz
# cd dahdi-linux-complete-*
# make all
# make install
# make config
# cd ..
DAHDI(Zaptel)  -  это специальное ПО которое организует интерфейсный уровень между сервером Asterisk и драйвером интерфейса DAHDI. Он нужен, чтобы Asterisk видел аппаратные платы Digium, которые в свою очередь, помогают подключать аналоговые(FXS/FXO) или цифровые линии (E1) к Asterisk. Этим мы решаем задачу взаимодействия Asterisk с внешней городской телефонной сетью. В записке не используются платы, так как провайдер предоставляет SIP линии по IP (Интернет). Даже если у вас нет Digium подобных плат, DAHDI нужен для специального таймера и конференции meetme. Поэтому мы ставим DAHDI, не смотря на то, что у нас подключение к городу идет по цифровой линии SIP.
Установка libpri:
# wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
# tar xvfz libpri-current.tar.gz
# cd libpri-*
# make
# make install
# cd ..
Libpri - добавляет поддержку протоколов ISDN.
Установка spandsp:
# wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz
# tar zxvf spandsp-0.0.6.tar.gz
# cd spandsp-0.0.6
# ./configure
# make
# make install
# ln -s /usr/local/lib/libspandsp.so.2 /usr/lib64/libspandsp.so.2
# cd ..
spandsp - добавляет поддержку факсов.
2.3. Установка Asterisk из исходников
Самые стабильные версии 1.8 и 11, именно их ставит большинство.
Распакуем наш установочный архив Asterisk:
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-13.11.2.tar.gz
# tar -xvzf asterisk-13*
# cd asterisk-13*
# ./configure --libdir=/usr/lib64
# make menuselect
Включаем модули с помощью Enter в "Add-ons" (дополнения):
[*] - format mp3
[*] - res_config_mysql
[*] - app_mysql
[*] - cdr_mysql
Мы включили поддержку MySQL, но эта опция упразднена. Для взаимодействия с СУБД, установите ODBC.
Заходим в Applications и выделяем app_meetme, которая нам понадобится для организации конференц звонков, директора и учредители очень любят групповые переговоры по телефону:
Заходим в Core Sound Packages и выделяем все звуки с RU:
Заходим в Music On Hold File Packages и выделяем позиции
Можно еще добавить дополнительные звуки с английским
Заходим в Extras Sound Packages:
Нажимаем в конце Save & Exit
# contrib/scripts/get_mp3_source.sh
# make && make install
# make samples
# make config
Примечание: Если вы какой-то модуль забыли включить, могут помочь команды make menuselect и make.
После установки, включим в автозагрузку и запустим нашу службу:
# systemctl enable dahdi
# systemctl start dahdi
# groupadd asterisk
# useradd -g asterisk asterisk  -s /sbin/nologin
# chown asterisk.asterisk /var/run/asterisk
# chown -R asterisk.asterisk /etc/asterisk
# chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
# chown -R asterisk.asterisk /usr/lib64/asterisk
# systemctl restart asterisk
# systemctl status asterisk
Настроим запись информации о звонках в базу MySQL:
# mysql -u root -p
create user 'asterisk'@'localhost' identified by 'password'; create database asterisk; create database cdrdb; GRANT ALL PRIVILEGES ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON cdrdb.* TO asterisk@localhost IDENTIFIED BY 'password'; flush privileges;
Теперь создадим таблицу "cdr" в только что созданной базе "cdrdb":
mysql> use cdrdb;
Создаем таблицу "cdr":
CREATE TABLE cdr ( calldate datetime NOT NULL default '0000-00-00 00:00:00', clid varchar(80) NOT NULL default '', src varchar(80) NOT NULL default '', dst varchar(80) NOT NULL default '', dcontext varchar(80) NOT NULL default '', channel varchar(80) NOT NULL default '', dstchannel varchar(80) NOT NULL default '', lastapp varchar(80) NOT NULL default '', lastdata varchar(80) NOT NULL default '', duration int(11) NOT NULL default '0', billsec int(11) NOT NULL default '0', disposition varchar(45) NOT NULL default '', amaflags int(11) NOT NULL default '0', accountcode varchar(20) NOT NULL default '', uniqueid varchar(32) NOT NULL default '', userfield varchar(255) NOT NULL default '', did varchar(50) NOT NULL default '', recordingfile varchar(255) NOT NULL default '', KEY `calldate` (`calldate`), KEY `dst` (`dst`), KEY `accountcode` (`accountcode`), KEY `uniqueid` (`uniqueid`) );
После, чтобы Asterisk знал куда писать данные о звонках отредактируем файл /etc/asterisk/cdr_mysql.conf
# vim /etc/asterisk/cdr_mysql.conf
В этом файле есть блок в комментариях, снимите комментарии:
[global] hostname=localhost        - ip адрес где располагается сервер MySQL dbname=cdrdb      – название базы данных где будут храниться cdr table=cdr                 - название таблицы password= password        -пароль для пользователя asteriskcdr user= asterisk      - имя пользователя для базы данных ;port=3306 ;sock=/tmp/mysql.sock ;timezone=UTC ; Previously called usegmtime
Запускаем консоль asterisk:
# asterisk -r
*CLI> module load cdr_mysql.so
Мы указали Asterisk'у писать данные о звонках в таблицу "cdr" базы "cdrdb". Можно проверить, поступают ли данные в таблицу "cdr" базы "cdrdb":
# mysql -p
mysql> use cdrdb; mysql> select * from cdr; mysql> exit
Конечно, чтобы вывести данные, вы перед этим должны куда нибудь позвонить.
Зайдем в консоль для проверки правильности установки:
# asterisk -r
localhost*CLI>
3. Настройка Asterisk
В этом разделе начнется самое главное - настройка АТС.
Попробуем настроить базовый функционал SIP.
3.1. Создание учетных записей
Сперва добавим несколько локальных SIP-абонентов. Для этого нам необходимо редактировать файл /etc/asterisk/sip.conf
Сначала добавим шаблон для общих настроек внутренних sip-телефонов:
[office-phones](!) type=friend context=outcoming-sip host=dynamic nat=no qualify=yes canreinvite=no dtmfmode=auto disallow=all allow=g722 t38pt_udptl=no callcounter=yes call-limit=1 deny=0.0.0.0/0.0.0.0 permit=10.68.50.0/24
Рассмотрим этот участок кода. Шаблон задается при помощи восклицательного знака в скобках около имени секции [office-phones](!)
type — тип соединения (peer — только исходящие вызовы, user — входящие вызовы, friend — входящие и исходящие вызовы)
context — контекст в /etc/asterisk/extension.conf который будет выполняться при звонке с телефона
host — имя хоста телефона (dynamic динамическое имя хоста)
nat — сетевая трансляция адресов
qualify — проверка функционирования телефона
canreinvite — прямой доступ телефона к другому телефону минуя Asterisk
dtmfmode=auto — dtmf режим (auto|inband|info|rfc2833)
disallow=all — запрещает все кодеки
allow=g722 — разрешает использование кодека g722, желательно ставить g729, но это возможно когда установлен кодек g729 который ставиться по инструкции в конце данной записки.
t38pt_udptl=no —  запрещает использование протокола t.38 для передачи факсов
callcounter=yes — эту опцию желательно выставлять в «yes». Это позволит Asterisk предоставлять информацию о состоянии SIP устройств.
call-limit=1 — максимум 1 соединение на линию, как и в обычных аналоговых телефонах.
deny=0.0.0.0/0.0.0.0 — запрещаем любые соединения, чтобы потом с помощью опции permit разрешить подключение только из доверенной сети.
permit=10.68.50.0/24 — доверенная локальная сеть, устройства или программные телефоны могут работать с сервером телефонии только из этой подсети. Если вдруг взломают учетную запись, злоумышленник не сможет позвонить.
Теперь добавим шаблон для общих настроек внешних sip-телефонов:
[office-phones-public](!) type=friend context=outcoming-sip host=dynamic nat=no qualify=yes canreinvite=no dtmfmode=auto disallow=all allow=g722 t38pt_udptl=no callcounter=yes call-limit=1 nat=force_rport,comedia
Обратите внимание, здесь появилась опция nat=force_rport,comedia — которая позволит соединятся удаленным телефонам с нашим сервером телефонии вне нашей локальной сети.
Теперь добавим секции для каждого телефона:
[800](office-phones) callerid="Менеджер 1" <800> secret=xxxxxxxx callgroup=1 pickupgroup=1 [801](office-phones) callerid="Менеджер 2" <801> secret=xxxxxxxx callgroup=1 pickupgroup=1 [802](office-phones-public) callerid="Менеджер 3" <802> secret=xxxxxxxx callgroup=1 pickupgroup=1
Рассмотрим описания телефонных учетных записей по ближе. Секции телефонных учетных записей начинаются с имени логина [801] и указанием шаблона в круглых скобках который мы создали ранее. Далее идет описание опций, callerid — информация для Сaller*Id (здесь у нас тел. номер), secret — это пароль для SIP телефона, callgroup — номер телефонной группы, pickupgroup — номер группы захвата звонков. В итоге добавлены три учетные записи c телефонными номерами 800, 801 и 802. Отмечу, учетной записи с номером 802 позволено соединятся  с сервером из публичной интернет сети.
3.2. Базовая настройка плана набора
Наши телефоны теперь могут зарегистрироваться на сервере, но звонить пока они еще не могут. Для этого нам надо создать контекст [outcoming-sip] в файле /etc/asterisk/extensions.conf
3.3. Конфигурация внутренних вызовов
Добавим основные служебные секции, мы их использовать не будет:
[general] static=yes writeprotect=no autofallthrough=yes clearglobalvars=no priorityjumping=no [globals] ; Раздел для объявления глобальных переменных [default] ; контекст который используется Asterisk'ом по умолчанию
Здесь в разделе [general] мы прописали: static=yes - В данное время эта опция влияет только на действие команды «dialplan save»(Asterisk 1.6) или «save dialplan»(Asterisk 1.4). По умолчанию, ее значение равно no, но образец файла extensions.conf, устанавливаемый с Asterisk, явно устанавливает static=yes. writeprotect=no - Если writeprotect=no и static=yes, тогда вы можете сохранить текущий Диалплан CLI командой “ save dialplan” (Определения глобальных переменных в классе [globals] остаются неизменными). Значение по умолчанию no. autofallthrough=yes - указывает Asterisk продолжать выполнение, если все действия для добавочного номера исчерпаны. Если задать этому параметру значение no, Asterisk после выполнения всех предусмотренных приоритетов будет ожидать ввода. clearglobalvars=no - указывает Asterisk сохранять глобальные переменные если произошла перезагрузка или установка расширения. Если стоит yes, при перезгрузке или при установки расширений, глобальные переменные будут очищаться и снова анализироваться при повторной загрузке расширений или перезапуска Астериска. priorityjumping=no - запрещает "перепрыгивание" по приоритетам приложениям которые умеют это делать.
Для удобства выделим локальные номера в отдельную секцию:
[alm-local-phones] exten => 800,1,Log(NOTICE,"800 ACCOUNT") exten => 800,2,Dial(SIP/800,120,Tt) exten => 801,1,Log(NOTICE,"801 ACCOUNT") exten => 801,2,Dial(SIP/801,120,Tt) exten => 802,1,Log(NOTICE,"802 ACCOUNT") exten => 802,2,Dial(SIP/802,120,Tt)
И сделаем секцию завершающую вызов:
[handup-sip] exten => _X!,1,HangUp()
В секцию [outcoming-sip] теперь подключим наши секции:
[outcoming-sip] include => alm-local-phones include => handup-sip
Теперь перезагрузив настройки Asterisk мы сможем звонить по номерам внутри сервера 800, 801 и 802 соответственно. Перезагрузка настроек asterisk выполняется следующим образом. Запускаем консоль управления Asterisk-сервером командой asterisk -r и прописываем в консоли reload — это заставит Asterisk перечитать все настройки, либо же можно перечитать их по отдельности прописав sip reload для перезагрузки настроек sip и dialplan reload для перезагрузки настроек плана набора.
Введя команду sip show peers мы можем посмотреть, какие абоненты у нас могут присутствовать на сервере и кто сейчас зарегистрирован и с какого IP.
3.4. Настройка связи между двумя серверами и вызовов между ними
Наши абоненты уже звонят друг-другу, но у нас есть еще и абоненты на нашем сервере в Астане, нам надо чтобы они могли звонить и им тоже. Для этого нам надо для начала настроить связь между нашими двумя серверами Asterisk.
3.5. Установка связи между двумя Asterisk-серверами по протоколу SIP
На сервере в Алматы прописываем в файле /etc/asterisk/sip.conf следующее:
В секции [general]:
register => alm_asterisk:XXXXXXXXX@192.168.0.30/ast_asterisk
И в конце создаем новую секцию:
[ast_asterisk] type=friend secret=XXXXXXXXX context=ast_incoming host=dynamic qualify=yes dtmfmode=rfc2833 disallow=all allow=ulaw
На сервере в Астане пишем очень похожим образом:
В секции [general]:
register => ast_asterisk:XXXXXXXXX@192.168.1.25/alm_asterisk
И в конце создаем новую секцию:
[alm_asterisk] type=friend secret=XXXXXXXXX context=alm_incoming host=dynamic qualify=yes dtmfmode=rfc2833 disallow=all allow=ulaw
Теперь рассмотрим подробнее что-же мы такое написали и для чего.
register => alm_asterisk:XXXXXXXXX@192.168.0.30/ast_asterisk
Это указывает нашему алматинскому серверу зарегистрироваться на астанинском сервере 192.168.0.30/ast_asterisk с логином alm_asterisk и паролем XXXXXXXXX.
Эти логин и пароль мы как раз задали, создав секцию [alm_asterisk] на нашем сервере в Астане. И соответственно астанинский сервер регистрируется на алматинском 192.168.1.25/alm_asterisk с логином и паролем указанными секцией [ast_asterisk] в конфигурации алматинского сервера.
3.6. Конфигурация плана набора для связи между серверами
Связь между серверами установлена — необходимо описать план набора для того чтобы алматинские абоненты могли звонить астанинским и наоборот.
В файле /etc/asterisk/extensions.conf на алматинском сервере создаем секцию [ast-local-phones], в который мы пропишем наших астанинских абонентов:
[ast-local-phones] exten => 500,1,Dial(SIP/ast_asterisk/500,120,Tt) exten => 501,1,Dial(SIP/ast_asterisk/501,120,Tt)
(... и т. д.)
Отметим небольшую разницу с тем, как мы прописывали локальных абонентов.
Если локальным абонентам мы звонили exten => 800,2,Dial(SIP/800,120,Tt), то есть набрав номер 800 мы совершали звонок абоненту, который зарегистрирован с логином 800, то в данном случае exten => 500,1,Dial(SIP/ast_asterisk/500,120,Tt), мы звоним абоненту находящемуся на сервере ast_asterisk с телефонным номером 500.
В имеющуюся секцию [outcoming-sip] добавляем включение новой секции с локальными номерами астанинского сервера:
[outcoming-sip] include => alm-local-phones include => ast-local-phones include => handup-sip
И создаем секцию [ast_incoming] для обработки вызовов поступающих с астанинского сервера:
[ast_incoming] include => alm-local-phones include => handup-sip
На сервере в Астане прописываем аналогичным образом:
[alm-local-phones] exten => 800,1,Dial(SIP/alm_asterisk/800,120,Tt) exten => 801,1,Dial(SIP/alm_asterisk/801,120,Tt) exten => 802,1,Dial(SIP/alm_asterisk/802,120,Tt) [outcoming-sip] include => alm-local-phones include => ast-local-phones include => handup-sip [alm_incoming] include => ast-local-phones include => handup-sip
Перегружаем настройки SIP и плана набора. Теперь наши абоненты в Алматы и Астаны могут общаться между собой.
3.7. Настройка SIP учетных записей ID Phone и конфигурация плана набора
Наши абоненты звонят друг-другу, звонят абонентам астанинского сервера, но они пока еще не могут звонить на городские и сотовые телефоны. Приступим к настройке наших SIP ID Phone номеров. Заходим по адресу - http://cabinet.idphone.kz и вводим свой логин/пароль для входа, которые нам выдал провайдер. 
Заходим в меню Персональные данные -> Настройка оборудования или телефона
И записываем логин и пароль, это понадобится для подключения городских номеров по SIP в Asterisk.
3.8. Конфигурация плана набора для приема вызовов
На сервере в Алматы прописываем в файле /etc/asterisk/sip.conf следующее
В секции [general]:
register => login1:password1@sip.telecom.kz/2755343~3600 register => login2:password2@sip.telecom.kz/2755344~3600 allowguest=no; bindport=5060 bindaddr=0.0.0.0 context=incoming-sip udpbindaddr=0.0.0.0 tcpenable=no tcpbindaddr=0.0.0.0 transport=udp srvlookup=yes maxexpiry=3600 minexpiry=60 defaultexpiry=800 disallow=all allow=g729 allow=g722 allow=alaw allow=ulaw language=ru tonezone=ru dtmfmode = rfc2833 alwaysauthreject = yes
Здесь:
register => login1:password1@sip.telecom.kz/2755343~3600 - регистрируемся на провайдерском SIP сервере.
login1:password1@sip.telecom.kz - это логин/пароль и сам сервер провайдера, 2755343 - это метка (расширение - extension) с номером городского телефона, по этой метке (номеру) можно отлавливать входящие звонки.
allowguest=no - запрещаем гостевые подключения.
bindport=5060 - порт на котором мы ожидаем соединения и bindaddr=0.0.0.0 - слушаем соединения на всех IP адресах сервера. Стоить отметить, что некоторые учетные записи, могут работать без регистрации, эти настройки зависят от провайдера.
context=incoming-sip - контекст в который по умолчанию будут поступать входящие звонки
udpbindaddr=0.0.0.0 - адрес на котором Asterisk "слушает" UDP подключения, 0.0.0.0 - все интерфейсы сервера
tcpenable=no - задаем транспорт, по умолчанию UDP
tcpbindaddr=0.0.0.0 - адрес на котором Asterisk "слушает" TCP подключения
transport=udp - задает транспорт по умолчанию. По умолчанию 'udp', но может быть 'tcp', 'tls', 'ws' или 'wss'. Если задано TCP а tcpenable=no будет использован UDP транспорт.
srvlookup=yes - включить DNS SRV поиск для вызовов. DNS SRV записи определяют имя хоста и номер порта серверов для определенных служб
maxexpiry=3600 - максимальная продолжительность регистрации в секундах.
minexpiry=60 - минимальная продолжительность регистрации в секундах.
defaultexpiry=800  - срок действия регистрации в секундах для входящих и исходящих регистраций. При входящей регистрации, этот параметр задается клиентской стороной, и заданное здесь значение используется, только если клиент не сообщил свое значение. Для исходящих регистраций этот параметр сообщается удаленной стороне UAS (user agent server)
disallow=all - запрещает все кодеки
allow=g729 - разрешает использование кодека g729
allow=g722 - разрешает использование кодека g722
allow=alaw -  разрешает использование кодека G.711 ulaw (тот, что используется в US)
allow=ulaw - разрешает использование кодека G.711 alaw (тот, что используется в Европе)
language=ru - для всех SIP-аккаунтов установить русские голосовые звуки (сообщения)
tonezone=ru - определяет стандарт тонового сигнала(соединение, дозвон, занято и т.д.)
dtmfmode = rfc2833 - метод генерации тонального DTFM-кода
alwaysauthreject = yes  - если включено, всегда отвечает на INVITE и REGISTER, SIP сообщением 401 Unauthorized, вместо того чтобы сообщить вызывающему о существовании запрашиваемого user или peer. Важная настройка безопасности
Здесь мы зарегистрировали две телефонные учетные записи с городскими номерами 2755343 и 2755344 на провайдерском сервере. Для осуществления звонков, этого мало, помимо регистрации, необходима еще и авторизация на этом же сервере.
Чтобы была авторизация, создадим один шаблон и две секции авторизации для двух городских номеров.
В конце наших настроек, создаем новую секцию шаблона и две секции авторизации:
[id-phone](!) type=peer context=incoming-sip host=sip.telecom.kz fromdomain=sip.telecom.kz port=5060 insecure=port,invite canreinvite=no qualify=3600 [2755343](id-phone) disallow=all allow=g729 allow=alaw ;allow=ulaw defaultuser=логин1 fromuser=логин1 secret=пароль1 call-limit = 1 ; У нас одно-канальный городской телефон callbackextension=2755343 ;Городской номер [2755344](id-phone) disallow=all allow=g729 allow=alaw ;allow=ulaw defaultuser=логин2 fromuser=логин2 secret=пароль2 call-limit = 1 ; У нас одно-канальный городской телефон callbackextension=2755344 ;Городской номер
Здесь мы создали шаблон для подключения к провайдерскому SIP (ID Phone) серверу по аналогии с астанинским сервером. Также мы авторизовались по двум учетным записям с городскими номерами.
Настроим прием вызовов на наши линии.
Создаем контекст [incoming-sip] в файле /etc/asterisk/extensions.conf:
[incoming-sip] exten => _X.,1,Answer() exten => _X.,n,Ringing() exten => _X.,n,Queue(welcome,n,,,25) exten => _X.,n,GotoIfTime(19:15-8:00,*,*,*?allRing:default) exten => _X.,n(allRing),NoOp() exten => _X.,n,HangUp() exten => _X.,n,Queue(all,r,,,600) exten => _X.,n(default),NoOp() exten => _X.,n,Queue(secretary,r,,,6) exten => _X.,n,Queue(alm-manager1,r,,,10) exten => _X.,n,Queue(ast-managers,r,,,600) include => handup-sip
Здесь мы отвечаем на вызов и отправляем его в необходимую очередь.
Queue(welcome,n,,,25) отправляет звонок в очередь welcome на 25 секунд, параметр «n» позволяет набор во время нахождения в очереди и проигрывается музыка ожидания(Music On Hold, MOH). В очереди welcome мы проигрываем приветственное сообщение — это будет описано ниже.
GotoIfTime(19:15-8:00,*,*,*?allRing:default) — проверяется условие, если сейчас время от 19:15 вечера до 8:00 утра, то мы переходим к метке allRing после которой идет вызов очереди all, иначе к метке default. Это делается для того, чтобы в то время, когда большинства работников нет в офисе звонили все телефоны, а в рабочие часы — в установленном порядке. Далее под меткой default у нас звонок сначала на 6 секунд идет на секретаря, затем на 10 секунд на алматинских менеджеров и потом на 600 секунд на астанинских менеджеров. Параметр «r» в вызове Queue() отвечает за то, что вместо MOH звонящий слышит гудки, как при звонке (ringing).
Настройте аналогичный контекст на астанинском сервере поменяв городские номера на _X. или явно указав extension - 3755222 и 3755333.
3.9. Создание очередей вызова
Теперь рассмотрим, как именно описываются очереди. Они описываются в файле /etc/asterisk/queues.conf.
[welcome] strategy = ringall musicclass=welcome context=all-local-sip [secretary] strategy = ringall musicclass=default context=all-local-sip ; Секретарь member => local/550@ast-local-phones [ast-managers] strategy = ringall musicclass=default context=all-local-sip ; Менеджеры member => local/500@ast-local-phones member => local/501@ast-local-phones ; (… и т. д.) [alm-manager1] strategy = ringall musicclass=default context=all-local-sip ; Алматинские менеджеры member => SIP/800,1 member => SIP/801,1 [all] strategy = ringall musicclass=default context=all-local-sip ; Все номера member => SIP/800,1 member => SIP/801,1 member => SIP/802,1 member => SIP/850,1
Основные параметры при описании очередей:
strategy — стратегия по которой обрабатываются поступающие вызовы, может принимать несколько значений:
ringall — вызываются все доступные участники до тех пор, пока кто-то из них не ответит на вызов (по умолчанию)
leastrecent — вызывается участник очереди, который вызывался меньшего всего
fewestcalls — вызывается участник очереди, ответивший на наименьшее количество звонков
random — случайным образом из участников очереди вызывается свободный
rrmemory — циклический вызов с памятью (round robin), запоминается последний ответивший участник очереди
rrordered - похоже на предыдущую стратегию, но с учетом агентов в конфиг файле
linear — звонок поступает на агентов в том порядке в котором они перечислены, для динамических агентов — в порядке их регистрации
wrandom — звонок поступает на случайно выбранного оператора с учетом занятости
musicclass — задает, какая музыка или сообщение проигрывается во время ожидания в данной очереди(задается в файле /etc/asterisk/musiconhold.conf)
context — задает, какой контекст будет обрабатывать набор номера во время ожидания.
member — задает участников очереди, обрабатывающих вызов. На каждого участника создается запись.
Для обработки добавочного номера в очереди welcome мы указали контекст [all-local-sip] — он должен включать в себя все локальные алматинские и астанинские номера, создадим для него запись в файле /etc/asterisk/extensions.conf
[all-local-sip] include => alm-local-phones include => ast-local-phones include => handup-sip
Постановка звонка в очередь и обработка происходит следующим образом:
Функцией Queue(welcome,n,,,12) в плане набора мы отправляемый поступивший звонок на обработку в очередь welcome. В ней в течении 12 секунд звонящий слышит приветственное сообщение и, так как мы передали параметр "n", может набрать добавочный номер, который обрабатывается контекстом all-local-sip. По истечении 12 секунд, если не был набран добавочный номер, звонок выходит из данной очереди и идет на следующий шаг обработки в плане набора.
При вызове функции Queue(alm-manager1,r,,,10) звонок переходит на обработку в очередь alm-manager1 на 10 секунд. При нахождении в очереди, так как мы указали параметр "r", звонящий слышит гудки. В это время звонок обрабатывается в соответствии с заданной стратегией — в данном случае ringall (звонят телефоны у всех указанных членов очереди). Если кто-то из членов очереди берет трубку, то устанавливается соединение. В противном случае, если за 10 секунд трубка взята не была, то обработка вызова снова переходит к следующему шагу в плане набора.
3.10. Установка своей музыки (сообщения) ожидания (Music On Hold, MOH)
У нас уже обрабатываются входящие на наши городские линии и мы проигрываем приветственное сообщение, указав для очереди welcome музыкальный класс welcome — рассмотрим, как именно он задается. Музыка ожидания описывается в файле /etc/asterisk/musiconhold.conf
При установке asterisk он имеет следующий вид:
[general] [default] mode=files directory=moh
Нам надо добавить в него следующую секцию:
[welcome] mode=files sort=alpha directory=/etc/asterisk/moh1
В данной записи мы говорим Asterisk-серверу проигрывать файлы в алфавитном порядке из директории /etc/asterisk/moh1. В эту директорию мы помещаем записанное сообщение. Для уменьшения нагрузки на сервере предварительно сконвертируем при помощи ffmpeg наше сообщение в наиболее часто используемые кодеки alaw, ulaw, g722, g729, gsm и в Asterisk Native SLN из которого Asterisk сможет конвертировать сам налету.
Например конвертация в Native SLN при помощи ffmpeg делается следующим образом:
ffmpeg -i "[input file]" -ar 8000 -ac 1 -acodec pcm_s16le -f s16le "[output file].sln"
Сконвертировать имеющиеся mp3 файлы в mono wav и ulaw pcm можно следующим образом:
for f in `ls *.mp3` ; do FILE=$(basename $f .mp3) ; ffmpeg -i $FILE.mp3 -ar 8000 -ac 1 -ab 64 $FILE.wav -ar 8000 -ac 1 -ab 64 -f mulaw $FILE.pcm -map 0:0 -map 0:0 ; done
3.11. Конфигурация плана набора для совершения исходящих вызовов
Теперь нам осталось настроить исходящие вызовы на городские номера. В файле /etc/asterisk/extensions.conf создаем секцию [city-calls]:
[city-calls] exten => _987172XXXXXXX/_80[0123],1,Dial(SIP/ast_asterisk/${EXTEN:1}) exten => _987172XXXXXXX/_80[0123],2,Congestion exten => _9870[12578]XXXXXXX/_80[0123],1,Dial(SIP/2755343/+7${EXTEN:2}) exten => _9870[12578]XXXXXXX/_80[0123],2,Dial(SIP/2755344/+7${EXTEN:2}) exten => _98747XXXXXXX/_80[0123],1,Dial(SIP/2755343/+7${EXTEN:2}) exten => _98747XXXXXXX/_80[0123],2,Dial(SIP/2755344/+7${EXTEN:2}) exten => _98747XXXXXXX/_80[0123],3,Congestion exten => _9[239]XXXXXXX/_80[0123],1,Dial(SIP/2755343/${EXTEN:1}) exten => _9[239]XXXXXXX/_80[0123],2,Dial(SIP/2755344/${EXTEN:1}) exten => _9[239]XXXXXXX./_80[0123],3,Congestion exten => _9X./_80[0123],1,Dial(SIP/2755343/${EXTEN:1}) exten => _9X./_80[0123],2,Dial(SIP/2755344/${EXTEN:1}) exten => _9X./_80[0123],3,Congestion
И подключаем ее к секции [outcoming-sip]:
[outcoming-sip] include => alm-local-phones include => ast-local-phones include => city-calls include => handup-sip
Таким образом вызовы на астанинские номера (код 7172) у нас отправляются на сервер ast_asterisk и обрабатываются уже там.
Вызов на номера сотовых операторов с кодом 701, 702, 705, 707 и 708 (провайдеры KCELL, BEELINE и т.д.) дополняются цифрой +7 и отправляются на обработку. Вызовы на городские номера с кодом начинающимся с 2,3 или 9 (7 цифр) уходят сразу в город. Вызовы на другие направления идут через шаблон _X. с любым количеством цифр. Мы здесь сделали маленькую защиту, выполнять внешние вызовы могут только телефоны от 800 до 803, так как прописан шаблон через /_80[0123]. Также заметьте, все номера набираются через 9-ку. Такой набор может усложнит несанкционированные звонки с вашего номера, на случай взлома учетной записи.
В вызове команды Dial(${EXTEN:1}:
  • ${EXTEN} и ${EXTEN:1} — номер, который был набран. Полный синтаксис команды ${EXTEN:x:y}, где x — начальное положение и y — количество возвращаемых цифр.
  • При ${EXTEN:1} - убирается первая цифра набранного номера, в нашем случае это 9.
3.12. Настройка софтфона X-Lite
Настроим программный телефон, вводим:
  • Логин -  801
  • Пароль из шаблона
  • IP сервера Asterisk - 10.0.10.10
4. Дополнительные настройки
Здесь настроим сетевой брандмауэр, fail2ban, logrotate и добавим кодек g729 к Asterisk'у.
4.1. Настройка межсетевого экрана firewalld
Допустим, что сервер имеет всего один сетевой адаптер по имени eth0.
Устанавливаем firewalld:
# yum install firewalld -y
# systemctl enable firewalld && systemctl start firewalld
Смотрим активные зоны:
# firewall-cmd --get-active-zones
Здесь видим допустим имя eth0.
Открываем порт 5060:
# firewall-cmd --permanent --zone=public --add-port=5060/udp
Открываем порты 10000-20000:
# firewall-cmd --permanent --zone=public --add-port=10000-20000/udp
Удаляем DHCPv6 Client за ненадобностью, по умолчанию открыты порты для SSH и DHCP клиента v6:
# firewall-cmd --permanent --remove-service=dhcpv6-client
Сохраняем правила:
# firewall-cmd --complete-reload
Проверяем все текущие открытые порты:
# firewall-cmd --zone=public --list-ports
Напомню что SIP протокол нужен для установления сессии между двумя абонентами, при своей работе использует порт 5060. В свою очередь RTP протокол, непосредственно передает медиа данные, в нашем случае это голосовой аудио трафик, здесь уже задействован диапазон портов от 10000 до 20000.
4.2. Настройка fail2ban
Блокировка брутофорса с помощью fail2ban. Боты очень сильно любят Asterisk, перебирая пару логин/пароль, дабы потом сообщить своему хозяину, что открыта лазейка для халявных звонков. Поэтому системный администратор должен в обязательном порядке усложнять доступ к своей системе посредством fail2ban. Если fail2ban не устраивает, попробуйте OSSEC.
Устанавливаем fail2ban:
# yum install fail2ban fail2ban-systemd -y && systemctl enable fail2ban && systemctl start fail2ban
Редактируем файл /etc/asterisk/logger.conf и находим строчку с "messages", добавляем к ней "security" через запятую:
messages => notice,warning,error,security
Также раскомментируем строку:
full => notice,warning,error,debug,verbose,dtmf,fax
Перезапускаем Asterisk:
# asterisk -x "logger reload"
Скопируем jail.conf в jail.local:
# cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Отредактируем файл /etc/fail2ban/jail.local и включаем уже имеющийся jail asterisk:
[asterisk] enabled = true bantime = 86400 maxretry = 5
Перезапускаем fail2ban:
# fail2ban-client reload
И проверяем статус:
# fail2ban-client status asterisk
Просмотр списка заблокированных IP:
# ipset list
Убрать IP из бана 192.168.0.33:
# fail2ban-client set asterisk unbanip 192.168.0.33
Примечание: Если попытаться 3 раз ввести неправильный пароль, fail2ban - вас забанит. Время бана указывается в секундах, поэтому время бана истекает после 24 часа.
На CentOS 6 убрать IP из унбана можно так:
# iptables -L f2b-asterisk-udp       #Проверяем цепочку f2b-asterisk-udp
Chain f2b-asterisk-udp (1 references) target     prot opt source               destination REJECT     all  --  192.168.9.20 anywhere            reject-with icmp-port-unreachable
Убираем IP 192.168.9.20 из черного списка (первое правило из цепочки):
# iptables -D f2b-asterisk-udp 1
4.3. Настройка logrotate
Уборщик логов logrotate, следить за лог файлами Asterisk. В процессе работы телефонной системы создается очень много отладочной информации. Я лично видел на одном сервере лог файл размером в 1Гбайт. Это был очень большой файл, в нем хранились логи за прошлый 2015 год и текущий период. Поиск информации в таком файле был очень утомительным. Поэтому желательно настраивать logrotate, который будет хранить, сжимать и удалять старые логи.
Создаем файл /etc/logrotate.d/asterisk со следующим содержимым:
/var/log/asterisk/*log { missingok rotate 5 weekly create 0640 asterisk asterisk postrotate /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null endscript } /var/log/asterisk/full { missingok rotate 5 yearly create 0640 asterisk asterisk postrotate /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null endscript } /var/log/asterisk/messages { missingok rotate 10 weekly create 0640 asterisk asterisk postrotate /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null endscript } /var/log/asterisk/cdr-csv/*csv { missingok rotate 5 monthly create 0640 asterisk asterisk } /var/log/atftp.log { missingok rotate 5 monthly create 0640 nobody nobody }
4.4. Включение кодека g729
Заходим в каталог с модулями Asterisk:
# cd /usr/lib64/asterisk/modules/
Качаем туда кодек g729:
# wget http://asterisk.hosting.lv/bin/codec_g729-ast130-gcc4-glibc-x86_64-pentium4.so
Переименуем файл в codec_g729.so
# mv codec_g729-ast130-gcc4-glibc-x86_64-pentium4.so codec_g729.so
Сделаем его исполняемым:
# chmod +x codec_g729.so
И загружаем его в Asterisk:
# asterisk -r
*CLI> module load codec_g729.so
4.5. Включение маркировки пакетов TOS
Откройте файл /etc/asterisk/sip.conf и в секцию [general] добавьте строчки:
tos_sip=cs3 tos_audio=ef tos_video=af41
Это поможет  немного повысить качество голоса.
5. Конфигурационные файлы провайдерского сервера
Чтобы сделать имитацию провайдерского сервера, создайте еще одну ВМ со следующими настройками Asterisk:
Файл /etc/asterisk/sip.conf
[client-phones](!) type=friend context=outcoming-sip secret=password host=dynamic nat=no qualify=yes canreinvite=no callgroup=1 pickupgroup=1 dtmfmode=auto disallow=all allow=g722 [2755343](client-phones) callerid="Almaty 1" <2755343> [2755344](client-phones) callerid="Almaty 2" <2755344> [3755222](client-phones) callerid="Astana 1" <3755222> [3755333](client-phones) callerid="Astana 2" <3755333>
Файл /etc/asterisk/extensions.conf
[client-local-phones] exten => 2755343,1,Log(NOTICE,"2755343 ACCOUNT") exten => 2755343,2,Dial(SIP/2755343,120,Tt) exten => 2755344,1,Log(NOTICE,"2755344 ACCOUNT") exten => 2755344,2,Dial(SIP/2755344,120,Tt) ; Astana phones exten => 3755222,1,Log(NOTICE,"3755222 ACCOUNT") exten => 3755222,2,Dial(SIP/3755222,120,Tt) exten => 3755333,1,Log(NOTICE,"3755333 ACCOUNT") exten => 3755333,2,Dial(SIP/3755333,120,Tt) [handup-sip] exten => _X!,1,HangUp() [outcoming-sip] include => client-local-phones include => handup-sip
В конфигурационных файлах определены 4-ре городских номера для сервера Алматы и сервера Астаны.
Пример простой, но его можно усложнить.
6. Заключение
Таким образом мы настроили Asterisk-сервер в базовой конфигурации, соответствующей поставленной задаче. Это лишь основные настройки, позволяющие совершать и принимать необходимые вызовы. Сервер телефонии Asterisk предоставляет неограниченные возможности по настройке и конфигурации офисной IP-АТС. Надеемся, что данная статья поможет вам разобраться с настройкой Asterisk и послужит фундаментом, основываясь на котором, вы сможете создавать свою собственную конфигурацию.
7. Источники и ссылки
Настройка сервера на Calculate Linux
Настройка Asterisk сервера на Calculate Linux
Возможности Asterisk на примере выполняемых работ
Установка Asterisk 13 на CentOS 7
Установка Asterisk: пошаговая инструкция
X-Lite 2.0
PhonerLite
Установка Asterisk под ID Phone
3CXPhone
5 популярных софтфонов
Сравнение софтофонов
Частный опыт установки и настройки Asterisk с нуля
IP-телефония Wikipedia
Создание и настройка очереди через консоль Asterisk
Папки, используемые Asterisk
Грабли, или 5 типичных ошибок настройки Asterisk
SIP ответы и их значения
Установка VoiP сервера Asterisk IP PBX
Установка Asterisk
Asterisk и Linux: миссия IP-телефония
Будущее телефонии - Asterisk IP АТС
Asterisk от простого — к сложному
Asterisk. Начало
Макросы в Asterisk
Приложения Background(), WaitExten() и Goto()
Команда Goto()
Команда GotoIf()
Команда GotoIfTime()
Команда Dial()
Использование приложения Dial()
Коды Asterisk - features.conf
Журнал Хакер. VOIP ОСОБОГО НАЗНАЧЕНИЯ
Журнал Хакер. СБЕРЕЧЬ ТЕЛЕФОННЫЙ БАЛАНС: ПОДНИМАЕМ СИСТЕМУ ОБРАТНОГО ДОЗВОНА CALLBACK
Журнал Хакер. КАК СЭКОНОМИТЬ И ЗАРАБОТАТЬ С ПОМОЩЬЮ ASTERISK
Журнал Хакер. ЗВЕЗДНОЕ ПОПУРРИ. ФОКУСНИЧАЕМ С IP-PBX ASTERISK
IT-Center. Настройка asterisk с нуля
Простая установка и настройка Asterisk 12 на Ubuntu 14.04
Базовая настройка Asterisk
Полезные фичи Asterisk
Asterisk How To Video
Использование переменных в плане набора Asterisk (Set)
Asterisk Dialplan - extensions.conf
Файл extensions.conf - Ваш план набора (Dialplan)
H extension
Файл конфигурации sip.conf - определяет каналы SIP.
Перевод звонка (transfer call) на Asterisk
Корпоративный VoIP сервер на базе Asterisk в Ubuntu Server 8.04.2
CDR описание и Asterisk cdr.conf - Call Detail Records - Детализированный отчет о звонках
Команда ResetCDR()
Asterisk: организуем автоматическое распределение вызовов
Использование контекстов в зависимости от времени суток
Elastix для начинающих
Asterisk — SIP АТС для офиса, пошаговая инструкция по настройке с нуля
Развертывание ip-телефонии для небольшой компании
Ad

Rate post

2

Comments

Login to comment