8 (800) 777-50-05

Настройка Asterisk АТС: пошаговая инструкция

IP-АТС Asterisk умеет все то же, что и традиционная АТС, плюс поддерживает актуальные для бизнеса VoIP-протоколы: голосовую почту, конференц-связь, центр обработки звонков, интерактивное меню, хранение записей. Рассказываем, как настроить с нуля базовый функционал «Астериск» АТС и получить рабочий сервер компьютерной телефонии.

Для примера настройки Asterisk возьмем офис с такими характеристиками:

Не советуем устанавливать Asterisk из репозитория, так как при данной установке может установиться не та версия Asterisk и необходимых к ней зависимостей. В данном случае используем установку Asterisk из исходников.

В разных операционных системах (Cent Os, Ubunty и др.) отличаются команды и необходимые зависимости.

Файлы для первоначальной настройки

Настройка Asterisk – это, по сути, редактирование конфигурационных файлов в директории /etc/asterisk/. К таким файлам относят:

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

Сборка и установка необходимых зависимостей и пакетов.

Вначале нужно установить дополнительные пакеты, которые необходимы для установки и работы Asterisk. Без части из этих пакетов Asterisk вообще откажется устанавливаться (к примеру, если отсутствует gcc). Без некоторых пакетов Asterisk установится и даже будет работать, однако часть функционала окажется недоступна.

Например, пакет bison необходим для обработки выражений в файле extensions.conf. Еще пример: libnewt необходим для работы интерфейса управления astman. Для сервера Asterisk он не требуется, но без этого пакета у вас не будет приложения astman, которое является отдельной программой.

Приводим пример установки Asterisk 13 в системе Cent OS 6.9:

yum -y install gcc gcc-c++ make ncurses-devel libxml2-devel sqlite-devel bison kernel-headers kernel-devel openssl openssl-devel newt newt-devel flex curl sox binutils

Для 12-13 версии Asterisk требуется установка пакетов uuid и janson. Для установки библиотеки uuid в RHEL / Centos выполните команду:

yum -y install libuuid-devel

. Для установки библиотеки jansson в RHEL / Centos выполните команду:

yum -y install jansson-devel (предварительно требуется установка репозитория epel): yum install epel-release

После обновляем систему до последней версии командой yum update –y и перегружаем ее: reboot

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

Настройка Asterisk выполняется в чистом виде, без дополнительных плат расширения и модемов. Так вы получите максимально эффективное и рабочее решение – программную АТС, которую можно легко переносить с одного сервера на другой. Для этого необходимо установить Asterisk с нуля, инсталлировать pjproject с jansson, обновить систему и отключить SELinux.

Для начала отключим Selinux. Для этого заходим /etc/selinux/config и ставим: SELINUX=DISABLED.

Также выключаем FireWall (iptables):

  1. Проверка статуса: service iptables status;
  2. Отключение: service iptables stop
  3. Отключение из автозагрузки: chkconfig iptables off
  4. Перегружаем систему: reboot

Скачайте и инсталлируйте pjproject:

d /usr/src

git clone git://github.com/asterisk/pjproject pjproject

cd pjproject/

./configure –libdir=/usr/lib64 –prefix=/usr –enable-shared –disable-sound –disable-resample

make dep

make

make install

ldconfig

ldconfig -p | grep pj

Для конвертации mp3-файлов необходим пакет Lame. Установим его из репозитория:

rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

yum repolist — проверка установленных репозиториев

Далее устанавливаем сам пакет: yum install lame

Скачиваем и устанавливаем библиотеку Libpri:

cd /usr/src/

wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz

tar xvfz libpri-1.4-*.tar.gz

cd /usr/src/libpri-1.4.*

make

make install

Если команды wget – не существует, то устанавливаем ее командой yum –y install wget

Далее скачиваем и устанавливаем сам asterisk 13:

cd /usr/src/

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

tar xvfz asterisk-13-current.tar.gz

cd asterisk-13.*

contrib/scripts/get_mp3_source.sh

./configure –libdir=/usr/lib64

Если при проверки и подготовки сборки необходимых настроек, моделей никаких ошибок нету, то появиться в консоли иконка Asterisk

