Продолжаем наши эксперименты с Asterisk — сегодня расскажу немного о настройке маршрутизации исходящих звонком. После чего, попробуем объединить наш Asterisk с Oktell 🙂
Для чего нужна маршрутизация? Если мы захотим ограничить пользователей — кому можно выходить в город, а кому нет… И не только! В предыдущей статье мы разрешили пользователям осуществлять звонки друг-дружке…
Теперь о выходе через провайдера:
[dialout] exten => _.,1,NoOp("Out Dial") exten => _.,2,Dial(SIP/provider) exten => _.,3,Hangup()
При поступлении звонка попавшего под наш маршрут первым делом выполнится команда NoOp под цифрой 1, затем маршрутизация звонка с помощью Dial и 3-м вызовет Hangup. Если мы хотим через код 81 на одного провайдера, а через 82 на другого, тогда это будет так:
exten => _81.,1,NoOp("Dial out provider 1") exten => _81.,2,Dial(SIP/provider1) exten => _81.,3,Hangup) exten => _82.,1,NoOp("Dial out provider 2") exten => _82.,2,Dial(SIP/provider2) exten => _82.,3,Hangup()
Важный момент! Последовательность команд читается системой сверху-вниз. Помните об этом, когда будете создавать шаблоны для маршрутизации звонков.
В правилах Вы можете использовать строгие шаблоны. К примеру, для всех звонков, которые начинаются с «0» и содержат 10 символов, будет так:
exten => _0XXXXXXXXX,1,Dial(SIP/provider1)
Еще один пример, когда я набираю 811 — перемаршрутизировать звонок на SIP1 провайдера и убирать префикс 811:
exten => _811.,1,Dial(SIP/${EXTEN:3}@sip1-provider,30,r)
Конструкция ${EXTEN:3} извлекает все содержимое переменной, за исключением первых 3 цифры. Почитайте более детально о переменных Asterisk.
Пробуйте, экспериментируйте с вариантами! Успехов!