Базовая настройка Asterisk 11 в Debian Wheezy: входящие и исходящие звонки

Aug 20, 2015 11:34 · 630 words · 3 minute read asterisk debian

Продолжаем настраивать сервер телефонии на базе 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 закончена.

tweet Share