Базовая настройка Asterisk 11 в Debian Wheezy: входящие и исходящие звонки
Aug 20, 2015 11:34 · 630 words · 3 minute read
Продолжаем настраивать сервер телефонии на базе Asterisk 11 в Debian Wheezy — у нас уже работают звонки внутри офиса и голосовая почта, пора заняться настройкой входящих и исходящих звонков.
Под входящими/исходящими звонками будем иметь в виду звонки, в которых вызывающий (или вызываемый) абонент находится за пределами офиса. Для совершения таких звонков можно использовать протокол H.323 или более распространенный и перспективный протокол SIP. За счет простоты реализации, связь по протоколу SIP становится все более популярной услугой, которую предоставляют множество провайдеров Интернет-телефонии.
Поддержка протокола SIP в Asterisk встроена по умолчанию, поэтому как только мы заключим договор с провайдером и получим от него учетные данные, можно сразу же приступать к настройке входящих и исходящих звонков.
Для этого откроем файл /etc/asterisk/sip.conf
и в секции [general]
добавим определение register
в следующем формате:
register => user [:secret[:authuser]] @host [:port] [/extension]
user
— идентификатор пользователя, используемый SIP-сервером (например, лицевой счет);authuser
— необязательное имя пользователя для авторизации на SIP-сервере;secret
— пароль пользователя для авторизации на SIP-сервере;host
— имя домена или хоста SIP-сервера. Данный SIP-сервер необходимо описать в своей секции в файлеsip.conf
;port
— номер порта, для регистрации на сервереhost
. По умолчанию — 5060;extension
— номер екстеншена для приема вызовов в вашем Asterisk’е.
В нашем случае получится примерно следующее:
register => номер_лс_1:очень_сложный_пароль@62.64.127.43/номер_лс_1
register => номер_лс_2:очень_сложный_пароль@62.64.127.43/номер_лс_2
Примечание. На мой взгляд, использование незашифрованных паролей в текстовом файле — не самая удачная идея, но что уж тут поделать…
Для каждого SIP-сервера нужно создать свою секцию в файле /etc/asterisk/sip.conf
, в которой должны быть описаны его параметры. В данном примере используется один SIP-сервер провайдера, но с двумя разными телефонными номерами (лицевыми счетами) — киевским и днепропетровским. Следовательно, будем использовать шаблоны, как мы уже делали ранее.
- сначала создаем шаблон (общие параметры для всех лицевых счетов провайдера):
[beeline](!)
type=friend
host=62.64.127.43
dtmfmode=inband
canreinvite=no
insecure=invite
context=beeline-in
- теперь указываем отдельные параметры для каждого лицевого счета:
[bee56](beeline)
username=номер_лс_1
secret=очень_сложный_пароль
fromuser=номер_лс_1
[bee44](beeline)
username=номер_лс_2
secret=очень_сложный_пароль
fromuser=номер_лс_2
Для совершения входящих и исходящих звонков через SIP-сервер данного провайдера необходимо также изменить номерной план. В большинстве инструкций, которые мне доводилось встречать, исходящие звонки предлагают настраивать через дополнительную цифру (например, 9) и примерно следующую строку в файле /etc/asterisk/extensions.conf
:
exten => _9.,1,Dial(SIP/${EXTEN:1}@beeline,30,r)
Примечание. Конструкция ${EXTEN:1}
извлекает содержимое переменной за исключением первой цифры, в которой содержится вызываемый екстеншен.
Но так как у нас два телефонных номера, разумнее и экономнее будет разделить исходящие звонки по коду города. Еще мы умеем записывать телефонные звонки, поэтому в нашем случае в номерной план Asterisk’а нужно добавить следующие строки:
; звонки на киев
exten => _044[1-9].,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d)}-${UNIQUEID})
exten => _044[1-9].,n,MixMonitor(/var/spool/asterisk/monitor/${fname}.wav)
exten => _044[1-9].,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => _044[1-9].,n,Dial(SIP/bee44/${EXTEN})
; звонки на днепропетровск
exten => _056[1-9].,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d)}-${UNIQUEID})
exten => _056[1-9].,n,MixMonitor(/var/spool/asterisk/monitor/${fname}.wav)
exten => _056[1-9].,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => _056[1-9].,n,Dial(SIP/bee56/${EXTEN})
; остальные исходящие звонки
exten => _0[1-9].,1,Gosub(city-out,s,1(${EXTEN}))
exten => _380[1-9].,1,Gosub(city-out,s,1(${EXTEN:3}))
[city-out]
exten => s,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d)}-${UNIQUEID})
exten => s,n,MixMonitor(/var/spool/asterisk/monitor/${fname}.wav)
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n,Dial(SIP/bee44/${ARG1})
exten => s,n,Dial(SIP/bee56/${ARG1})
exten => s,n,Goto(${DIALSTATUS})
exten => s,n(BUSY),Busy()
exten => s,n(NOANSWER),Hangup()
exten => s,n,Hangup
Входящие звонки на выданные SIP-провайдером номера (441233211 и 561233211) будем принимать в контекст [beeline-in]
. Его можно сконфигурировать примерно так:
[beeline-in]
exten => 441233211,1,Goto(office-in,s,1)
exten => 561233211,1,Goto(office-in,s,1)
[office-in]
exten => s,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d)}-${UNIQUEID})
exten => s,n,MixMonitor(/var/spool/asterisk/monitor/${fname}.wav)
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n,Ringing
exten => s,n,Dial(SIP/101,10,m)
exten => s,n,Queue(office_all,tT,,,15)
exten => s,n,Playback(vm-nobodyavail)
exten => s,n,VoiceMail(101@office)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Hangup()
Давайте разберемся, что произойдет при входящем звонке на любой из телефонных номеров выданных провайдером:
- звонок на внутренний номер 101;
- если номер 101 не отвечает в течении 10 секунд, то звонок попадает в очередь
office_all
; - если в течении 15 секунд никто из очереди не отвечает, то проигрываем сообщение «в данный момент никто не может принять ваш звонок»;
- предлагаем оствить сообщение голосовой почты и отправляем его в голосовой ящик абонента 101;
- прощаемся со звонящим и завершаем звонок.
Примечание. Настройку статических очередей звонков в Asterisk’е рассмотрим в следующей статье.
На этом базовая настройка входящих/исходящих звонков в Asterisk закончена.