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-цифрени повиквания:
Като цяло може да има много различни опции. В зависимост от нуждата.