make menuselect — выбираются все необходимые параметры, но в принципе можно оставить по умолчанию, главное чтобы были включены необходимые драйверы каналов

Выберите модули и звуки (можно оставить по умолчанию). В модулях выбираем только sip. (pjsip не ставим):

Установите озвучку для core и extra (для второй она доступна на русском языке). Рекомендуем кодеки g729, alaw, ulaw, ,gsm. Далее уже на Ваш вкус какие кодеки необходимы.:

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

Продолжайте инсталляцию:

make

make install

make config

make samples

ldconfig

При успешной установки Asterisk видно в строчках лога эмблему Asterisk (появляется после этапа configure).

Добавьте Asterisk в автозапуск и приступайте к работе:

chkconfig asterisk on

service asterisk start

Проверьте корректность запуска через консоль:

asterisk -r

Перегрузите компьютер чтобы проверить автоматический запуск Asterisk. При вводе asterisk –r мы должны попасть в консоль, как на скрине выше.

Подключение абонентов

Протестируйте работу ATC Asterisk с помощью программного сервиса звонков. Сделайте базовые настройки в файле конфигурации sip.conf (где лежит – /etc/asterisk/sip.conf). По умолчанию в нем много полезных комментариев, но они загромождают код. Рекомендуем сделать копию файла конфигурации и сохранить ее отдельно, а оригинальную очистить от лишнего текста. Пример типовой конфигурации Asterisk:

документация https://asterisk-pbx.ru/wiki/asterisk/cf/chan_sip

[general]

context = default

realm = Test Aster

transport=udp

useragrent= Test Asterisk 13

nat=yes

bindaddr=0.0.0.0

bindport=5060

srvlookup=yes

disallow=all

allow=ulaw

allow=alaw

language=ru

trustrpid = yes

sendrpid = yes

allowexternalinvites=no

allowguest=no

alwaysauthreject=yes

defaultexpiry=150

limitonpeers=yes

maxexpiry=3600

minexpiry=60

registerattempts=0

registertimeout=30

Настройка peer - https://www.voip-info.org/wiki/view/Asterisk+config+sip.conf

[101]

context=local

dtmfmode=rfc2833

host=dynamic

type=friend

username=101

qualify=yes

secret=101a

disallow=all

allow=ulaw

allow=alaw

insecure=invite,port

nat=yes

[102]

context=local

dtmfmode=rfc2833

host=dynamic

type=friend

username=102

qualify=yes

secret=102a

disallow=all

allow=ulaw

allow=alaw

insecure=invite,port

nat=yes

Для применения изменений Sip перегружаем SIP в консоли астера (asterisk -r) командой sip reload

Добавление плана звонков

План звонков при настройке Asterisk потребуется для совершения вызовов. Найдите файл конфигурации extensions.conf, сделайте его резервную копию, а оригинальную версию очистите от комментариев и запишите в нее следующее:

extension - http://asterisk.ru/knowledgebase/Asterisk+config+extensions.conf

[local]

;для исход. внутренних номеров между собой

exten => _XXX,1,Noop(Test ${CALLERID(num)} Hat)

exten => _XXX,n,Dial(SIP/${EXTEN})

Так вы добавите план звонков на трехзначные номера. В нашем случае это номера 101 и 102 (в sip.conf)

Перезагрузите план набора (диалплан):

dialplan reload

Не страшно, если на экране появятся сообщения об ошибках – вы еще не завершили настройку и исправите их на следующих шагах.

Проверьте список пользователей командой:

sip show peers

Пользователи, пароли и контекст

Установите любую программную «звонилку» или воспользуйтесь реальным телефоном. В первом варианте вам понадобится настроить софт для работы с АТС. В нашем примере используем Zoiper 5. Пример настроек указан в нашей вики http://wiki.new-tel.net/doku.php?id=Zoiper-PC:

Настройки софтовой «звонилки» для проверки Asterisk

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

Теперь проверьте подключенные пиры с помощью команды:

Sip show peers

Если все верно, вы увидите такую строку:, в котором видно нашу SIP-линию и статус подключения SIP-линии:

Sip-линия IP-address A 5060 OK Cached RT

