Hilik - Asterisk, маршрутизиране на повикване

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

[dialout] exten => _.,1,Набиране(SIP/доставчик)

В този пример exten - описанието на маршрута трябва да започва с него. _. — този регулярен израз описва всички маршрути. 1 — опишете реда на преминаване по маршрута. Набиране — команда за осъществяване на изходящо повикване в скоби, съответно вида на канала и към кой канал да се насочи повикването.

Потокът на повикванията може да обхваща няколко реда, ако трябва да се извършат множество действия. Това се прави по следния начин:

[dialout] exten => _.,1,NoOp("Изходно набиране") exten => _.,2,Набиране(SIP/доставчик) exten => _.,3,Затваряне()

Тук, когато постъпи повикване, което попада в нашия маршрут, командата NoOp ще бъде изпълнена първо, в съответствие с номера 1, който й е даден, след това повикването ще бъде пренасочено с помощта на Dial и 3-то ще извика Hangup.

exten=> _8.,1,NoOp("Извън доставчик 1") exten => _8.,2,Dial(SIP/provider1) exten => _8.,3,Затваряне) exten => _9.,1,NoOp("Извън доставчик 2") exten => _9.,2,Dial(SIP/provider2) exten =>_9.,3,Затваряне()

Когато създавате контекст, трябва да запомните, че звездичката търси маршрут до първото съвпадение, тоест ако направите такъв контекст:

[dialout] exten => _.,1,Набиране(SIP/доставчик) exten => 333,1,Dial(SIP/user1) exten => 444.1, Набиране (SIP/user2)

След това, когато се опитате да се обадите на локален потребител на 333 или 444, обаждането ще премине по първия маршрут, попадащ под _. и отидете при доставчика. Правилно е контекстът да се опише по следния начин:

exten=> 333,1,Dial(SIP/user1) exten => 444,1,Dial(SIP/user2) exten => _.,1,Набиране(SIP/доставчик)

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

Долна черта в началото на правило означава, че правилото е регулярен израз. Или правило, което казва да се маршрутизират 7-цифрени повиквания:

Като цяло може да има много различни опции. В зависимост от нуждата.