Телефония asterisk с нуля текстовая инструкция

Время на прочтение
10 мин

Количество просмотров 146K

На написание этой статьи меня побудило практически полное отсутствие how-to по настройке Астериска, с понятными новичку примерами. В сети можно найти кучу информации по настройке IVR, по настройке авторизации SIP-пользователей через LDAP, мануалов по созданию HA-кластеров с Астерисками внутри, etc., но нет ни одной статьи о том, как завести его с нуля, да и еще с примерами. Практически везде предлагается сразу же использовать все возможности, которые предлагает Астериск, а если убрать часть функционала, предлагаемого в мануале, то в большинстве случаев это приведет к получению неработоспособной конструкции. Эта статья — результат

хождения по граблям

… чтения мануалов. Если вы находитесь в такой же ситуации, что и я пару лет назад — добро пожаловать под кат.

И так, ситуация: вы только что узнали про Астериск и его возможности, и захотели использовать его у себя дома, или ваше руководство захотело IP-телефонию в офис.

Первое что нам необходимо — сервер с установленной операционкой. По ряду причин я выбрал для своих серверов CentOS 6. Все примеры будут с привязкой к этой ОС, так как именно на ней получаются наиболее стабильные сервера. Тем не менее, я ни коим образом не пытаюсь ограничить вас выборе. Астер нормально заведется и под Debian-ом, и под Arch-ем, и даже на FreeBSD. Замечу: желательно не пользоваться гипервизорами на начальном этапе, так как вы можете получить «металлический» голос, либо его полное отсутствие. Про таймеры и прерывания расскажу в следующей статье, так как их описание и настройка выходит за рамки этой статьи. В том случае, если свободного сервера у вас нет и без виртуальной машины не обойтись, обязательно ставьте x86-го гостя.

После того, как вы установили операционку на сервер, можно приступить к установке Астериска. Добавляем репозитории Didgium:

rpm -Uvh http://packages.asterisk.org/centos/6/current/i386/RPMS/asterisknow-version-3.0.1-2_centos6.noarch.rpm
yum update

Устанавливаем dnsmasq:

yum install dnsmasq

Устанавливаем Астериск:

yum install asterisk asterisk-configs --enablerepo=asterisk-12

Важное замечание: цифра в конце строки указывает на мажорную версию Астериска. В примере будет установлена наиболее свежая версия из 12-й ветки, доступная в репозиториях.

После установки перезагружаем сервер и заходим в шелл Астериска:

asterisk -rv

Обратите внимание на ключи, c которыми запускается шелл. Количество ключей «v» влияет на количество выводимой информации при звонке, их количество варьируется от 1 до 14.

Если установка прошла успешно и Астериск запустился, вы увидите вот такое приглашение:

asterisk*CLI>

Поздравляю, Астериск установился и готов к работе. Но пока что шелл нам не нужен, поэтому пишем exit.

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

Первое что вам требуется сделать — создать пиров в файле /etc/asterisk/sip.conf. Открываем его:

nano /etc/asterisk/sip.conf

И сразу переходим в конец файла. Вставляем следующий текст:

[internal](!)
type=friend
insecure=invite,port
context=office
fromdomain=<имя домена или IP>
host=dynamic
disallow=all
allow=alaw
qualify=yes
canreinvite=no
nat=no

[100](internal)
secret=XXX
[101](internal)
secret=XXX

Мы завели двух внутренних пиров с номерами 100 и 101. Разберем эти настройки, так как их понимание — ключ к успешному внедрению Астериска.

[internal](!)

[internal], это имя шаблона, а (!) указатель шаблона.
Почему сразу начинаем использовать шаблоны? Потому что они сокращают время настройки и уменьшают количество текста с конфигурационном файле, а для понимания они очень просты.

type=friend

Доступные параметры: «peer», «user» и «friend». Очень часто встречается ошибочное мнение относительно того, чем они отличаются. Многие считают, что параметр «user» разрешает только исходящие, «peer» — только входящие звонки, а «friend» разрешает звонки в обе стороны. Это не так. Использование ключа «peer» отключает проверку соответствия имени пользователя и пароля при звонке. При использовании параметра «peer», Астериском проверяется только соответствие IP-адреса и номера порта источника вызова, при использовании «user» — проверяется поле username, а проверка адреса источника не производится. Параметр «friend» заставляет проверять поле username и IP-адрес источника.

insecure=invite,port
invite — отключается аутентификация при входящем звонке.
port — отключается проверка порта источника.

При первоначальной настройке пропишите оба ключа.

context=office

Контекст, в котором будут обрабатывается исходящие звонки от этого устройства. Подробности чуть ниже.

fromdomain=<имя домена или IP>

Имя SIP-домена. Для первоначальной настройки укажите IP адрес сервера с Астериском.

host=dynamic

IP-адрес пира. В случае использования авторизации по логину и паролю — ставьте dynamic. Конкретный IP указывается только в том случае, если настройки пира используются для транка без регистрации.

disallow=all
allow=alaw

Указываем разрешенные кодеки.

В нашем примере первая строка запрещает использование всех кодеков, а вторая — разрешает g711-a. Настройки кодеков индивидуальны для каждого случая, однако, большинство Российских и Украинских провайдеров используют g711a и g729. Последний — пропиетарный, и Астериском поддерживается лишь в Passthrough-режиме (то есть, невозможен транскодинг).

qualify=yes

Эта строка заставляет Астериск опрашивать устройство или софтфон пакетами OPTIONS. Необходим для мониторинга и траблшутинга.

canreinvite=no

Запрещает пересылать медиа напрямую между устройствами. Рекомендую ставить «no», для упрощения настройки.

nat=no

Говорим Астериску, что пир не за натом. Описание ключей и вариантов их использования, если сервер за ним, выходит за рамки статьи. Про варианты обхода расскажу в следующей статье.

[100](internal)
secret=XXX
[101](internal)
secret=XXX

Тут мы задаем имя пира и берем настройки из шаблона. Единственные уникальные параметры в нашем примере — имя пира и пароль.
На этом мы закончили настраивать внутренних пиров, перейдем к настройке стыка с операторами. Добавим 2 записи в конец sip.conf:

[operator1]
fromdomain=<имя домена или IP>
host=1.2.3.4
insecure=invite,port
port=5060
qualify=yes
type=friend
username=YourLogin
secret=YourPass
disallow=all
allow=alaw
context=operator1

Не буду расписывать значения каждой строки, т.к. все настройки идентичны настройкам внутренних пиров, за исключением поля host. В том случае, если Астериск выступает в роли клиента (а для сервера оператора наш астериск является клиентом), нам нужно указать адрес сервера оператора или его dns-имя.

Добавим второго оператора:

[operator2]
fromdomain=<имя домена или IP>
host=5.6.7.8
insecure=invite,port
port=5060
qualify=yes
type=friend
disallow=all
allow=alaw. 
context=operator2

Отличий тоже никаких, за исключением отсутствия строк username и secret, так как, напомню, второй оператор не использует регистрацию.

Осталось настроить регистрацию на сервере оператора №1. Для этого в файле sip.conf, перед секцией описывающей настройки оператора вставим следующую строку:

register => udp://YourLogin:YourPass:YourLogin@1.2.3.4/YourLogin

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

Наверняка вы редактировали файлы конфигурации под пользователем с ограниченными правами. Если это так, то Астериск не сможет получить доступ к файлу конфигурации, поэтому пишем:

chown asterisk:asterisk /etc/asterisk/sip.conf

На этом настройка пиров закончена, ее достаточно для работы в минимальной конфигурации, сохраняем и закрываем файл и возвращаемся в шелл Астериска командой:

asterisk -rv

В шелле Астериска пишем команду:

sip reload

Теперь вы можете зарегистрировать на своем Астериске пользователей с логинами 100 и 101. Проверяется состояние регистрации следующей командой:

sip show peers

Если вы все настроили правильно, то увидите примерно вот такой вывод:

asterisk*CLI> sip show peers
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description
100/100                 10.0.0.52                              D  Yes        Yes            59080    OK (1 ms)
101/101                 10.0.0.57                              D  Yes        Yes            49973    OK (1 ms)
operator1           1.2.3.4                              No         No             5060     OK (22 ms)
operator2           5.6.7.8                              No         No             5060     OK (22 ms)

Если вы это видите, то, поздравляю, ваши устройства или софтфоны успешно зарегистрировались и Астериск увидел сервера операторов.

Состояние регистрации проверяется командой:

sip show registry

Если регистрация прошла успешно, то вы должны увидеть вот такой вывод:

asterisk*CLI> sip show registry
Host                                    dnsmgr Username       Refresh State                Reg.Time
1.2.3.4:5060                       N      YourLogin               120 Registered
1 SIP registrations.

На этом настройка пиров закончена, перейдем к настройке диалплана. Диалплан — это сердце Астериска, с помощью него обрабатываются абсолютно все звонки. Астериск понимает несколько языков, но в нашем примере мы будем использовать стандартный, появившийся в самых первых релизах Астериска. Файл конфигурации хранится в файле /etc/asterisk/extensions.conf.

Откроем его командой:

nano /etc/asterisk/extensions.conf

В стандартных файлах конфигурации хранится много дефолтных правил. Они нам не нужны, поэтому очистим содержимое и пропишем следующее:

[general]
static=yes
writeprotect=no

[globals]

Это параметры необходимые для нормального чтения диалплана, поэтому менять их не следует.

Начнем с простого. Нам нужно позвонить с номера 100, на номер 101. Для этого нужно прописать правило, сразу после секции globals:

[office]
exten => _1XX,1,Dial(SIP/${EXTEN})

Разберем эту строку.
[office] — имя контекста, в котором обрабатываются звонки от пира.
exten => — указатель начала шага.
_1XX — маска. На маске остановимся чуть подробнее. С помощью нее сортируются все звонки, попадающие в контекст диалплана.

Маска использует набор паттернов для сортировки звонков по caller-id:

X – любая цифра от 0-9
N – любая цифра от 2-9
[234-6] – цифры 2, 3, 4 и 6
. – любые возможные символы

Маска начинается с символа «_», который означает что это шаблон. В случае, если вы забудете указать его, Астериск примет 1XX за вызываемый номер и передаст Dial-у паттерны вместо номера телефона, и звонок не состоится.
1 — номер действия.

Dial — это приложение. В диалплане можно использовать более 200 различных приложений, которые используются для манипуляций со звонками. Сейчас, в самом начале, мы будем использовать только одно приложение — Dial. Из названия понятно, что оно используется для совершения звонков.

(SIP/${EXTEN}) — аргументы для приложения. В нашем примере, для внутренних пиров мы используем протокол SIP, поэтому первый аргумент, который мы передаем dial-у — указывает на используемый протокол сигнализации. ${EXTEN} — текущий экстеншен, его значение берется из заголовка (из поля destination).