После настройки Asterisk протестируйте звонки на двух абонентах. Для этого подключите еще один физический или программный телефон. Позвоните от одного абонента другому (набрав с 101 на 102 и наоборот). Проверьте содержимое файла /var/log/asterisk/full. – там появится запись о последнем вызове. Также там фиксируется все сообщения и ошибки, возникаемые при работе Asterisk.

Записи обо всех последующих вызовах тоже попадут в этот файл. Позже их можно будет перебросить в базу данных.

Настройка транка

Зарегистрируйтесь у SIP-провайдера и получите настройки транков. Необходимую информацию – логин, пароль, адрес сервера, настройки подключения и номера для тестирования – можно найти в личном.

В конец файла sip.conf добавьте нового пира, как это рекомендует ваш провайдер:

[test_trunk]

context=trunk_cid

dtmfmode=rfc2833

host=ip-адрес sip-провайдера

type=friend

username=test_trunk

qualify=yes

secret=password ;пароль для подключения транка

disallow=all

allow=ulaw

allow=alaw

allow=g729

insecure=invite,port

nat=yes

Пусть Asterisk заново перечитает файл:

Sip reload

Если настройка программы в IP АТС Asterisk прошла успешно, в консоли появится такая строка:

Sip-линия IP-address A 5060 Unmonitored Cached RT

Редактирование dialplan

Чтобы настроить входящие и исходящие звонки в IP-телефонии Asterisk, отредактируйте файл extensions.conf, добавив в конце следующий код (с контекста local):

;для исход по транку (пример указан с префиксом 123#).

exten => _123#8XXXXXXXXXX,1,Set(CALLERID(all)=78125000963)

exten => _123#8XXXXXXXXXX,n,Noop( (CALLERID(all) + Boris)

exten => _123#8XXXXXXXXXX,n,Dial(SIP/7${EXTEN:5}@Ip-address)

избавление от префикса 123# и заменой цифры 8 на 7. Далее отправляется звонок на хост IP провайдера (указан в sip.conf)

[trunk_cid]

для вход. по транку на 101.

exten => _XXXXXXXXXX,1,Dial(SIP/101,30,r)

Перезагрузите Asterisk командой core restart now и снова сделайте тестовый звонок. Информация о нем добавится в файле full

Пример лога консоли Asterisk:

На этом базовая настройка IP-телефонии «Астериск» завершена. Чтобы расширить функционал после того, как Asterisk установлен, настройте приветствие и голосовое меню (ivr), активируйте голосовую почту, настройте очередь (queue) входящих звонков, сбор и просмотр статистики (cdr viewer), запись (record) разговоров, поставьте музыку на ожидание (on hold), настройте конференции, перевод, перехват и переадресацию звонков.

Ошибки в настройке Asterisk

Рассмотрим распространенные ошибки при настройке виртуальной АТС «Астерикс» и дадим инструкции, которые помогут их .

Расширенные настройки Asterisk

Дальше нас интересует расширенная настройка Asterisk. Рассказываем, как несколько несложных действий помогут вам добавить новые возможности IP-телефонии для бизнеса.

Настройка голосового меню (IVR)

Другое его название – голосовое дерево. Настройка Asterisk IVR служит для того, чтобы звонящий мог подключиться к конкретному сотруднику организации или переключиться на определенную линию техподдержки. Также IVR позволяет получать полезную информацию без соединения с оператором: звонящий сможет выбрать пункт голосового меню и прослушать его содержимое.

Для настройки IVR перейдите в файл конфигурации extensions.conf. Все изменения необходимо внести в план набора dialplan. Общая схема выглядит так: вначале воспроизводится запись с приветствием, затем звонящий слышит предложение ввести номер в тональном режиме. Нам нужно обработать эту информацию и затем в зависимости от выбранного сценария перевести звонящего на конкретного сотрудника, очередь или другой план набора.

Голосовое приветствие должно быть сохранено в формате .waw или .gsm, это можно сделать во многих приложениях для звукозаписи. Если вы используете готовый файл в другом формате, воспользуйтесь пакетом для конвертации sox.

В Asterisk инструкция для изменения или создания IVR выглядит следующим образом:

а) в файл конфигурации добавьте код:

