Тонкая настройка Asterisk

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

Работа с конфигурационным файлом SIP.CONF

[general]

context=default

allowguest=yes   — это ставим в yes , что б разрешить всем входящую связь (я обычно ставлю так , если нет можно другими настройками регулировать кому можно входящая , кому нельзя  см. ниже ) , no — это значит она будет идти по авторизации

Да и если ставим в YES  надо закрыть доступ из вне к вашему серверу (кроме вашего peer`a) , иначе найдется много желающих этим воспользоваться .

bindport=5060 — этим мы задаем порт который будит слушать наш сервер Asterisk

bindaddr=0.0.0.0  — этим мы задаем IP на котором Asterisk будит слушать порт и принимать пакеты .

Пример  создания новго тел . номера  (можно в этом же конфиге … или можно завести в sip_additional.conf при условии что в файле sip.conf есть строка включения обработки данного файла — то есть подтянуть его   #include sip_additional.conf )

[203] ; ms messenger

type=friend

host=dynamic

username=202

secret=user3_password

dtmfmode=rfc2833

context=office

callerid=»User3″ <203>

allow-ulaw

allow-alaw

 

Небольшие пояснения по параметрам конфигурации. Поле type, определяющее тип клиента, может принимать три значения:

n user — возможны только входящие звонки;
n peer — возможны только исходящие звонки;
n friend — разрешены как исходящие, так и входящие вызовы.

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

Номерной план в Asterisk (Dial plan) задается при помощи так называемых расширений (extension). В файле стандартной установки можно увидеть следующее:

 

[demo]

exten => s,1, Wait,1

exten => s,n, Answer

exten => s,n, SetVar(TIMEOUT(digit)=5)

exten => s,n, SetVar(TIMEOUT(response)=10)

exten => s,n(restart), BackGround(demo-congrats)

exten => s,n(instruct), BackGround(demo-instruct)

exten => s,n, WaitExten

 

Обработка контекста demo начинается с записей, в которых «s» является первым символом. Так, сначала Asterisk подождет 1 секунду, потом поднимет трубку и ответит на звонок, установит значения переменных (строки 2, 3), проиграет содержимое файлов demo-congrats и demo-instruct и будет ожидать набора добавочного номера. Следующие строки определяют конкретные номера в контексте demo:

exten => 2,1, BackGround(demo-moreinfo)

exten => 2,n,Goto(s,instruct)

exten => 3,1, SetVar(Language()=fr)

exten => 3,2, Goto(s, restart)

exten => 8500, 1, VoiceMailMain

exten => 8500, n, Goto,s

exten => 1000, 1, Goto(default,s,1)

Итак, определены 4 номера — 2, 3, 8500 и 100. При звонке на номер 2 мы прослушаем сообщение demo-moreinfo, после которого Asterisk перенаправит нас в начало, к сообщению demo-instruct. Набрав номер 3, мы изменим язык данной сессии на французский. (Чтобы Asterisk мог «разговаривать» с вами на французском языке, необходимо наличие соответствующих файлов озвучки в папке /var/lib/asterisk/sounds/fr.) При наборе номера 8500 нам ответит система голосовой почты Asterisk. Номер 1000 отправит нас в начало контекста demo.

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

 

[office]

exten => 200,1, Macro(stdexten,200,SIP/200)

exten => user1, 1, Goto(200|1)

exten => 201,1, Macro(stdexten,201,SIP/201)

exten => user2, 1, Goto(201|1)

exten => 202,1, Macro(stdexten,202,SIP/202)

exten => user3, 1, Goto(202|1)

include => demo

 

Мы определили три номера и три псевдонима, при наборе которых активируется макрос stdexten, отвечающий за обработку вызовов пользователей. Псевдонимы позволят звонить абоненту не только по его номеру, но и по имени. В качестве параметров макросу передается номер данного пользователя и имя его SIP-устройства. Давайте посмотрим, что же делает этот макрос:

 

[macro-stdexten]

exten => s, 1, Dial (${ARG2},20,t[4])

exten => s, 2, Goto(s-$(DIALSTATUS),1)

exten => s-NOANSWER, 1, Voicemail(u${ARG1})

exten => s-NOANSWER, 2, (Goto(default,s,1))

exten => s-BUSY, 1, Voicemail(b,${ARG1})

exten => s-BUSY, 2, (Goto(default,s,1))

exten => _s-., 1, Goto(s-NOANSWER)

exten => a, 1, VoiceMailMain(${ARG1})

 

Данный макрос звонит указанному пользователю. Если в течение 20 секунд никто не ответил или вызываемый абонент был занят, звонящему проиграется соответствующее сообщение, после чего он получит возможность оставить сообщение голосовой почты. Правда, пока у наших абонентов голосовых ящиков еще нет. Исправим это недоразумение, добавив в файл /etc/asterisk/voicemail.conf следующие строки:

Данный макрос звонит указанному пользователю. Если в течение 20 секунд никто не ответил или вызываемый абонент был занят, звонящему проиграется соответствующее сообщение, после чего он получит возможность оставить сообщение голосовой почты. Правда, пока у наших абонентов голосовых ящиков еще нет. Исправим это недоразумение, добавив в файл /etc/asterisk/voicemail.conf следующие строки:

 

[general]

format=wav49

maxmessage=300

[office]

200 => 123, User1, user1@mail.company.com,,attach=yes

201 => 456, User2, user2@mail.company.com,,attach=yes

202 => 789, User3, user3@mail.company.com,,attach=yes

Этим мы определили 3 ящика голосовой почты для наших пользователей, с паролями 123, 456, 789 соответственно. При поступлении нового сообщения пользователю незамедлительно будет отсылаться e-mail на указанный адрес. Во вложении письма будет присутствовать само голосовое сообщение в формате wav (вместо wav можно использовать любой формат, поддерживаемый сервером). Максимальная длина сообщения — 5 минут. Если в качестве параметра ящика указать attach=no, то высылаться будет только уведомление об оставленных сообщениях. Для того чтобы сообщения отправлялись, нам понадобится определить еще один параметр — команду для отправки почты. По умолчанию она имеет следующий вид:

mailcmd=/usr/sbin/sendmail -t

Как видно из названия, для работы данной функции необходимо, чтобы на компьютере с Asterisk был установлен почтовый сервер sendmail или другой, имеющий подобной интерфейс вызова (postfix, exim и др.). Информацию по настройке почтового сервера можно найти в [4-6].

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

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