/ — разделитель для передаваемых аргументов.

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

dialplan reload

Если возникли проблемы с доступом к файлу, то пишем:

chown asterisk:asterisk /etc/asterisk/extensions.conf

И снова перезагружаем диалплан через шелл Астериска.

Теперь пробуем звонить. Если вы все правильно настроили, то пир с номером 100 дозвонится до пира с номером 101. Сейчас мы можем звонить внутри офиса, между пирами, которые работают в контексте office. Для того что бы позвонить в город, нам нужно написать правило для исходящих звонков через первого оператора. Прописываем его в контекст office, выглядит оно так:

exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

Перезагружаем диалплан и пробуем звонить в город.

Теперь нам надо принять входящий звонок. Сделаем новый контекст в диалплане, пишем в конец файла:

[operator1]
 exten => s,1,Dial(SIP/100&SIP/101)

Поясню что означает «s». Это стандартная маска в Астериске, под которую попадают абсолютно все вызовы. То есть, если мы используем транк с регистрацией, входящий caller-id будет «s».

Сохраняемся и перезагружаем диалплан. Теперь мы можем принять входящий звонок через оператора, предоставляющего нам городской номер.

Сейчас нам понадобилось позвонить на сотовый телефон, с федеральным номером. Допишем еще одну строку в контекст [office]:

exten => _89XXXXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

Сохраняемся, перезагружаем диалплан и звоним. Все. Теперь мы можем полноценно использовать услуги оператора, предоставляющего городской номер.

Однако, тут кроется небольшая проблема, которая возникнет при звонке на сотовые телефоны других регионов. Так как номер телефона федеральный, то все звонки пойдут через первого оператора. Поэтому уместно уменьшить размер масок в диалплане. К примеру:

exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

С такой конструкцией все звонки на телефоны с кодами из диапазонов 890982XXXXX-890999XXXXX и 8901421XXXX-8901651XXXX пойдут через первого оператора. Не совсем удобно, соглашусь с этим. В будущих статьях выложу конфигурацию диалплана для автоматического выбора оператора в зависимости от направления звонка, так как подобное опять же выходит за рамки этой статьи.
Теперь нам осталось пустить междугородние звонки через второго оператора. Добавляем строку в контекст [office]:

exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567)
same => n,Dial(SIP/${EXTEN}@operator2)

Как вы заметили, тут появились новые приложения, которые обрабатывают звонки. Set(CALLERID(num)=74991234567) — так как мы используем транк без регистрации, то это значит что мы должны отсылать оператору caller-id. Этот номер не обязательно должен существовать. Тут мы просто представляемся провайдеру и не более. Какой номер подставлять — зависит от оператора. Некоторые предоставляют услугу подмены caller-id на номер другого оператора, для совершения исходящих вызовов по межгороду или для зоновуй связи. За подробностями обращайтесь к оператору. same => n — указатель, который позволяет не писать каждый раз маску и номер действия. К примеру:

exten => 78121234567,1,Answer
exten => 78121234567,1,Set(CALLERID(name)=Trunk_1
exten => 78121234567,1,Dial(SIP/1000)

Можно заменить на:

exten => 78121234567,1,Answer
same => n,Set(CALLERID(name)=Trunk_1
same => n,Dial(SIP/1000)

Во втором случае все гораздо проще, не так ли?

На этом все, мы настроили Астериск. Теперь мы можем звонить в город, на сотовые, по межгороду и у нас есть внутренняя связь между пирами. Получаем вот такой, вполне рабочий диалплан:

[general]
static=yes
writeprotect=no

[globals]

[office]
exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567)
same => n,Dial(SIP/${EXTEN}@operator2)
exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _1XX,1,Dial(SIP/${EXTEN})

[operator1]
exten => s,1,Dial(SIP/100&SIP/101)

Спасибо за внимание.

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

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

  • 3 отдела, в которых работают 25 сотрудников;
  • используются трехзначные телефонные номера;
  • услуги предоставляет один SIP-провайдер.

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

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

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

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

  • pjsip.conf – настройка мультимедийной библиотеки PJSIP;
  • extensions.conf – настройка диалплана: вызовы, переадресация, мелодии на удержании, автосекретарь и прочее;
  • asterisk.conf – настройка путей к используемым папкам Asterisk;
  • cdr.conf – основные настройки отчета о звонках Call Detail Record;
  • rtp.conf – настройки протокола RTP;
  • features.conf – параметры перехвата и парковки вызова, максимальное время набора и переадресации, DTMF-коды абонентских функций;
  • modules.conf – данные о модулях загрузки при старте Asterisk;
  • musiconhold.conf – конфигурации музыки на удержании;
  • iax.conf – соединения по протоколу IAX для объединения между собой двух и более АТС;
  • voicemail.conf – параметры голосовой почты;
  • logger.conf – параметры журналирования работы 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

Настройка Asterisk АТС - изображение 1

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

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

Настройка Asterisk АТС - изображение 2

Настройка Asterisk АТС - изображение 3

Настройка Asterisk АТС - изображение 4

Установите озвучку для 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:

Настройка Asterisk АТС - изображение 5

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

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

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

  • Asterisk не регистрируется на сервере и возвращает ответ Forbidden в режиме отладки.

    Причина: некорректно введен пароль, указан SIP ID или домен. Проверьте содержимое файла sip.conf.

  • Сбрасываются входящие звонки.

    Причины: внутренний пользователь не зарегистрирован. Проверьте регистрацию командой sip show registry.

  • Не проходят исходящие вызовы.

    Причина: некорректно задан шаблон номера (пропущен символ «_» перед шаблоном).

  • Звук проходит только в одну сторону.

    Причина: вы используете NAT. Включите debug и используйте tcpdump – так вы увидите, куда уходят запросы и аудиотрафик.

Расширенные настройки 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 есть ряд важных преимуществ:

  • Не нужно платить за лицензии, минуты и количество пользователей.
  • Легко масштабируется под любое количество сотрудников.
  • После настройки Asterisk вы получаете неограниченный набор функций IP-телефонии: запись и хранение звонков, голосовое меню, интеграцию с CRM и мессенджерами, автообзвон, обратный звонок и прочее.

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

Если Вас интересует профессиональное внедрение системы IP-телефонии Asterisk «под ключ», то обращайтесь к нашим специалистам по телефону 8 (495) 989-85-33 или 8 (800) 333-75-33. Доверьте свою телефонию профессионалам.

Ручная установка Asterisk

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

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

mkdir -p /usr/src/asterisk
cd /usr/src/asterisk

Далее загружаем с официального сайта Asterisk текущие пакеты в исходных кодах. Это можно сделать простым способом. В браузере открываем сайт www.asterisk.org, переходим в раздел Download, находим ссылки на требуемые пакеты и правой кнопкой копируем адрес ссылки в буфер обмена. Далее, в консоли сервера используем команду wget и ссылку, ведущую на сайт:

wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.0.0.tar.gz

Аналогичным образом выкачиваем все требуемые пакеты:
1. Asterisk
2. DAHDI
3. LibPRI

Для компиляции исходников потребуется сам компилятор. Устанавливаем его следующей командой (кавычки должны быть те, где на клавиатуре размещена буква «Ё»):

yum -y install make gcc gcc-c++ kernel-headers-`uname -r` kernel-devel-`uname -r` ncurses-devel newt-devel libtiff-devel libxml2-devel sqlite-devel glibc-headers

Распаковываем предварительно скачанные с официального сайта пакеты.

tar -xvf asterisk-current.tar.gz
tar -xvf dahdi-linux-complete-current.tar.gz
tar -xvf libpri-1.4-current.tar.gz

В первую очередь устанавливаем библиотеку LibPRI.

LibPRI — это OpenSource библиотека, предназначенная для работы с потоковыми TDM-интерфейсами ISDN: PRI (Primary Rate Interface)и BRI (Basic Rate Interface). Первый (PRI) часто используется в России для работы с операторами по каналам Е1.

cd /usr/src/asterisk/libpri-*
make clean
make
make install

Далее устанавливается драйвера каналов DAHDI.
Драйвера предназначены для взаимодействия Asterisk с платами цифровых интерфейсов: E1, FXO, FXS и пр.

cd /usr/src/asterisk/dahdi-linux-complete*
make all
make install
make config

Далее задаем автоматический запуск службы DAHDI при старте системы:

chkconfig dahdi on
service dahdi start

Если на данном этапе у Вас выдалось сообщение следующего характера:

You do not appear to have the sources for the 2.6.32-220.el6.i686 kernel installed.

make[1]: *** [modules] Error 1

make[1]: Leaving directory `/usr/src/asterisk/dahdi-linux-complete-2.6.1+2.6.1/linux’

make: *** [all] Error 2

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

На этом этапе устанавливаем само телефонное ядро Asterisk.

cd /usr/src/asterisk/asterisk*
. /configure

Если на этом шаге у Вас отобразится такая заставка, значит все идет по плану:

На этом этапе можно выбрать модули, которые будут входить в состав сборки. Если требуется работа с MySQL или другими компонентами, их рекомендуется установить заранее.

Система выбора модулей выглядит следующим образом (хотя, она может быть и на черно-белом фоне):

Управление:

  • Перемещение — стрелками клавиатуры
  • Выбор — пробелом
  • XXX — модуль не доступен для установки. Необходимо установить недостающие зависимости и повторить все с шага». /configure»
  • F12 — сохраняем и выходим

Далее, оканчиваем установку:

Создаем дефолтные конфиги и образцы.

Добавляем Астериск в автозагрузку

Запускаем Астериск консольно, количеством «v» в опции задавая плотность протоколирования (verbosity). Убеждаемся, что Астериск запускается нормально, после чего останавливаем его.

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

Теперь Asterisk можно запустить как службу, после чего подключиться к нему штатно в режиме консоли.

service asterisk start
asterisk -rvvvv

Работа с DAHDi

После инсталляции карты, проверяем ее в системе

Компилируем нужный пакет для нашей карты, Парабел, например, тут.

комментим все модули, вписываем нужный нам, например, quasarm

Указываем зоновую (региональную) принадлежность.

loadzone=ru
defaultzone=ru

Настраиваем согласование потока между АТС оператора и Asterisk.

span = 1,0,0,CCS,HDB3,CRC4 //Задается источник синхронизации, тип кодирования и необходимость проверки четности
bchan=1-15,17-31 // Задаются тайм-слоты для голоса
dchan=16 //Задаются сигнальные тайм-слоты для данных (0-й — по умолчанию)
echocanceller=mg2,1-15,17-31 // Указывается тип эхоподавителя и тайм-слоты, на которых он будет задействован.

Теперь чуть более подробно по опциям.

span = <span_num>,<timing>,<LBO>,< framing>,<coding>[,crc4]
где
span_num – номер порта E1 (от 1 до максимального номера порта в плате)
timing – использовать ли порт как источник синхронизации
0 – порт адаптера ведущий по E1
1 и более – порт ведомый по E1 и является одним из источников синхронизации адаптера. Чем больше число, тем меньше приоритет порта.
LBO – параметр не используется, ставить 0.
Framing – тип телефонной сигнализации, ставить ccs или cas.
Coding – кодирование в линии, может принимать значения ami или hdb3
Crc4 – разрешить проверку и генерацию crc4 (не обязательный параметр)

Делаем рестарт dahdi

service dahdi stop
service dahdi status

Если не выгрузился, необходимо сначала остановить Asterisk:

после

запускаем DAHDI:

Проверка:

dahdi_test
dahdi_test
Opened pseudo dahdi interface, measuring accuracy…
99.999% 99.995% 99.999% 99.999% 99.999% 99.999% 99.999%
--- Results after 7 passes ---
Best: 99.999 — Worst: 99.995 — Average: 99.998506, Difference: 99.998507

Значения не ниже 99,9 — хороший результат. Он означает, что DAHDI-устройство не вынуждено конкурировать с другими процессами за прерывания и время процессора. Значения ниже 99.9 будут приводить к ухудшению качества звука, срыву синхронизации канала E1, скрежету и обрывам голоса.

В случае, если значения ниже 99,9 (да и просто для профилактики), необходимо убедиться, что цифровая карта не делит прерывания с другими драйверами.

cat /proc/interrupts
[pbx.localdomain ~]# cat /proc/interrupts
CPU0    CPU1
0:    1326273128   0              IO-APIC-edge timer
1:    8959         0              IO-APIC-edge i8042
4:    2796129      0              IO-APIC-edge serial
6:    6            0              IO-APIC-edge floppy
7:    2            0              IO-APIC-edge parport0
8:    1            0              IO-APIC-edge rtc
9:    1            0              IO-APIC-level acpi
14:   50338541     0              IO-APIC-edge ide0
50:   0            0              IO-APIC-level uhci_hcd:usb3
58:   7369         23441503       PCI-MSI ahci
114:  1326250778   0              IO-APIC-level wctdm
146:  28024883     0              PCI-MSI eth0
169:  0            0              IO-APIC-level uhci_hcd:usb5
225:  0            0              IO-APIC-level uhci_hcd:usb4
233:  0            0              IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2
NMI:  0            0
LOC:  1325416311   1325416314
ERR:  0
MIS:  0

wctdm занимает отдельный irq, это правильно
если с кем-то делит, то это может сказывать на работе карты и качестве голоса.

Чаще всего наблюдается ситуация, когда драйвера USB и DAHDI занимают одно прерывание. Это нежелательная ситуация, и в ней лучше всего либо разнести драйвера по разным прерываниям, либо отключить USB на уровне BIOS.

Тут можно увидеть ошибки в работе карты:

показывать сведения о карте

показывает конфигурационный файл, который используется

затем в /etc/asterisk/chan_dahdi.conf
примерный конфиг:

[trunkgroups]

[channels]

language=ru
context=from-trunk
signalling=pri_cpe
rxwink=300             ; Atlas seems to use long (250ms) winks
;
; Whether or not to do distinctive ring detection on FXO lines
;
;usedistinctiveringdetection=yes
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
echotraining=800
rxgain=0.0
txgain=0.0
group=0
callgroup=1
pickupgroup=1
immediate=no
;busydetect=yes
;busycount=5
faxdetect=no
  
switchtype=euroisdn ; or qsig
immediate=no
context=from-trunk
resetinterval=100000000
signalling=pri_cpe ; or pri_net
group=0
channel ≥1-15,17-31

В Астериск CLI

dahdi restart
dahdi show channels — проверяем что каналы поднялись
dahdi show channel 1

Установка Asterisk из YUM

Помимо компиляции Asterisk вручную, можно воспользоваться менеджером пакетов YUM, который является штатной утилитой RedHat-based дистрибутивов.

Установку Asterisk мы будем производить из самых «аутентичных» источников — репозитория Asterisk.Org.

Краткая инструкция по работе с данным репозиторием находится здесь

Вам требуется создать новый файл с названием «centos-asterisk.repo» в директории the» /etc/yum.repos.d». В него вы вносите следующую конфигурацию:

[asterisk-tested]
name=CentOS-$releasever — Asterisk — Tested
baseurl=http://packages.asterisk.org/centos/$releasever/tested/$basearch/
enabled=0
gpgcheck=0
#gpgkey=http://packages.asterisk.org/RPM-GPG-KEY-Digium

[asterisk-current]
name=CentOS-$releasever — Asterisk — Current
baseurl=http://packages.asterisk.org/centos/$releasever/current/$basearch/
enabled=1
gpgcheck=0
#gpgkey=http://packages.asterisk.org/RPM-GPG-KEY-Digium

Сохраняете данный файл и создаете новый: «centos-digium.repo». Вносите в него следующий текст:

[digium-tested]
name=CentOS-$releasever — Digium — Tested
baseurl=http://packages.digium.com/centos/$releasever/tested/$basearch/
enabled=0
gpgcheck=0
#gpgkey=http://packages.digium.com/RPM-GPG-KEY-Digium

[digium-current]
name=CentOS-$releasever — Digium — Current
baseurl=http://packages.digium.com/centos/$releasever/current/$basearch/
enabled=1
gpgcheck=0
#gpgkey=http://packages.digium.com/RPM-GPG-KEY-Digium

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

yum install asterisk18 asterisk18-configs asterisk18-voicemail dahdi-linux dahdi-tools

Запускаем Asterisk и подключаемся к нему:

service asterisk start
asterisk -rvvv

Астериск — конфигурационные файлы

Главный конфигурационный файл:

asterisk.conf: Сервер Asterisk берет из этого файла информацию о том, где какие файлы находятся в системе, включая директорию, где лежат все остальные файлы конфигурации. По умолчанию, Asterisk ищет файл asterisk.conf в директории /etc/asterisk, но Вы можете, с помощью параметров запуска Asterisk, задать другое расположение и имя этого файла.

Файлы конфигурации каналов Asterisk:

 iax.conf: Файл с конфигурацией канала IAX2
sip.conf: Файл с конфигурацией канала SIP
chan_dahdi.conf: Файл с конфигурацией каналов DAHDi

Файлы конфигурации Диалплана (Плана набора):

extensions.conf: Конфигурация плана набора
extensions.ael: План набора в новом формате AEL (Asterisk Extensions Language)
features.conf: Конфигурация Парковки вызовов, перевода вызова, перехвата и прочих сервисных функций Asterisk.

Файлы конфигурации специфичные для некоторых команд плана набора:

alarmreceiver.conf: Конфигурация для команды AlarmReceiver
dundi.conf: Конфигурация, используемая командой DUNDiLookup
festival.conf: Конфигурация, используемая командой Festival
indications.conf: Определение тонов для команды Playtones
meetme.conf: Файл с конфигурацией конференций для команды MeetMe
musiconhold.conf: для команды MusicOnHold
queues.conf: Определение очередей звонков и их параметров для команды Queue
voicemail.conf: Конфигурация голосовых почтовых ящиков для команды VoiceMail

Конфигурационные файлы не попадающие в какую-либо категорию:

amd.conf: (Появился, начиная с версии 1.4.0) Параметры приложения для определения автоответчиков.
alsa.conf
cdr_odbc.conf
cdr_pgsql.conf
codecs.conf
features.conf: Конфигурация парковки вызовов и других возможностей
followme.conf: (Появился, начиная с версии 1.4.0) Параметры для трансфера вызовов системы findme/followme.
func_odbc.conf: (Появился, начиная с версии 1.4.0) В этом файле определяются параметры доступа к sql базам данных.
http.conf: (Появился, начиная с версии 1.4.0) Конфигурация встроенного мини http сервера в asterisk.
logger.conf: Настройка логирования в Астериск
manager.conf: Конфигурация для Asterisk manager API
modules.conf: Конфигурация загрузки модулей Asterisk
odbc.conf: Конфигурация UnixODBC? драйверов для Asterisk
 res_snmp.conf: (Появился, начиная с версии 1.4.0) Включение поддержки snmp в asterisk и определение статусов агентов full/sub.
 rtp.conf: Конфигурация протокола передачи media информации RTP, порты и настройки
say.conf: (Появился, начиная с версии 1.4.0) Определения правил произношения цифр, дат и т.д. Для различных языков.
sla.conf: (Появился, начиная с версии 1.4.0) Конфигурация Shared Line Appearance.
smdi.conf: (Появился, начиная с версии 1.4.0) Конфигурация обмена сообщениями SMDI.
udptl.conf: Появился, начиная с версии 1.4.0) конфигурация для транспорта T38 udptl.

Основная фишка во всех файлах конфигурации

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

Установка кодека g729  (и g723)

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

cli> core show translation

показывает время (ед. измерения в заголовке таблицы) транскодинга из одного формата в другой. В то же время позволяет понять, какие кодеки установлены. и загружены в систему.

cli>!cd /usr/lib/asterisk/modules/

»!» в CLI означает, что команду нужно выполнить в консоли LINUX
на сайте http://asterisk.hosting.lv/ выбираем версию нашего астериск, платформу (i386 или x86_64) и тип использованного компилятора (IPP или GCC4).

Например, для Сentos 32 бита, на платформе intel, подойдет:

cli>!wget http://asterisk.hosting.lv/bin/codec_g729-ast18-gcc4-glibc-pentium4.so

затем загружаем модуль в астериск

 cli>module load codec_g729-ast18-gcc4-glibc-pentium4.so

проверяем

cli> core show translation

если мы ошиблись в выборе нужного кодека, скорее всего астериск «упадет»

Запускаем астериск и видим на каком этапе он вываливается

asterisk -vvvvvvvvvvvvvvvvvvvc</span>

Удаляем модуль и перезапускаем астериск.

Без удаления можно обойтись так: в файле modules.conf добавить строчку

noload ≥ codec_g729-ast18-gcc4-glibc-pentium4.so</span>

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

После нормальной загрузки кодека, выполните команду core show translations для того чтобы убедиться в корректности установки кодека.

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

Теперь необходимо настроить со стороны Asterisk-а SIP-аккаунт для внутреннего абонента.

Структура sip.conf:

[general]
;глобальные значения переменных канала SIP
disallow=all
allow=gsm
allow=ulaw
allow=alaw
context=default
;……
register ≥ user:pass@host/callerid

Создаем номер для абонента, указывая для него опции подключения.

[100]
deny=0.0.0.0/0.0.0.0     //указание сетей, из которых запрещено подключение
permit=0.0.0.0/0.0.0.0   //указание сетей, из которых разрешено подключение
type=friend              //указываем тип абонента.
secret=asdff34tgg        //задаем пароль на подключение
qualify=yes              // Активируем KeepAlive
port=5060                // Задаем порт, на котором будет работать абонентское устройство (используется, если не работает функция регистрации абонентского устройства)
pickupgroup=1            // Задаем принадлежность к группе перехвата
nat=yes                  // Указываем, будет ли устройство находиться за NAT-ом по отношению к серверу Asterisk
mailbox=100@device       // Указываем номер и контекст ящика голосовой почты
host=dynamic             // Задаем IP абонетского устройства или сообщаем с опцией dynamic, что для местоопределения будет использоваться механизм регистрации
dtmfmode=rfc2833         // Тип передачи DTMF-сигналов
disallow=all             // Сначала запрещаем все кодеки
allow=ulaw               // Тут указываем допустимые кодеки, перечисляя их построчно сверху вниз в порядке приоритета
allow=gy29
dial=SIP/100             // Задаем команду Dial, которая будет использоваться для вызова данного абонента
context=from-internal    // Указываем принадлежность абонента определенному контексту.
canreinvite=no           // Указываем возможность использования механизма CanReinvite. Не рекомендуется для устройств, которые могут быть отделены от сервера NAT-ом
callgroup=1              // Указываем группу набора
callerid=Alexey <100>    // Задаем CallerID — имя и номер, которые будут высвечиваться у других абонентов, а также в CDR.
call-limit=2             // Задаем максимальное количество линий, которые одновременно могут использоваться абонентом. Рекомендуется задавать не более 2-3-х одновременных линий.

сохраняем и делаем в cli

проверяем

sip show peers
100/100                     (Unspecified)     D  N  A 5060    UNKNOWN
1 sip peers [Monitored: 1 online, 0 offline Unmonitored: 0 online, 0 offline]

Теперь настраиваем софтфон или SIP телефон. Простая и понятная инструкция по настройке софтфона X-Lite для Asterisk находится здесь. Указываем реквизиты из sip.conf
user
pass
ip-proxy — IP нашего Астериск
Когда телефон подключится, мы должны увидеть

sip show peers
100/100                     192.168.0.10    D  N  A 5060    OK (111 ms)
1 sip peers [Monitored: 1 online, 0 offline Unmonitored: 0 online, 0 offline]

Настройки для конкретного SIP peer

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

Полезные команды CLI Asterisk

sip show peers
sip show peer 100
sip show settings
sip reload
sip set debug on
rtp set debug on
core show translation
dahdi show channels
core show application Dial
core show application CALLERID
core reload
dialplan reload
dialplan show context
dialplan show 100@context

Простой диалплан. Файл extensions.conf

Файл Extensions.conf описывает логику работы Asterisk, а именно, обработку входящих вызовов, маршрутизацию исходящих вызовов, обработку звонков и событий по разнообразным правилам. В Asterisk это называется ДиалПланом (DialPlan). Как говорят разработчики, диалплан — это сердце Asterisk.

За работу диалплана отвечает файл extensions.conf. Файл поделен на контексты, в каждом из которых прописана логика работы. Логика работы формируется с помощью приложений. Приложения — это функции Asterisk, запускаемые с параметрами. Последовательность выполнения приложений — построчная.

Так как каждая телефонная линия или номер внутреннего абонента может принадлежать только одному контексту, осуществляется логическое разделение всех внутренних абонентов и телефонных линий операторов.

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

  • звонка на внутренний номер 999, который выполняет какую-либо функцию
  • звонка другому внутреннему абоненту, номер которого начинается с цифры «1» и состоящий из трех цифр
  • звонок на внешние телефонные линии через SIP-оператора
[from-internal]
;тестовый звонок на номер 999, с возможность донабрать 2,3,5
exten ≥ 999,1,Answer ()
exten ≥ 999,n,Background (hello-world)
exten ≥ 999,n,Hangup ()
exten ≥ 2,1,Playback (digits/2)
exten ≥ 3,1,Playback (digits/3)
exten ≥ 5,1,Playback (digits/5)
;звонок на внутреннего абонента 1XX подключенного по технологии SIP
exten ≥ _1XX,1,Dial (SIP/${EXTEN},60)
;звонок на московский номер через транк провайдера, который подключен к Asterisk по технологии SIP
exten ≥ _495ZXXXXXX,1,Dial (SIP/provider/8${EXTEN},60)

Предположим что у нас есть небольшая организация, где работает около 50 сотрудников. Все они используют Asterisk для связи внутри компании и звонков наружу. Все настройки буду проводить на свежей Asterisk 18. В своей предыдущей статье я рассмотрел процесс установки Asterisk 18 на Centos 8. Давайте рассмотрим как происходит настройка Asterisk с нуля.

Учитывая тот факт что библиотека chan_sip не актуальна, будем рассматривать настройку через PJSIP. Старую библиотеку необходимо отключить (если включена) для исключения конфликтов.

Отключение chan_sip

В файле /etc/asterisk/modules.conf необходимо найти и убрать ; перед строкой noload => chan_sip.so

nano /etc/asterisk/modules.conf

noload chan_sip

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

Структура Asterisk

Настройка Asterisk происходит путем редактирования конфигурационных файлов. Располагаются они в директории /etc/asterisk/ . Перечислю основные файлы которые нам потребуются для начальной настройки.

  • pjsip.conf — файл настройки мультимедийной библиотеки PJSIP. В нем содержатся настройки регистрации, транков, пользователей
  • extensions.conf — в данном файле происходит настройка диалплана. Все параметры обработки вызова, переадресация, мелодии на удержании, настройка автосекретаря и многое другое.
  • asterisk.conf — основной конфигурационный файл, тут указаны пути к используемым папкам, параметры запуска Asterisk и т.д. Подробный разбор параметров данного файла есть тут
  • sip.conf — файл настройки устарелой библиотеки chan_sip. В работе его использовать не будем
  • cdr.conf — основные настройки ведения отчета о звонках Call Detail Record
  • rtp.conf — в данном файле определены настройки касательно протокола RTP (порты, поддержка ICE и т.д.)
  • features.conf — указываются параметры перехвата и парковки вызова, максимальное время набора и переадресации, DTMF коды абонентских функций
  • modules.conf — в данном файле содержится информация о модулях которые необходимо загружать при старте Asterisk, либо отключить их загрузку.
  • musiconhold.conf — настройка параметров конфигурации музыки на удержании
  • iax.conf — используется для настройки соединений по протоколу IAX. Данный протокол как правило используется для объединения между собой двух и более АТС
  • voicemail.conf — детальная настройка параметров голосовой почты
  • logger.conf — указаны детальные параметры журналирования работы Asterisk

Я перечислил лишь основные конфигурационные файлы Asterisk. Но их значительно больше. В повседневной жизни используется только два файла exntensions.conf и pjsip.conf

Часть функций а также повторная загрузка данных из конфигурационных файлов происходит с помощью консоли Asterisk. Зайти в консоль можно так:

Для более детального вывода данных в консоль можно использовать ключ -v (я обычно использую -vvvvvv). Чем больше букв v указано, тем детальнее будет вывод информации в консоль. Запуск в режиме повышенной детализации:

Полный список консольных команд с описанием можно прочитать в моей статье

Подключение пользователей

Добавление новых пользователей происходит в файле pjsip.conf. Конфигурационный файл pjsip.conf состоит из секций. Имена секций указываются в квадратных скобках. Название секций может быть произвольным, кроме имен ENDPOINT и AOR которые должны быть одинаковые с заголовком SIP URI.

Перечислю возможные типы секций:

  • ENDPOINT — описывает опции SIP протокола и взаимодействует с модулями AOR, AUTH и TRANSPORT. Раздел ENDPOINT обязательно должен быть связан с одной или несколькими секциями AOR. В секции ENDPOINT указываются основные параметры SIP подключения (телефон, софтфон, транк и т.п.)
  • AOR — расшифровывается как Address of Record. Данная секция указывает как связаться с ENDPOINT. Без AOR секция ENDPOINT не работает. Тут указывается продолжительность регистрации, соответствие голосовой почте, MWI, настройки переодичности SIP сообщений для мониторинга состояния устройства. Получая запрос на регистрацию от устройства первичная обработка идет в AOR. Происходит поиск соответствия SIP заголовку To
  • TRANSPORT — в данной секции описываются настройки транспортного уровня с использованием протоколов UDP, TCP, WebSockets, а также шифрование TLS/SSL. Одну транспортную секцию можно настроить для использования множеством точек ENDPOINT. Либо, если необходимо, создать уникальный транспортный уровень для конкретной точки
  • System — определяются общие системные настройки PJSIP
  • Global — настраиваются глобальные параметры. Возможность включение дебага, изменение строки User Agent, параметр поля max forwards и т.п.
  • AUTH — данная секция используется для аутентификации и содержит настройки для входящих и исходящих регистраций. С этой секцией ассоциируются ENDPOINT и REGISTRATIONS. В случае необходимости разные ENDPOINT и REGISTRATIONS могут использовать общую секцию AUTH
  • REGISTRATION — обычно используется для регистрации транка от провайдера
  • DOMAIN_ALIAS — используется для указания псевдонимов используемых доменов
  • ACL — секция ACL используется для контроля входящих SIP соединений
  • IDENTIFY — указываются IP адреса конечных точек ENDPOINT
  • CONTACT — можно указать короткий контакт вместо SIP URI

В каждой секции есть опция type содержащая назначение секции в общей конфигурации.

Создание первого пользователя

Создадим учетную запись нашего первого пользователя в Asterisk. Пользователь может подключаться с SIP телефона либо софтфона. Для удобства я заполняю конфигурационные файлы добавляя новые данные в конец файла. Также очень удобно удалить все и создать чистый файл для удобства чтения. Откроем файл pjsip.conf для редактирования

nano /etc/asterisk/pjsip.conf

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

[tr-udp]
type=transport
protocol=udp
bind=0.0.0.0
allow_reload=true

[1000]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=tr-udp
auth=auth1000
aors=1000
 
[auth1000]
type=auth
auth_type=userpass
password=parol
username=1000
 
[1000]
type=aor
max_contacts=2

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

[tr-udp] — является транспортной секцией. На это указывает запись type=transport

  • protocol — тип используемого протокола клиента
  • bind — IP адрес клиента. Можно указать конкретный IP чтобы с других адресов никто не мог использовать данную запись. Если необходимо можно задать и порт.
  • allow_reload — разрешить перенастройки транспортного уровня без перезагрузки Asterisk. По умолчанию без указания данного пункта с параметром true после изменения настроек необходимо рестартовать Asterisk

[1000] — это секция ENDPOINT. Как я писал выше название секции ENDPOINT соответствует названию секции AOR.

  • type — тип секции. В данном случае ENDPOINT
  • context — контекст диалплана. Данный параметр указывает куда будут направлены звонки приходящие на данный ENDPOINT
  • disallow — указывает какие кодеки необходимо запретить. В данном случае all — все кодеки
  • allow — кодеки разрешенные для использования. Строкой выше мы запретили все кодеки, текущей строкой разрешили только alaw
  • transport — указывает какую конфигурация использовать для траспорта. В нашем случае tr-udp что мы создали выше.
  • auth — объект аутентификации относящийся к данному ENDPOINT. В нашем случае это auth1000 дальше по файлу будет его описание
  • aors — объек AOR для этого ENDPOINT

[auth1000] — секция аутентификации

  • type — тип используемой секции
  • auth_type — тип используемой аутентификации. У меня используется логин и пароль
  • password — пароль от учетной записи
  • username — логин учетной записи

[1000] — AOR секция

  • type — тип секции
  • max_contacts — максимальное количество контактов которые могут использоваться с данной AOR

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

И введем команду повторной загрузки настроек из файла pjsip.conf

pjsip reload

Теперь запустим SIP телефон и настроем учетную запись 1000 на нём. В работе я использую софтфон MicroSIP. Он мне нравится за свою компактность и возможность работы в portable режиме.

Добавление пользователя 1000
Microsip user 1000 OnLine

Как видно на изображении выше мы удачно подключились к АТС. Но что делать если нам необходимо добавить не одного, а 50 пользователей? Если писать такой конфиг по каждому пользователю, потом очень сложно будет что-то найти. Для таких случаев есть шаблоны. Разберемся как они работают.

Создание шаблона

Использование шаблонов также полезно для разделения сотрудников из разных отделов с разным уровнем доступа. Название шаблона указывается в квадратных скобках [] затем идет (!)

;===============Шаблон отдела маркетинга
 
[marketing-endpoint](!)
type=endpoint
transport=tr-udp
context=from-internal
disallow=all
allow=alaw
 
[pass-auth](!)
type=auth
auth_type=userpass
 
[two-contact-aor](!)
type=aor
max_contacts=2

В шаблоне можно указывать все те же параметры что и при обычном создании пользователя. Я привел пример простого шаблона отдела маркетинга с указанием минимального набора настроек. Однако их может быть значительно больше, например: используемые кодеки, необходимость использования NAT, контекст, разрешенную лиюо запрещенную сеть для регистрации абонентов. В общем параметров может быль сколь угодно много, и писать все их для каждого пользователя дело не благодарное. Рассмотрим далее применение шаблона для создания пользователей.

Применение шаблона

Создадим трех пользователей отдела маркетинга с применением шаблона. Для использования шаблона необходимо справа от названия секции в круглых скобках добавить название шаблона.

;===============Добавочный номер 2000
[2000](marketing-endpoint)
auth=auth2000
aors=2000

[auth2000](pass-auth)
password=2000
username=2000
 
[2000](two-contact-aor)
 
;===============Добавочный номер 2001
[2001](marketing-endpoint)
auth=auth2001
aors=2001

[auth2001](pass-auth)
password=2001
username=2001
 
[2001](two-contact-aor)

;===============Добавочный номер 2002
[2002](marketing-endpoint)
auth=auth2002
aors=2002

[auth2002](pass-auth)
password=2002
username=2002
 
[2002](two-contact-aor)

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

Команда для вывода пользователей зарегистрированных на сервере

pjsip show aors
pjsip show auths
pjsip show endpoints
Маршрутизация вызовов

Однако, на данном этапе мы пока не можем совершать звонки. При попытке набрать любой номер будет ошибка. Для совершения звонков нам необходимо внести изменения в файл extensions.conf — основной рабочий файл. В нем настраивается маршрутизация вызовов Asterisk. В понимании телефонии и Asterisk не исключение это называется DIALPLAN.

Структура файла extensions.conf

Файл имеет две обязательные секции general и globals. Секции также указываются в квадратных кавычках. После двух обязательных секции идут секции вашего диалплана.

Рассмотрим параметры секции [general]

  • static — когда установлено значение no или не указано pbx_config перезапишет данный файл когда extensions будет изменен. Все комментарии в этом файле будут потеряны
  • writeprotect — если параметр static имеет значение yes, а параметр writeprotect=no то можно сохранить настройки диалплана через командную строку Asterisk «dialplan save»
  • autofallthrough — в случае когда параметр имеет значение yes и параметры вашего диалплана исчерпали возможности к дальнейшему действию, звонок будет завершен. Это происходит по умолчанию. Если значение будет no или не указано Asterisk будет ожидать действия от пользователя.
  • extenpatternmatchnew — установив параметр в значение true или yes будет использоваться новый алгоритм который будет искать лучшее совпадение паттерна. Увеличение скорости обработки по новому алгоритму повышается с увеличением количества обрабатываемых добавочных номеров. По умолчанию данный параметр отключено. Включайте на свой страх и риск.
  • clearglobalvars — если задан параметр clearglobalvars, глобальные переменные будут очищены и повторно обработаны при перезагрузке диалплана или перезапуска Asterisk. Когда параметр не установлен или имеет значение no глобальные переменные будут сохраняться при перезагрузке и даже при удалении из extensions.conf или одного из включенных в него файлов, будет использоваться предыдущее значение.

Перейдем к параметрам секции [globals]

В Asterisk могут использоваться как глобальные переменные так и переменные канала. Есть еще переменные окружения, они обеспечивают доступ из Asterisk к переменным окружения unix.

Глобальные переменные могут быть определены в секции [globals] либо с помощью команды SetGlobalVar в плане набора номера. Глобальная переменная отличается тем, что работает для всего файла exntensions.conf. Переменные канала используются в том диалплане в котором они определены.

В глобальных переменных удобно хранить длинные добавочные номера, время работы (при использовании автосекретаря) и другие часто используемые переменные. Пример секции [globals]

[globals]
MSK_time=08:00-19:00
MSK_week=mon-sat
RECEPTION=PJSIP/3010

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

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

[from-internal]
exten = 1000,1,Dial(PJSIP/1000)

Я написал контекст с названием from-internal далее указал что при звонке на добавочный 1000 будет происходить дозвон номера 1000 через интерфейс PJSIP. При создании пользователя Asterisk в файле pjsip.conf в разделе настройки endpoint мы указываем поле context=from-internal. Это означает что совершая вызов данный пользователь будет руководствоваться правилами указанными в контексте [from-internal] файла extensions.conf

Процесс вызова

Совершая вызов абонент будет искать в своем контексте правила набора указанного номера. В каждом контексте может быть большое количество добавочных номеров. К набираемому добавочному номеру правила применяются последовательно.

Формат записи такой: exten = имя,приоритет,приложение(параметры)

Расширим наш диалплан, добавив дополнительные пункты. И не забудьте, что при изменений файла extensions.conf необходимо чтобы Asterisk перечитал его. Для этого заходим в консоль и вводим команду dialplan reload

[from-internal]
exten = 1000,1,Answer() ; Поднимаем трубку
exten = 1000,2,Playback(demo-congrats)	; Проигрываем приветственное сообщение
exten = 1000,3,Dial(PJSIP/1000)	; Звоним на номер 1000

Как вы уже заметили, комментарии можно писать сразу после ;

При звонке на 1000 мы поднимаем трубку, проигрываем приветствие и последним действием будет звонок на добавочный 1000. Можно написать и так:

[from-internal]
exten = 1000,1,Answer()
exten = 1000,n,Playback(demo-congrats)
exten = 1000,n,Dial(PJSIP/1000)

Приоритет можно заменить буквой n но первый приоритет указывать необходимо обязательно. Можно еще немного оптимизировать наш диалплан.

[from-internal]
exten = 1000,1,Answer()
 same = n,Playback(demo-congrats)
 same = n,Dial(PJSIP/1000)

Используя same вместо exten можно не писать в каждой строке добавочный 1000. Но как и в случае с n в первой строке указывать exten обязательно.

Системные добавочные номера

  • s — при поступлении вызова в контекст, без указанного добавочного номера используют номер s (от слова start)
  • i — в случае когда абонент набирает не существующий добавочный номер вызов переходит на добавочный номер i
  • t — когда абонент долго не нажимает кнопку после запуска приложения WaitExten() вызов переходит на добавочный номер t. Время ожидания по умолчанию — 10 секунд
  • h — добавочный используемый при завершении вызова, когда уже закрылся медиаканал

Писать диалплан для каждого добавочного номера дело не благодарное, для таких целей будем использовать шаблон.

Шаблоны номеров

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

  • X — цифра от 0 до 9
  • Z — любая цифра от 1 до 9
  • N — любая цифра от 2 до 9
  • . — любой символ
  • [184-7] – цифры 1,8,4,5,6,7

Шаблон для звонков внутри организации по всем добавочным из 4 цифр будет выглядеть так:

[from-internal]
exten = _XXXX,1,Dial(PJSIP/${EXTEN})

Где _XXXX — любые 4 цифры, ${EXTEN} — переменная передающая набранный добавочный номер

Вложение контекстов

Есть одна особенность, Asterisk сначала сортирует добавочные (exten) и затем ищет первое совпадение. Чтобы при совпадении шаблонов заставить Asterisk звонить по нужному будем использовать вложенные контексты.

[from-internal]
include=long
exten = _XXXX,1,Dial(PJSIP/${EXTEN})

[long]
exten => _X.,1,Dial(PJSIP/${EXTEN}@sipnet)

В контексте from-internal сначала будет обрабатываться шаблон _XXXX затем вложенный контекст include=long

Увидеть в какой последовательности Asterisk обрабатывает диалплан можно введя в консоли команду dialplan show

dialplan show

Благодаря созданному диалплану все 4-х значные номера будут идти на локальных пользователей. Остальные номера пойдут через внешнего провайдера SIPNET. И чтобы все внешние звонки действительно пошли через SIPNET давайте его настроим в pjsip.conf

Настройка внешнего провайдера

Для проверки входящей и исходящей связи я буду использовать тестовый транк с регистрацией от SIPNET. Я настрою сам транк в файле pjsip.conf и правила маршрутизации звонков в extensions.conf

Открываем файл pjsip.conf

nano /etc/asterisk/pjsip.conf

Добавляем в конец файла регистрацию транка провайдера

[sipnet]
type=registration
transport=tr-udp
outbound_auth=sipnet
server_uri=sip:sipnet.ru
client_uri=sip:0042095477@sipnet.ru
retry_interval=60
 
[sipnet]
type=auth
auth_type=userpass
password=пароль
username=0042095477
 
[sipnet]
type=aor
contact=sip:sipnet.ru:5060
 
[sipnet]
type=endpoint
transport=tr-udp
context=from-sipnet
disallow=all
allow=alaw,ulaw
outbound_auth=sipnet
aors=sipnet
from_user=0042095477
from_domain=sipnet.ru
 
[sipnet]
type=identify
endpoint=sipnet
match=sipnet.ru

Тонкости настройки транка провайдера у каждого свои но приведенный пример как правило подойдет для большинства других.

После добавления новых данных в файл не забываем зайти в консоль asterisk и перечитать конфиги

Настроим входящую маршрутизацию

Добавляем настройки маршрутизации входящей связи при звонке снаружи на наш номер SIPNET

nano /etc/asterisk/extensions.conf

Вставим следующий текс в конец файла

[from-sipnet]
exten = s,1,Answer()
 same = n,Wait(5)
 same = n,Playback(demo-congrats)
 same = n,Dial(PJSIP/1000&PJSIP/2000)

Я создал контекст from-sipnet указанный ранее при создании ENDPOINT sipnet. При поступлении входящего вызова (s -без доб номера) поднимать трубку, ожидать 5 секунд (Wait) затем проиграть приветственное сообщение. После окончания приветствия звонить одновременно на 2 добавочных 1000 и 2000.

Приветственное сообщение записать самим в формате wav с параметрами 8кГц, 16 Бит, Моно запись скинуть в папку и указать к ней путь, например

Playback(/opt/sound/my_sound)

Можно добавить обработку входящего вызова по времени.

[from-sipnet]
exten = s,1,Answer()
 same = n,Wait(5)
 same = n,GotoIfTime(08:00-18:00|mon-fri|*|*?work:outwork)
 same = n(work),Playback(/opt/work_music)
 same = n(work),Dial(PJSIP/1000&PJSIP/2000)
 same = n(outwork),Playback(/opt/outwork_music)
 same = n,Hangup()

В зависимости от текущего времени и дня недели если вызов совершен во временной промежуток указанный в GotoifTime будет переход на метку work. Все вызовы не попадающие под временной интервал будут отправляться на метку outwork.

На данном этапе мы создали обработку внутренних вызовов, входящих и исходящих внешних (городских) вызовов. В тестовом аккаунте проверить исходящие вызовы можно позвонив по телефону техподдержки 2009991

Считаю настройку для небольшой организации достаточной. Мы разобрали как происходит настройка Asterisk с нуля.

Смотрите видео по настройке

Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.

Asterisk – это мощное и бесплатное решение для построения собственного сервера IP-телефонии, по сути является программной Мини-IP-АТС. В этой статье разберемся как развернуть такой сервер и поговорим о его настройках.

Для развертывания Asterisk мы с вами будем использовать готовый дистрибутив FreePBX Distro на базе операционной системы Sangoma Linux 7, которая в свою очередь сделана на базе CentOS. Система хорошо встает как на “железные” сервера, так и на виртуальные машины, системные требования не прихотливые – процессора на 2 ядра и 2 гигабайта оперативной памяти хватит для небольшого офиса на 30 абонентов. Если планируется большее количество абонентов, лучше увеличить количество оперативной памяти до 4 гигабайт и использовать процессор уровня Intel Core i5-6600T (или аналогичный). Скачать свежий дистрибутив можно отсюда.

Начинаем установку. Загрузочный экран встречает нас меню с выбором версии Asterisk, выберем версию 18, как он нам рекомендует, хотя я  больше предпочитаю 16 версию.

Далее нам предлагают выбор режимов установки, либо с выводом по VGA, либо можно подключиться через VNC и произвести установку удаленно. Мы выберем первый вариант.

Далее выбираем FreePBX Standart и запускаем установку . Во время установки нам предложат задать пароль root, сделаем это сразу.

После ввода пароля нажимаем кнопку Done в левом верхнем углу.

Дожидаемся окончания установки, в конце установщик сообщит нам об этом сообщением Complete! Нажимаем кнопку Reboot и перезагружаем сервер.

После перезагрузки нас поприветствует Sangoma Linux 7 и попросит ввести данные для входа в консоль. Вводим логин root и пароль, который мы задавали для root во время установки, попадаем в консоль. В самой консоли мы пока ничего делать не будем, так как для этого у нас есть полнофункциональный веб-интерфейс FreePBX, доступный по IP-адресу, который у вас высветится в консоли.

При первом входе в веб-интерфейс нас поприветствует FreePBX и предложит заполнить данные администратора. Заполняем под себя и нажимаем кнопку Setup System.

После создания учетной записи администратора мы увидим страницу приветствия. Для авторизации нажимаем кнопку FreePBX Administration, вводим наш логин и пароль и осуществляем вход.

После входа мы увидим всплывающее окно, предлагающее нам пройти активацию. Не бойтесь, активация тут абсолютно бесплатная и добровольная. Она необходима для того, чтобы вы могли пользоваться коммерческими плагинами, которые мы с вами использовать не будем, а так же получать платную техническую поддержку. Все же я рекомендую активировать ваш сервер, так как это даст дополнительные бесплатные возможности, например, доступ к модулю System Admin, к тому же это не сложно и не требует от вас много действий. Для активации необходимо будет создать учетную запись с вашим адресом электронной почты, после чего активировать сервер. Напоминаю – это бесплатно!

Далее будет ряд всплывающих окон информационно-рекламного характера, на всех них нажимаем кнопку Skip, пока они все не исчезнут. Увы, бесплатные продукты любят такое.

Далее нас попросят выбрать язык голосовых подсказок, которые будут выводиться в телефонную линию, а так же язык интерфейса системы. Для России выбираем в обеих случаях – Russian, или то, что вам нужно, в конце нажимаем Submit. Кстати, Asterisk имеет неплохую русскую локализацию звуковых подсказок, сделанную на профессиональной студии.

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

Нажимаем Continue, соглашаемся со стандартными настройками, в конце нажимаем красную кнопку Apply Config в правом верхнем углу, применяем параметры.

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

Приступаем к настройке Asterisk. Для удобства можно переключить язык веб-интерфейса на русский язык, или продолжать настройку на английском. Мне больше нравится работать на английском языке, но для показа примеров буду использовать русский. Сразу скажу, что русская локализация интерфейса в FreePBX не полная и периодически нам будет попадаться непереведенный текст в интерфейсе. Чтобы написанный материал соответствовал сделанным мною скриншотам, в местах, где будет присутствовать английских текст, я буду так же ссылаться на английские названия, где по-русски – на русские. Если вы устанавливаете другую версию Asterisk, у вас возможно будет другая локализация, более подробная.

Перед началом основной настройки астериска назначим ему статический IP-адрес. Для этого в веб-интерфейсе переходим в “Администратор – System Admin”, в правой части переходим на Network Settings, в строке IP Assignment ставим переключатель в положение Static и задаем астериску IP-адрес в строке Static IP с указанием маски в строке Netmask и адреса вашего маршрутизатора (шлюза) в строке Gateway.

Нажимаем снизу кнопку Save Interface, видим всплывающее окно с предупреждением, чтобы вы внимательно проверили свои сетевые настройки, нажимаем в окне Save and Apply.

Далее нажимаем справа DNS, в поле DNS Server list необходимо прописать DNS-сервер вашего маршрутизатора, или указать адреса общедоступных DNS, например Google.

После ввода DNS, нажимаем внизу кнопку “Сохранить”.

Теперь откроем встроенный в FreePBX файрволл и внесем в него некоторые настройки. Для этого в веб-интерфейсе переходим в “Подключения – Firewall”.

Переходим на вкладку Networks и пропишем в Network/Host вашу подсеть, в которой у вас будет работать астериск. Если подсетей несколько, указывайте все, иначе будут наблюдаться проблемы с подключением телефонов и прохождением голосового трафика. После ввода подсети, нажимайте справа зеленую кнопку с изображением плюса, подсеть добавится в исключения файрволла, далее добавляйте следующую подсеть (по необходимости). В поле Assigned Zone выбирайте по умолчанию Local (Local trusted traffic), но можете выбрать и Trusted (Excluden from Firewall)

Нажимаем внизу кнопку “Сохранить” и далее переходим на вкладку Interfaces, видим список ваших сетевых адаптеров, скорее всего он будет один, и тут необходимо в Default Zone выбрать следующее:

  1. Если ваша сетевая карта светит напрямую в интернет и имеет белый, доступный из интернета, IP-адрес, выбираем – Internet (Default Firewall).
  2. Если ваша сетевая карта находится внутри локальной сети, за маршрутизатором, выбираем Local (Local trusted traffic).

В конце нажимаем кнопку Update Interfaces, далее переходим в “Настройки – Установки Asterisk для SIP”.

В разделе “Настройки NAT” в поле “Внешний адрес” будет скорее всего уже определен и прописан ваш внешний на данный момент IP-адрес, через который вы выходите в интернет через ваш маршрутизатор.

В поле “Локальные сети” должна автоматически прописаться подсеть вашей локальной сети, если у вас есть еще подсети (например удаленных филиалов, подключенных через VPN), пропишите их здесь, нажав на кнопку “Добавить параметр адреса локальной сети”. В конце нажимаем внизу кнопку “Сохранить” и “Применить настройки” (Apply Config).

Теперь можно приступить к основной настройке астериска.

Шаг 1. Создание пула внутренних номеров (экстеншенов)

Переходим в веб-интерфейсе “Приложения – Внутренние номера”. Видим перед собой пустую таблицу, так как номеров у нас пока никаких нет. Создадим первый номер, нажимаем кнопку “Добавить новый номер” и выбираем SIP (chan_pjsip).

Откроется форма для создания нового абонента.

Вообще так сложилось, что внутренняя телефония еще со времен аналоговых АТС имела в себе трехзначные номера. Помните фильм “Иван Васильевич меняет профессию”, как Милославский звонил Шпаку на работу: “Стоматологическая поликлиника? Алло! Добавочный – Три Шестьдесят Две!”. Конечно в этой комбинации, которую назвал Милославский, была своя ирония, бутылка водки в те времена стоила 3 рубля 62 копейки. Но мы с вами сейчас не про цены на водку, которые были в 70е годы СССР, а про число цифр в номерах на внутренней телефонии, 362 – три цифры.

На самом же деле вы можете использовать любое количество цифр, главное здесь не допустить пересечение внутренних номеров с номерами во внешней телефонной сети, не стоит делать номер 01, 02, 03, 112 и т.д. Хотя если ваша IP-АТС будет локальная и не будет иметь выхода во внешнюю телефонную сеть, то можно создавать вообще любые номера, но все таки лучше придерживаться классики.

Я рекомендую начинать нумерацию с тройки, первым номером пусть будет 301, вторым 302 и т.д. 300 тоже можно, на него обычно вешают ресепшн или какой ни будь внутренний колл-центр.

Назначаем нашему новому абоненту номер 301, далее пишем имя абонента, либо его роль или должность. В поле “Секрет” сгенерируется пароль для данного абонента, который будет иметь неприлично длинный набор разных символов, как бы заранее нам показывают каким должен быть пароль, но мы нашу систему Asterisk светить голой задницей в интернет не планируем, поэтому пароль лучше поменять на какой ни будь более понятный и короткий, так как в некоторых IP-телефонах и IP-шлюзах возникают проблемы с авторизацией при использовании таких длинных паролей.

Больше пока никаких параметров мы здесь указывать не будем и просто нажмем кнопку “Сохранить”.

Первый абонент у нас создан, а вверху появилась красная кнопка “Сохранить изменения” (Apply Config). Для применения изменений в Asterisk всегда надо нажимать эту кнопку, если она появилась. Можно это сделать сейчас, можно позже. Каждый раз, когда вы ее нажимаете, происходит полное применение конфигурации, которое может занять время, поэтому лучше сперва произвести несколько необходимых настроек, а уже потом нажимать кнопку, чтобы не ждать долго каждый раз.

Создадим по аналогии второго абонента с номером 302.

Теперь, когда у нас есть два абонента, можно нажать на кнопку “Применить изменения” и проверить телефонию, попробовав позвонить от одного абонента к другому.

Для проверки звонков можно использовать приложение MicroSIP для Windows или любой другой SIP-клиент, даже можно воспользоваться настоящим IP-телефоном или VoIP-шлюзом. Использовать MicroSIP для тестов удобно еще потому, что папку с дистрибутивом программы можно размножить и запускать несколько копий программы, одну с одним номером, другую – с другим. Лучше всего использовать Portable версию, тогда вам не нужно будет ее устанавливать, вы просто распакуете архив и создадите столько копий MicroSIP – сколько нужно.

Запускаем MicroSIP, нажимаем на кнопку со стрелочкой в правом верхнем углу, выбираем Add Account. В появившемся окне в поле Account Name указываем имя профиля (любое понятное нам, можно указать номер телефона), в строке SIP Server указываем IP-адреса астериска, в поле Username указываем внутренний номер подключаемого абонента, в поле Domain так же вводим IP-адрес астериска, в поле Login снова указываем номер абонента, в поле Password – пароль абонента.

По умолчанию в астериске, да и не только в нем, при использовании SIP применяется порт 5060/UDP. MicroSIP так же по умолчанию устанавливает подключение через этот порт. Если в дальнейшем будет нужда изменить этот порт на другой, то в настройках MicroSIP необходимо будет указывать IP астериска в таком виде – IP:PORT.

Должно получиться следующее:

После добавления аккаунта в MicroSIP, в нижней части программы должен загореться зеленый значок телефона и появиться статус Online. Если вы видите красный значок, значит где то ошиблись. Проверьте, правильно ли указали IP-адрес астериска, номер телефона, пароль, а так же проверьте настройки файрволла в FreePBX.

Запустим вторую копию MicroSIP с другим абонентом и попробуем позвонить от первого ко второму, в MicroSIP с номером 301 набираем номер 302 и жмем Call.

Если выскочила ошибка “Speakers and microphone both are required”, значит в вашей системе нет либо устройства вывода звука (колонок), либо устройства ввода (микрофон) и MicroSIP сообщаем нам, что без этих двух вещей поговорить по телефону не получится. Так как мы сейчас просто тестируем прохождение звонков, то в качестве микрофона (если его нет) можно использовать стерео микшер в Windows.

Если с звуковыми устройствами ввода и вывода все в порядке, то на второй MicroSIP должен прилететь звонок с определением номера и имени абонента.

Попробуем от второго абонента позвонить первому, в MicroSIP с номером 302 набираем 301 и звоним.

Если звонки проходят, значит связь работает. Если есть возможность поднять MicroSIP на разных компьютерах, или, например, использовать на Android-смартфоне, подключенному к вашей локальной сети по Wi-Fi, приложение Sipnetic, можно проверить голосовую связь из разных концов. В прочем, голосовую связь можно проверить и на одном компьютере, достаточно при звонке на другой MicroSIP поднять трубку и сказать что ни будь в микрофон, в колонках должны будете услышать свой голос. Главное постарайтесь поскорее завершить звонок, а то словите акустическую обратную связь (микрофонный эффект).

Если ваш голос слышен собеседнику, а его голос слышен вам – поздравляю, ваша IP-мини-АТС работает.

Шаг 2. Создание групп вызовов и очередей

Так же абонентов можно объединять в группы вызовов и очереди и назначать каждой их них отдельный внутренний номер. При звонке на номер группы или очереди зазвонят телефоны у всех абонентов, которые добавлены в нее.

Группа вызовов от очереди отличается тем, что распределяет звонки по всем свободным абонентам, добавленным в группу, пока кто ни будь из них не ответит на звонок. Если на звонок никто не ответит, то у звонящего по таймауту терминируется звонок (сбрасывается). Группа может принимать звонок только от одного звонящего, если на момент звонка в группу все абоненты будут заняты, то астериск сбросит абонента, или проиграет ему какое ни будь сообщение.

Очередь же держит абонента на линии до тех пор, пока один из абонентов не освободится и не ответит на звонок. При этом она имеет свойство накапливать входящие звонки, раздавая звонящим абонентам места в очереди и периодически сообщая им, на каком месте в очереди стоит их звонок (знакомая вам ситуация, когда вы пытаетесь дозвониться в какой ни будь колл-центр). Даже если включенные в очередь абоненты будут сбрасывать входящие звонки, звонящий по прежнему останется на линии и будет ждать, а абонентам периодически будут прилетать звонки от этого абонента.

Чтобы добавить пользователей в группу вызовов, переходим в “Приложения – Группы вызова” и нажмем кнопку “Добавить группу вызова”. Нам предлагается заполнить и указать различные параметры, мы затронем только несколько основных.

В поле “Номер группы вызова” указываем номер, не пересекающийся с пулом внутренних и внешних номеров. Если у вас внутренние номера начинаются на 3, то группам и очередям лучше назначать номера, начинающиеся с 4, в нашем примере группа будет иметь номер 401.

В поле “Описание группы” пишем ее название, например название отдела, чьи телефоны она будет объединять, в нашем примере будет “Отдал продаж”.

Далее в поле “Лист внутренних номеров” указываем внутренние номера абонентов, которых мы будем собирать в группу. Можно прописать номера вручную, каждый с новой строки, а можно добавить из списка “Use Quick Select”.

Дальше идет выбор стратегии обзвона, нажав на знак вопроса рядом, можно почитать что из себя представляет та или иная стратегия. Мы выберем “Звонят все”, как наиболее универсальный вариант.

В поле “Время звонка” указывается время в течение которого телефоны будут звонить, а звонящий будет находиться в ожидании вызова. По окончании заданного количества времени (максимум 300 секунд) звонок терминируется (сбрасывается), по умолчанию стоит 20 секунд.

В поле Announcement можно выбрать голосовое приветствие, которое будет воспроизводиться звонящему перед тем, как звонок от него уйдет на абонентов группы. У нас пока нет записей в системе, поэтому выбрать ничего не можем.

В поле Play Music On Hold выбирается, что будет слышать звонящий, либо обычные гудки, либо можно выбрать музыку. Для выбора музыкального сопровождения поставьте “По умолчанию”, так звонящему будет воспроизводиться плей-лист из стандартной музыкальной библиотеки астериска (неплохая музыка, кстати).

В параметре “Назначение, если никто не ответил” выбирается действие, которое происходит по истечении таймаута, заданного в поле “Время звонка”. Самое распространенное – это Terminate Call и ниже Hungup, у звонившего абонента сбросится звонок.

После указания всех настроек группы, нажимаем внизу Submit и вверху Apply Config.

Теперь, если позвонить по номеру 401, мы вместо гудков услышим музыку, а у абонентов 301 и 302 зазвонят телефоны и как только один из них поднимет трубку, астериск нас соединит. Если пройдет 20 секунд и никто трубку не возьмет, астериск нас сбросит.

Теперь создадим очередь. Для ее создания переходим в “Приложения – Очереди”, нажимаем кнопку “Добавить очередь”.

Тут у нас похожая настройка, как в случае с группой вызова, так же задаем внутренний номер для создаваемой очереди, пишем ее название. У нас будет очередь, которая так же будет называться “Отдел продаж”, а номер у нее будет 402.

В поле Music on Hold Class поставим значение “По умолчанию”, а ниже выберем MoH Only. Это позволить при звонке на номер очереди вместо гудков воспроизводить музыку, загруженную в библиотеку астериска.

В поле “Назначение при неответе” как и в случае с группами, выбираем Terminate call/Hungup.

Переходим на вкладку “Queue Agents” (Агенты очереди).

В поле “Статичные агенты” перечисляем номера внутренних телефонов абонентов, которых мы будем включать в данную очередь. В нашем случае наши два абонента – 301 и 302.

Переходим на вкладку “Параметры времени и операторов”.

В поле Agent Timeout указываем время, в течение которого звонки из очереди будут поступать на номера абонентов включенных в очередь (операторов), можно поставить “Неограничено”, тогда звонящий на линии будет находиться до тех пор, пока ему не ответит один из операторов, либо пока он сам не сбросит звонок.

В поле “Retry” указывается промежуток времени, через который звонки из очереди будут повторно приходить на номера операторов, если он решил не поднимать трубку, или сбросил звонок. По умолчанию – 5 секунд, я обычно ставлю 30 секунд, чтобы не сводить с ума операторов очереди.

Переходим на вкладку “Caller Announcements”.

В поле “Frequency” задается интервал, через который звонящему будет сообщаться о его позиции в очереди, я ставлю 1 минуту.

В поле “Minimum Announcement Interval” задается минимальный интервал времени, через который звонящему будет сообщаться его позиции в очереди, если его место в очереди изменилось.

В поле “Announce Position” указываем будет ли сообщаться звонящему о его позиции в очереди, “Да” или “Нет”. Я выбираю “Да”.

В поле “Announce Hold Time” указываем будет ли сообщаться звонящему о примерном времени до ответа оператора, я всегда ставлю “Нет”, но вы можете сделать по своему.

Основные параметры очереди мы настроили. Нажимаем снизу кнопку Submit и вверху Apply Config.

Теперь если позвонить по внутреннему номеру 402, звонок уйдет операторам 301 и 302, а мы останемся на линии пока кто ни будь из операторов не освободится и не возьмет трубку.

Шаг 4. Настройка конференций

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

Для создания конференции переходим в “Приложения – Конференции”, нажмем кнопку Add.

В поле Conference Number зададим номер создаваемой конференции, в нашем примере будет 888.

В поле Conference Name указываем название конференции, в нашем примере “Общая конференция”.

В поле User PIN можно задать пин-код, который должен будет ввести позвонивший в конференцию абонент. Можно оставить данное поле пустым, тогда вход в конференцию будет свободным.

В поле Admin PIN задается пароль организатора конференции, для его идентификации. Это поле так же не обязательно к заполнению, если только не включен режиме ожидания организатора, без которого конференция не начнется. В таком случае пин-код необходим и он должен отличаться от пин-кода остальных участников.

Параметр Leader Wait определяет ждать ли организатора, пока он не присоединился к конференции. Если включено, конференция не начнется пока организатор не войдет в конференцию.

Параметр Leader Leave определяет завершать ли конференцию для всех участников, если организатор конференции выйдет из нее.

Параметр Music on Hold позволяет включить музыкальное сопровождение, пока в конференции находится один участник.

В строке Music on Hold Class выбирается плей-лист, в нашем случае стандартная музыка в Asterisk “По умолчанию”.

Остальные параметры трогать не будем, должно получиться следующее:

Попробуем набрать номер конференции сперва у первого абонента, затем у второго. При подключении первого абонента, он услышит фразу “Вы являетесь первым участником конференции” и затем у него заиграет музыка. Как только подключится второй участник, музыка прекратит играть и раздастся звук присоединения к конференции нового участника.

Теперь все находящиеся в конференции абоненты могут общаться между собой.

 Шаг 5. Настройка SIP-транков для приема и совершения звонков во внешнюю телефонию

Переходим в веб-интерфейсе “Подключения – Транки”, нажимаем длинную кнопку с плюсом в начале и выбираем “Добавить SIP (chan_pjsip) транк”.

В качестве примера будем добавлять транк от провайдера Ростелеком.

В поле “Название транка” пишем его название, в нашем примере – Rostel. В поле “Исходящий CallerID” необходимо указать ваш внешний номер в виде 74951234567. В поле “Количество каналов” указываем максимально количество каналов на входящие и исходящие вызовы, у Ростелекома на одного пользователя доступно 2 входящих и 2 исходящих канала, ставим 2. В поле “Выключить транк” ставим переключатель в положение “Нет”, чтобы транк активировался после завершения настройки. Должно получится так:

Переходим на вкладку “pjsip Общие настройки”, заполняем данные в нижней вкладке “Общие”.

В поле “Имя пользователя” пишем имя вашего пользоваться в Ростелеком ВАТС, в поле Auth username повторяем ввод имени пользователя.

В поле “Секрет” пишем пароль пользователя в ВАТС.

В поле SIP-сервер пишем адрес вашего домена в Ростелеком ВАТС.

Порт SIP-сервера оставляем пустым, у Ростелекома он стандартный.

Если вы заполняете настройки под другого оператора и у него используется другой порт, как, например, в случае с Mango Telecom, пропишите его в поле “Порт SIP сервера”.

Транспорт оставляем UDP.

Переходим во вкладку “Расширенный”.

В поле “От домена” снова указываем ваш домен в Ростелеком ВАТС.

В поле “От пользователя” повторяем ввод вашего пользователя в ВАТС.

В поле “Клиентский URI” прописываем следующую строку:

sip:user_rostel@123456.19.rt.ru

В поле “URI сервера” повторяем эту же строку.

Переходим на вкладку “Кодеки” и ставим галочки на ulaw и alaw (используемые по умолчанию в Ростелеком), если у вашего оператора имеется поддержка других кодеков, отметьте их. Кодеки ulaw и alaw должны идти первыми в списке для обеспечения большей совместимости.

Нажимаем внизу кнопку “Сохранить” и кнопку “Применить изменения” вверху.

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

Чтобы узнать информацию о зарегистрированных в сети транках через веб-интерфейс, переходим в “Администратор – Командная строка Астериск” и выполняем там:

pjsip show registrations

Получаем ответ (адрес моего домена замылен), видим, что статус нашего транка – Registered.

Можно узнать состояние и через саму консоль Linux, вводим и выполняем:

asterisk -r

Далее вводим и выполняем:

pjsip show registrations

Получаем ответ (адрес моего домена здесь тоже замылен):

Транк добавлен в астериск и авторизован на серверах вашего провайдера.

Шаг 6. Создание входящей и исходящей маршрутизации вызовов

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

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

  1. Звонок поступает сразу на несколько абонентов, которые объединены в группу вызовов, или в очередь вызовов.
  2. Звонок поступает на интерактивное меню (IVR), где звонящему проиграется приветствие, а он может сделать выбор заданных направлений с помощью тональных клавиш, или набрать добавочный номер абонента.

Так как мы настраиваем астериск для использования в организации, более правильным направлением для входящей маршрутизации будет именно интерактивное меню, но его нам нужно предварительно создать.

Для начала нам нужно создать аудиозапись, которая будет проигрываться звонящему в интерактивном меню. Запись можно сделать на компьютере, на смартфоне, она может быть в формате wav или mp3, астериск сам ее сконвертирует в свой формат.

Переходим в “Администратор – Записи в системе”, нажимаем кнопку “Добавить запись”, в поле Name пишем название нашей записи, например “Основное приветствие”. Затем в Upload Recording нажимаем Browse, выбираем наш аудиофайл с приветствием. Внизу, в Convert To, выбираем параметры alaw, ulaw, waw и нажимаем Sumbit и Apply Config.

Запись загружена в астериск.

Теперь создадим интерактивное меню, переходим в “Приложения – Интерактивное меню (IVR)”, нажимаем “Добавить IVR”.

Пишем название интерактивного меню, например “Основное меню”.

В поле “Уведомление” выбираем нашу запись, которую только что загрузили.

В параметре “Разрешить прямые наборы” ставим Enabled, чтобы звонящий мог набирать добавочные номера.

В параметре “Таймаут” указываем промежуток времени, который предоставляется звонящему для выполнения каких либо действий (выбрать пункт меню, или набрать добавочный), после истечения данного времени сработает параметр указанный в поле “Назначение при таймауте”, например перевод звонка на телефон секретаря, или отбой вызова.

Если включить параметр “Добавить уведомление при неверном наборе”, то звонящий будет слышать голосовое уведомление об ошибке, если он набрал неверную комбинацию.

В самом низу можно составить схему интерактивного меню, куда будет направляться звонящий при нажатии тех или иных кнопок. В нашем примере при нажатии на 1 его отправит на группу вызова “Отдел продаж”, при нажатии на 2 его отправит в очередь “Отдел продаж”, при нажатии на 3 звонок уйдет абоненту с номером 301, при нажатии на 4 звонок уйдет абоненту с номером 302.

Можно создавать несколько интерактивных меню и пересекать их друг с другом.

Для сохранения меню нажимаем “Подтвердить”, после чего вверху нажимаем Apple Config. Интерактивное меню создано.

Теперь мы добрались до создания входящей маршрутизации. Переходим в веб-интерфейсе “Подключения – Входящая маршрутизация”, нажимаем кнопку “Добавить входящий маршрут”.

В поле “Описание” пишем название нашей входящей маршрутизации, например “Голосовое меню”, так как эта маршрутизация отправит всех звонящих на интерактивное меню, которое мы только что создали.

Внизу, в поле “Установить направление” выбираем “Интерактивное меню (IVR)” и ниже выбираем наше меню. Нажимаем “Сохранить” и “Применить изменения”.

Теперь попробуйте позвонить на свой внешний номер транка, астериск должен будет ответить на звонок и воспроизвести вам ваше голосовое приветствие. Попробуйте понажимать кнопки 1, 2, 3, 4, проверьте как работают сценарии в интерактивном меню, потом перезвоните и попробуйте набрать добавочные 301 и 302, проверьте как уходят звонки на них.

Если астериск успешно отвечает на входящие звонки и у вас правильно отработали сценарии в IVR, значит входящая маршрутизация и интерактивное меню настроено правильно.

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

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

Переходим в “Подключения – Исходящая маршрутизация”, нажимаем кнопку “Добавить исходящий маршрут”.

Пишем название маршрута, например “Россия”, далее в поле “Последовательность транков для совпавших маршрутов” указываем наш транк.

Переходим на вкладку “Правила набора” и вот тут нам надо указать шаблон набираемых номеров, которые астериск будет набирать в транк.

Для начала разберемся как работает исходящая маршрутизация в астериске, взглянем на таблицу:

В поле “Совпадение маршрута” (pattern) прописывается сам шаблон номера, набор которого будет уходить в транк.

При создании шаблонов используются следующие правила ввода:

  • X – совпадение любой цифры от 0 – 9
  • Z  – любая цифра от 1 до 9
  • N – совпадение любой цифры от 2 – 9
  • [1237-9] – совпадение любой цифры из набора в скобках, в том числе из указанного интервала (в данном напримере: 1,2,3,7,8,9)

Например, для совершения звонков через Ростелеком шаблон будет иметь следующий вид: 8XXXXXXXXXX

В поле “Префикс” указывается код, который абонент будет набирать в начале номера, затем этот код отбрасывается из набранного номера перед его отправкой в транк.

В поле “Приставка” указывается код, который астериск добавит к набираемому номеру перед отправкой в транк.

Примеры:

Приставка Префикс Совпадение шаблона (pattern) Как набрано на телефоне Как отправлено в транк
8XXXXXXXXXX 81234567890 81234567890
8 +7 XXXXXXXXXX +71234567890 81234567890
9 XXXXXXXXXX 91234567890 1234567890
+7495 NXXXXXX 1234567 +74951234567

Так, с помощью приставок и префиксов можно производить различные конвертации набираемых номеров перед их отправкой в транк.

Для совершения городских звонков на 7-значные номера подойдет такое правило: NXXXXXX с указанием кода вашего города и кода страны в приставке.

Для совершения звонков на экстренные номера (полиция, скорая помощь, пожарная охрана) подойдет такое правило: 0[123]

Должна получится следующая таблица:

Нажимаем “Сохранить” и “Применить изменения”. Пробуем позвонить на внешний номер с телефона одного из абонентов, если звонок проходит – исходящая маршрутизация настроена верно.

Заключение

На данном этапе мы с вами произвели основные настройки астериска. Ваш астериск теперь умеет принимать звонки и отвечать на них интерактивным меню, ваши абоненты могут перезваниваться между собой, переводить вызовы друг на друга (как внутренние, так и внешние), а так же звонить во внешнюю телефонную сеть.

Понравилась статья? Поделить с друзьями:
  • Сульфасалазин 500 инструкция по применению цена отзывы аналоги
  • Цефтриаксон уколы инструкция по применению при беременности
  • Бифидумбактерин инструкция по применению порошок в пакетиках 500 млн
  • Мулинекс odacio 3 инструкция с иллюстрациями
  • Парацетамол 500 мг инструкция по применению взрослым при орви