[outcaling]
...
exten => 222,1,Answer()
same => n,Background(basic-pbx-ivr-main)
exten => _XXX,1,Dial(SIP/${EXTEN},,m)

б) перезапустите настройки:

asterisk -x "dialplan reload"

в) настройте возможность выбора отдела:

exten => 333,1,Answer()
exten => 333,2,Background(basic-pbx-ivr-main)
exten => 333,3,WaitExten(5)
exten => 1,1,Goto(managers,s,1)
exten => 2,1,Goto(support,s,1)

[managers]
exten => s,1,Ringing
same => n,Wait(1)
same => n,Background(/var/lib/asterisk/sounds/wav/managers)
same => n,Waitexten(5)
exten => 1,1,Dial(SIP/201)
exten => 2,1,Dial(SIP/202)
exten => 0,1,Goto(outcaling,333,1)

[support]
exten => s,1,Ringing
same => n,Wait(1)
same => n,Background(/var/lib/asterisk/sounds/wav/support)
same => n,Waitexten(5)
exten => 1,1,Dial(SIP/101)
exten => 2,1,Dial(SIP/102)
exten => 0,1,Goto(outcaling,333,1)

Снова перезапустите настройки:

asterisk -x "dialplan reload"

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

exten => 333,1,Answer()
exten => 333,2,Background(basic-pbx-ivr-main)
exten => 333,3,WaitExten(5)
exten => 1,1,Goto(managers,s,1)
exten => 2,1,Goto(support,s,1)
exten => t,1,Dial(SIP/101)
exten => i,1,Background(invalid)
same => n,Goto(outcaling,333,3)
...

При наборе внутреннего номера могут возникнуть проблемы. Если это случилось, проверьте режим DTMF – это аналоговый сигнал для набора телефонного номера. Чтобы настроить sip-пир на определенный способ передачи DTMF, добавьте в файл конфигурации такую строку:

dtmfmode=rfc2833

Голосовая почта

Если звонящий долго находится на линии в ожидании ответа оператора, ему можно предложить оставить голосовое сообщение. Для реализации этого функционала откройте файл voicemail.conf и добавьте в него такой код:

130 => 9999,Number 130,ms@mail.ru

100 => 9999,Number 100,ms@mail.ru,

где 130 – внутренний номер оператора, 9999 – пароль доступа к ящику голосовой почты, ms@mail.ru – электронный ящик, на который будет отправлено голосовое сообщение.

Предварительно настройте локальный почтовый сервер или используйте внешний.

Перезапустите модуль голосовой почты и протестируйте его работу:

CLI> voicemail reload

Reloading voicemail configuration...

asterisk*CLI> voicemail show users

Context Mbox User Zone NewMsg

default 130 Number 121 0

default 100 Number 100 0

other 1234 Company2 User 0

3 voicemail users configured.

Добавьте голосовую почту в dialplan:

[call-out]

Номер для записи звуков, окончание записи #

exten => _35X, 1, NoOp()

exten => _35X, n, Wait(2)

exten => _35X, n, Playback(beep)

exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav)

exten => _35X, n, Wait(1)

exten => _35X, n, Playback(/tmp/music${EXTEN:2})

exten => _35X, n, Wait(2)

exten => _35X, n, Hangup()

Управление голосовой почтой

exten => 500,1,VoiceMailMain()

Звонок на внутренний номер

exten => _XXX,1,Dial(SIP/${EXTEN},15)

Звонок на внешний номер

exten => _XXX.,1,Dial(SIP/${EXTEN}@397945)

По умолчанию время ожидания ответа до включения голосовой почты составляет 15 секунд.

Очередь входящих звонков (queue)

Настройка Asterisk с нуля редко предполагает организацию очереди, но мы рассмотрим, как ее реализовать, если ваша компания в этом функционале нуждается. Очередь позволяет управлять потоком звонков и перераспределять их по заданным правилам – например, направлять первому освободившемуся оператору. Для настройки очереди откройте файл queues.conf. Предположим, что у нас два оператора с внутренними номерами 101 и 102. Тогда в конец файла добавьте такой код:

[secretary]

strategy = ringall

member => SIP/100

member => SIP/130

Узнать, какие значения может принимать параметр strategy, который отвечает за принцип распределения вызовов, можно здесь: https://www.voip-info.org/asterisk-call-queues/.

