Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


Новые статьи на сайте:

 

Hilik     Настроим все

 http://www.hilik.org.ua/

 

Asterisk, маршрутизация звонков.

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

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

[dialout]
exten => _.,1,Dial(SIP/provider)

В этом примере exten – с него обязательно начинается описание маршрута.
_. – это регулярное выражение описывает все маршруты.
1 – описываем порядок прохождения по маршруту.
Dial – команда на осуществление исходящего звонка в скобках описывается соответственно тип канала и на какой канал маршрутизировать звонок.

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

[dialout]
exten => _.,1,NoOp("Out Dial")
exten => _.,2,Dial(SIP/provider)
exten => _.,3,Hangup()

Здесь при поступлении звонка попавшего под наш маршрут первым делом выполнится команда NoOp, в соответствии с заданной ей цифре 1, затем выполнится перемаршрутизация звонка с помощью Dial и 3-м вызовет Hangup.

Так же есть возможность задать несколько маршрутов в одном контексте. К примеру для выхода через одного провайдера использовать 8 в начале и через 9-ку для звонков через альтернативного провайдера телефонии. Выглядит это так:

exten => _8.,1,NoOp("Dial out provider 1")
exten => _8.,2,Dial(SIP/provider1)
exten => _8.,3,Hangup)
exten => _9.,1,NoOp("Dial out provider 2")
exten => _9.,2,Dial(SIP/provider2)
exten => _9.,3,Hangup()

Когда создаете контекст следует помнить, что поиск маршрута астериск осуществляет до первого совпадения, то есть если вы сделаете такой контекст:

[dialout]
exten => _.,1,Dial(SIP/provider)
exten => 333,1,Dial(SIP/user1)
exten => 444,1,Dial(SIP/user2)

То при попытке совершить звонок локальному пользователю по 333 или 444, звонок уйдет по первому маршруту, попав под _. и уйдет на провайдера.
Правильно описывать контекст так:

exten => 333,1,Dial(SIP/user1)
exten => 444,1,Dial(SIP/user2)
exten => _.,1,Dial(SIP/provider)

Вообще правило _. нужно использовать очень аккуратно. И желательно использовать более строгие правила.
В правилах можно использовать X – цифры от 0 до 9, Z – цифры от 1 до 9, N – цифры от 2 до 9 или последовательности цифр в квадратных скобках. К примеру для маршрутизации на номер начинающийся на 80 и состоящий из 11 цифр подойдет такое правило:

exten => _80XXXXXXXXX,1,Dial(SIP/provider1)

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

exten => XXXXXXX,1,Dial(SIP/provider1)

В общем тут может быть множество разных вариантов. В зависимости от необходимости.

 

 Буду рад комментариям, постараюсь ответить на вопросы. Заходите на сайт http://www.hilik.org.ua/
 


В избранное