AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

[ребус решен] Приоритет выполнения include (вопрос в форме ребуса)

Newbies/FAQ Forum 8 сообщений 03.11.2010 17:23 - 05.11.2010 17:27
#1 03.11.2010 17:23

[ребус решен] Приоритет выполнения include (вопрос в форме ребуса)


Подзабыл теорию не серчайте. На данный момент не имею возможности провести тестирование, и потому спрашиваю здесь.


Что имеет более высокий приоритет в контекстах: вложение в контекст или include?
Собственно сам ребус:

Code:
[alpha]
exten = _86XXX.,1,Dial(SIP/100)
include => beta

[beta]
exten = _86XXX.,1,Dial(SIP/200)



При наборе 8611111111 куда пойдет звонок на экстеншен 100 или 200? Smile


По логике (как я подозреваю) должен уйти на 100.
Если это так тогда если изменить [alpha] на:
exten = _X.,1,Dial(SIP/100)
include => beta

Тоже звонок пойдет на 100? Или все же приоритетней include?


Спасибо


Last edited by Artyo on Thu Nov 04, 2010 20:11
#2 03.11.2010 17:30

как я понимаю, астериск считывает конфиги по порядку, и будет выполнено первое правило, которое подходит под условие, то есть звонок на 100.
Я прав?
#3 03.11.2010 17:43

Я бы не спросил если бы было все так просто. Я помню был какой то подвох с include. Что то вроде того что обрабатывается все снизу вверх или что include приоритетней. не помню!

Помню что чтобы такого избежать надо делать 2 и более include'ов но опять же в каком порядке Smile


update. помню что приоритет можно было из cli посмотреть CLI> dialplan show alpha
Но нет доступа сейчас к астериску, а логику написать надо Smile

update 2. Хотя помоему это я путаю. Если в одном контексте разместить
exten = _X.,1,Dial(SIP/100)
exten = _86.,1,Dial(SIP/200)
То при наборе 861111111111 вызовет 200.
А если включить вторую строчку в include то вызовет 100.

Освежил память и сам ответил на ребус Smile


Last edited by Artyo on Thu Nov 04, 2010 20:11
#4 03.11.2010 23:39

по логике в вашем примере всегда должно уходить на 100, так как уже было сказано выше - конфиг отрабатывается сверху вниз. возможно на ael по другому логика работает, но на аля-Бэйсик языке все время работало так. если я не прав - ткните меня в пруф-линк плыз.
_________________
Успехов!
#5 04.11.2010 09:29

Немного не так. * не бейсик.

С include хотя утверждение верно, будут обрабатываться по порядку, но с экстеншенами по другому:
пример:
Code:
[prio_test]
exten => XXXXXXX,1,Dial(sip/100)
exten => 1234567,1,Dial(sip/200)
exten => X.,1,Dial(sip/300)
exten => 12XXXXX,1,Dial(sip/400)


В этом случае уж точно приоритет будет не по порядку обрабатываться: 100, 200, 300, 400. Вот что говорит сам астериск:


Code:
CLI> dialplan show prio_test
[ Context 'prio_test' created by 'pbx_config' ]
'1234567' => 1. Dial(sip/200) [pbx_config]
'12XXXXX' => 1. Dial(sip/400) [pbx_config]
'X.' => 1. Dial(sip/300) [pbx_config]
'XXXXXXX' => 1. Dial(sip/100) [pbx_config]

-= 4 extensions (4 priorities) in 1 context. =-


Получается все логично: уйдет на 200. Наиболее точный шаблон всегда имеет приоритет выше. Но этого не будет если есть include:

Code:
[prio_test]
exten => XXXXXXX,1,Dial(sip/100)
exten => X.,1,Dial(sip/300)
exten => 12XXXXX,1,Dial(sip/400)
include => prio_test2

[prio_test2]
exten => 1234567,1,Dial(sip/200)


ответит:

Code:
CLI> dialplan show prio_test
[ Context 'prio_test' created by 'pbx_config' ]
'12XXXXX' => 1. Dial(sip/400) [pbx_config]
'X.' => 1. Dial(sip/300) [pbx_config]
'XXXXXXX' => 1. Dial(sip/100) [pbx_config]
Include => 'prio_test2' [pbx_config]

-= 3 extensions (3 priorities) in 1 context. =-


соответственно набранный номер 1234567 уйдет уже на 400 номер.



update. единственно что не понятно почему X. стоит выше чем XXXXXX
#6 04.11.2010 18:35

Может я туплю, но X. выше XXXXXXX потому что имена отсортированы по возрастанию. У Вас нигде не стоит _ перед шаблоном, потому контексты не будут работать как Вы ожидаете вообще. Rolling Eyes
_________________
Slackware 13.1 - Asterisk 1.8
#7 04.11.2010 20:10

FeyFre совершенно верно Smile
В попыхах упустил самое важное из виду, а именно символ шаблона _ Smile
#8 05.11.2010 17:27

Artyo wrote:
Немного не так. * не бейсик.

а я такого никогда и не заявлял - что сам астериск это бейсик. я говорил что стандартный конфиг астериска - это "аля-Бейсик" язык только команды в телефонных терминах(и я не зря упомянул Cи-подобный AEL). более точного аналога для описания вы не найдете. что вам не понравилось в моем сравнении? или просто поспорить захотели, не важно о чём?
обратно к нашим баранам:

Quote:
'1234567' => 1. Dial(sip/200) [pbx_config]
'12XXXXX' => 1. Dial(sip/400) [pbx_config]

сделайте для теста конкретно такой диалплан и проверьте. звонок по логике должен уйти на первый встреченный "сверху-вниз" шаблон, тоесть на sip/200.
или
Quote:
'12XXXXX' => 1. Dial(sip/400) [pbx_config]
'1234567' => 1. Dial(sip/200) [pbx_config]

тут уйдет на 400
тоесть более "узкие" шаблоны должны стоять "сверху вниз" в диалплане а _X. уже в самом низу. я не утрверждаю что так и есть, но уверен что так должно быть - чисто по логике. (ну плюс еще немного личного опыта с этим)
убедите меня что я не прав.
ps: кнопку Цитаты у вас забираю, так как вы ей пользуетесь совершенно неразумно. советую перечитать правила.

_________________
Успехов!