Добавьте в файл extensions.conf подготовленный заранее контекст с голосовым меню, заменив в [ivr-main] строку

exten => t,1,Dial(SIP/100,15)

на строку с таким содержимым:

exten => t,1,Queue(secretary,t)

Перезагрузите конфигурацию Asterisk:

CLI> reload

Статистика звонков (cdr viewer)

Вы можете попробовать разобрать содержимое файла /var/log/asterisk/cdr-csv/Master.csv, где Asterisk по умолчанию сохраняет собранную статистику звонков, но проще воспользоваться другим инструментом. Предлагаем перенести сбор статистики в базу данных MySQL. Для этого запустите сервер mariadb и введите следующие команды:

# systemctl start mariadb

# systemctl enable mariadb.service

# /usr/bin/mysql_secure_installation

Создайте БД и пользователя:

# mysql -uroot -p

MariaDB [(none)]> create database asterisk;

MariaDB [(none)]> use asterisk;

MariaDB [asterisk]> CREATE TABLE `cdr` ( `id` int(9) unsigned NOT NULL auto_increment, `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 '', PRIMARY KEY (`id`), KEY `calldate` (`calldate`), KEY `accountcode` (`accountcode`), KEY `uniqueid` (`uniqueid`), KEY `dst` (`dst`), KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

MariaDB [asterisk]> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '12345678';

Добавьте odbc-коннекторы:

# yum install -y mysql-connector-odbc.x86_64 unixODBC-devel.x86_64

Откройте /etc/asterisk/res_odbc.conf и в конец файла добавьте код:

[asterisk]

enabled => yes

dsn => MySQL-asterisk

username => asterisk_user

password => 12345678

Аналогично с файлом /etc/asterisk/cdr_adaptive_odbc.conf:

[cdr_adaptive_connection]

connection=asterisk

table=cdr

alias start => calldate

Создайте новый файл /etc/odbc.ini и внесите туда такой фрагмент:

[MySQL-asterisk]

Description = MySQL Asterisk database

Driver = MySQL

Server = localhost

User = asterisk_user

Password = 12345678

Socket = /var/lib/mysql/mysql.sock

Database = asterisk

В инструкции «Астериска» предлагают после этого перезапустить его:

# service asterisk restart

Затем проведите тест, совершив пару звонков. После запустите и добавьте в автозагрузку такие строки:

# systemctl start httpd

# systemctl enable httpd

Запись разговоров (record)

Есть несколько способов организовать запись разговоров, мы же рассмотрим простейший вариант. Для этого создайте папку, в которую будут складываться записи:

mkdir /records
chmod 777 /records

Откройте файл extensions.conf и внесите туда такие изменения:

[default]
exten => _XXXX,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => _XXXX,2,MixMonitor(/records/${fname}.wav)
exten => _XXXX,3,Dial(SIP/${EXTEN},,)

Музыка на ожидании (hold on)

Эта настройка Asterisk позволит выбрать мелодию, которая будут звучать на линии во время ожидания звонка в очереди. По умолчанию мелодии воспроизводятся из директории /var/lib/asterisk/moh. Чтобы добавить свою мелодию в формате mp3, скопируйте ее на сервер любым удобным способом, а затем создайте директорию /var/lib/asterisk/mohmp3 и перекодируйте в ней музыку в «понятный» для системы формат wav:

# mkdir /var/lib/asterisk/mohmp3

# lame --decode /root/music.mp3 /var/lib/asterisk/mohmp3/music.wav

Откройте файл /etc/asterisk/musiconhold.conf и в конец добавьте новый класс музыки musiconhold.conf:

[mp3]

mode=files

directory=mohmp3

К описанию очереди добавьте еще один параметр:

[secretary]

music = mp3

strategy = ringall

member => SIP/100

member => SIP/130

Выполните перезапуск, как сказано в инструкции по настройке Asterisk:

# service asterisk restart

Конференции

Конференции позволяют организовать одновременный разговор между несколькими звонящими. Для их настройки откройте confbridge.conf и добавьте в конец файла:

[confer]

type=bridge

max_members=20

mixing_interval=10

internal_sample_rate=auto

record_conference=yes

В начало файла:

exten => 333,1,Answer()

exten => 333,n,ConfBridge(1,confer)

Теперь при наборе номера 333 звонящий попадет в комнату для конференций.

Поздравляем, установка и настройка Asterisk завершена!

Перевод, перехват и переадресация звонков

По умолчанию для перевода звонков используется команда # + номер, на который нужно перевести звонок. Для успешного перевода нужно, чтобы он был предварительно разрешен в диалплане в команде Dial:

exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)

В «Астериске» для перевода звонков используется режим Attended Transfer, который по умолчанию выключен. Чтобы использовать его для перенаправления звонков, в файле features.conf необходимо раскомментировать строку:

atxfer => *2

Горячую клавишу для перевода можно назначать произвольным образом.

Перехват звонков в Asterisk работает по умолчанию, дополнительные настройки этой функции не требуются. Комбинация кнопок для перехвата задается в уже знакомом файле features.conf.

Например, чтобы реализовать переадресацию на мобильный номер 222, в dialplan следует добавить строку:

exten => 222,n,Dial(SIP/89151234567@397945)

Чтобы переадресация действовала только на внутренние номера офиса:

exten => 222,n,Dial(SIP/89151234567@397945)

exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)

А теперь вариант с переадресацией для звонков извне:

exten => 115,n,Dial(SIP/89151234567@397945)

exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)

Настройка Asterisk с помощью fail2ban

Если у «Астериска» внешний IP-адрес или на него организован переброс с внешних IP-адресов, его необходимо обезопасить от перебора учеток. Проще всего это сделать с помощью fail2ban – специального программного решения для предотвращения вторжений и атак, которые осуществляются методом перебора.

Для начала необходимо инсталлировать fail2ban:

# dnf install fail2ban

Запись событий будем вести в лог. Откроем файл /etc/asterisk/logger.conf и раскомментируем такую его строку:

security => security

Считываем параметры хранения логов:

# asterisk -x "logger reload"

После этого в директории /var/log/asterisk должен появиться файл с названием security, записи из которого будет анализировать инструмент fail2ban.

Открываем файл /etc/fail2ban/jail.conf и в секции [asterisk] меняем путь к файлу и дописываем еще одну важную строку:

logpath = /var/log/asterisk/security

enabled = true

Нужно, чтобы fail2ban запускался автоматически:

# systemctl start fail2ban

# systemctl enable fail2ban

Не забываем, что для корректной работы fail2ban требуется заранее сконфигурированный и запущенный iptables. Учитывайте, что при отключенном firewalld вначале нужно удалить /etc/fail2ban/jail.d/00-firewalld.conf, после чего перезапустить fail2ban, чтобы он заработал.

Настройка обратного звонка

Настройка Asterisk Callback очень удобна в использовании: клиент вводит свой номер телефона в специальную форму на сайте, а спустя какое-то время ему перезванивает специалист компании. Чтобы воспользоваться Asterisk Web Callback, потребуется веб-сервер с поддержкой PHP. Настройки выполняются в файле manager.conf.

[general]

enabled = yes

port = 5038

bindaddr = 0.0.0.0 ;или реальный IP вашего сервера Asterisk

[your_name]

secret=your_secret

deny=0.0.0.0/0.0.0.0

permit=0.0.0.0/0.0.0.0 ;или ip вашего веб-сервера

read = system,call,log,verbose,command,agent,user,config,originate

write = system,call,log,verbose,command,agent,user,config,originate

Теперь работаем со скриптом – определяем IP-адрес Asterisk:

$strHost = "Asterisk IP Address";

Назначаем пользовательское имя – то, которое ранее задали в файле /etc/asterisk/manager.conf):

$strUser = "your_name";

Пароль:

$strSecret = "your_secret";

Канал, куда будут направлены звонки:

$strChannel = "SIP/107";

В /etc/asterisk/extensions_custom.conf:

[from-script-n]

exten = s,1,Goto(from-internal,600,1)

Чтобы защититься от нежелательных звонков:

$strChannel = "SIP/107";

В /etc/asterisk/extensions_custom.conf:

/etc/asterisk/extensions_custom.conf

Теперь следует задать длину номера телефона, которую могут указать клиенты в веб-форме (в нашем случае это 11 символов):

if ($length == 11 && is_numeric($strExten))

<table width="300" border="1" bordercolor="#630000" cellpadding="3" cellspacing="0">

<tr><td>

<font size="2" face="arial,georgia" color="#630000">Введите Ваш номер 812XXXXXXX.</font>

<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post">

<input type="text" size="20" maxlength="11" name="txtphonenumber"><br>

<input type="submit" value="Позвонить!">

</form>

</td></tr>

</table>

Сам скрипт:

<?php

$strHost = "127.0.0.1";

$strUser = "test";

$strSecret = "test2";

$strChannel = "Local/s@from-script-n";

$strContext = "from-script";

$strWaitTime = "60000";

$strPriority = "1";

$strExten = $_POST['txtphonenumber'];

$strCallerId = "n <$strExten>";

$length = strlen($strExten);

if ($length == 11 && is_numeric($strExten))

{

$oSocket = fsockopen($strHost, 5038, $errnum, $errdesc) or die("Connection to host failed");

fputs($oSocket, "Action: login\r\n");

fputs($oSocket, "Events: off\r\n");

fputs($oSocket, "Username: $strUser\r\n");

fputs($oSocket, "Secret: $strSecret\r\n\r\n");

fputs($oSocket, "Action: originate\r\n");

fputs($oSocket, "Channel: $strChannel\r\n");

fputs($oSocket, "Timeout: $strWaitTime\r\n");

fputs($oSocket, "CallerId: $strCallerId\r\n");

fputs($oSocket, "Exten: $strExten\r\n");

fputs($oSocket, "Context: $strContext\r\n");

fputs($oSocket, "Priority: $strPriority\r\n\r\n");

fputs($oSocket, "Action: Logoff\r\n\r\n");

sleep (1);

fclose($oSocket,128);

?>

<p>

<table width="500" border="2" bordercolor="#850000" cellpadding="3" cellspacing="0">

<tr><td>

<font size="2" face="verdana color="#850000">Идет вызов. Дождитесь, когда зазвонит телефон!<br>Если звонок не поступил в течение 60 секунд, сделайте еще одну попытку.<br><a href="<?php echo $_SERVER['PHP_SELF'] ?>">Повторить</a>$

</td></tr>

</table>

</p>

<?php

}

else

{

?>

<p>

<table width="500" border="1" bordercolor="#850000" cellpadding="3" cellspacing="0">

<tr><td>

<font size="2" face="verdana" color="#850000">Введите номер телефона.</font>

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">

<input type="text" size="20" maxlength="12" name="txtphonenumber"><br>

<input type="submit" value="Позвонить!">

</form>

</td></tr>

</table>

</p>

<?php

}

?>

Настройка черного списка

Эта настройка Asterisk позволяет запретить нежелательные входящие звонки и оставить линию свободной для приоритетных звонков. Работает следующим образом: сверяет, не содержится ли входящий номер в черном списке внутренней базы данных Asterisk. Для проверки используется astdb, на выходе функция возвращает значение «0» (нет в базе данных) или «1» (есть в базе данных).

Для вызова функции используется команда:

BLACKLIST()

Допустим, 2000 – наш абонент, 8882888 – CallerID в черном списке. Тогда:

exten => _2000,1,GotoIf($[${BLACKLIST()}]?black,1)

same => n,Dial(PJSIP/2000,,tr)

exten => black,1,Playback(privacy-you-are-blacklisted)

same => n,Hangup()

Чтобы добавить новый номер в черный список, используем Asterisk CLI (Command Line Interface):

asterisk -rx "database put blacklist 8882888 1"

Допустим, нам нужно текущее содержимое черного списка. Как его получить:

asterisk -rx 'database show' | grep blacklist

/blacklist/8882888:1

Чтобы сделать то же самое, но с помощью sqlite cli, выполняем команду:

sqlite> select * from astdb where key like '%blacklist%';

/blacklist/8882888|1

Настройка умной предустановленной переадресации вызовов

За нее отвечает функция FollowMe, сама команда ссылается на профили <followmeid>, которые заданы в файле followme.conf. В общем случае синтаксис команды выглядит следующим образом:

FollowMe(followmeid[,options])

Пример содержимого файла followme.conf:

[4444]

music => default

context => default

number => 1965751234,5

number => 17182025678,20

number => 1234

number => 5678

[UserTest]

number => 09253&410,30,2 ; вызываются одновременно 09253 и 410 в течение 30 секунд.

number => 525,40,1 ; но сначала вызывается 525 в течение 40 секунд.

Чтобы настроить функцию предустановленной переадресации, убедитесь, что заранее загрузили app_followme.so.

*CLI> module load app_followme.so

Loaded app_followme.so

== Parsing '/etc/asterisk/followme.conf': Found followme.conf

== Registered application 'FollowMe'

Loaded app_followme.so => (Find-Me/Follow-Me Application)

Задайте глобальные параметры функции: укажите количество миллисекунд, в течение которых система будет ожидать приема вызова:

featuredigittimeout=>4000

enable_callee_prompt=>true

Подготовьте голосовое объявление для абонента: предложите или принять, или отказаться от переадресации:

takecall=>1

По умолчанию код значения кода DTMF равен двум:

declinecall=>2

Абонент будет слышать стандартное музыкальное сопровождение:

context=>default

Автообзвон

Для автоматического обзвона в настройке Asterisk используются call-файлы (Call Files). Список для автообзвона генерируется на основе номеров из заранее подготовленного текстового файла. После выполнения bash-скрипта готовый перечень звонков попадает в каталог /var/spool/asterisk/outgoing.

Пример автообзвона, при котором номера вызываются по порядку из списка и каждому абоненту проигрываются сообщения в зависимости от выбранного контекста:

[outboundmsg1]

exten => s,1,Wait(2)

exten => s,n,Playback(/var/lib/asterisk/sounds/custom/you_call_your_friends_are_collectors)

exten => s,n,Hangup

Так выглядит bash-скрипт:

#!/bin/sh

while read number; do

cat <<EOF > /var/spool/asterisk/$number

Channel: SIP/voip_trunk/$number

Callerid: $number

MaxRetries: 200

RetryTime: 20

WaitTime: 30

Context: outboundmsg1

Extension: s

Priority: 1

EOF

chown asterisk:asterisk /var/spool/asterisk/$number

mv /var/spool/asterisk/$number /var/spool/asterisk/outgoing

echo "$number"

number=`expr $number + 1`

while [ "$?" -eq "0" ]

do

count_files ()

{

count_f=`ls /var/spool/asterisk/outgoing | wc -l`

if [ "$count_f" -eq "30" ]; then

sleep 10

return 0

else

return 1

fi

}

count_files

done

done < /var/spool/asterisk/list.txt

exit 0

Список для автоматического обзвона хранится в файле с названием /var/spool/asterisk/list.txt. Каждый следующий номер написан с новой строки, например:

3352

3353

3354

Отправка факсов на e-mail

В «Астериск» реализована функция отправки факсов на электронную почту (например, общую или отдельно назначенную). Чтобы реализовать прием факсов в FreePBX 12, в Asterisk должна быть реализована поддержка SpanDSP. Для начала убедимся, что у нас предварительно загружены два важных модуля – res_fax.so и res_fax_spandsp.so.

localhost*CLI> module show like fax

Module Description Use Count Status

res_fax.so Generic FAX Applications 1 Running

res_fax_spandsp.so Spandsp G.711 and T.38 FAX Technologies 1 Running

2 modules loaded

Переходим в настройки системного факса:

Settings > Fax Configuration

Создаем виртуальный факс командой Add Extension, а затем в настройках включаем поддержку факсов (для этого достаточно поставить галочку напротив Fax Email).

Переходим в модуль FolowMe. В блоке Destination if no answer: указываем Fax Recipient и уже там – номер нашего факса FAX (например, 2566).

Аналогичным образом можно пользоваться созданным факсом для приема входящих факсов в следующем модуле:

Connectivity > Inbound Routes

Активировать автоматическое распознавание факс-сигнала можно в разделе Fax Detected.

Все входящие факсы по умолчанию сохраняются в каталоге /var/spool/asterisk/fax.

Преимущества Asterisk

У системы Asterisk есть ряд важных преимуществ: