Порядок выбора нужного екстеншена при использовании шаблонов
Пример проблемы
Рассмотрим контекст «example», например, Вам надо, чтобы вызовы на все номера, которые начинаются с 918, проходили через аналоговую телефонную линию, соединенную с интерфейсом Zap/1, а все остальные вызовы проходили через интерфейс Zap/2. Итак, по идее, Вы напишите что-то подобное:
[example]
exten => _918.,1,Dial(Zap/1/${EXTEN})
exten => _.,1,Dial(Zap/2/${EXTEN})
exten => h,1,Hangup
Но такая конструкция не работает как нам надо! Вы обнаружите, что вне зависимости от набранного номера, все вызовы идут через интерфейс Zap/2. Дело в том, что сначала Asterisk сортирует екстеншены, а уже потом ищет первое совпадение. Для того, чтобы увидеть в каком порядке Asterisk производит поиск совпадающего екстеншена, наберите в консоли Asterisk команду: show dialplan example. Вы увидите, что екстеншены отсортированы в следующем порядке:
- _.
- _918.
- h
Обратите внимание, что этот порядок совсем не тот, что вы определили в файле extensions.conf. В этом списке запись _. является первой, а она подразумевает совпадение с любым набранным номером, включая и номера, которые начинаются с 918. Стоит отметить, что екстеншен h (hangup) также никогда не будет выбран, т.к. он тоже будет совпадать с шаблоном _.
Управление порядком сортировки
Использовать директиву include, включая в текущий контекст другой контекст, содержащий шаблонные екстеншены. Например:
[example]
include => example-sub
exten => h,1,Hangup
exten => _918.,1,Dial(Zap/1/${EXTEN})
[example-sub]
exten => _.,1,Dial(Zap/2/${EXTEN})
Теперь Asterisk (для контекста «example») будет проверять номер на совпадение в следующем порядке:
- _918.
- h
- _.
Что в этом случае делает Asterisk:
- Записи exten внутри контекста «example» будут сохранены первыми и, соответственно, проверяться также будут первыми;
- Включенные контексты каждой директивой include будут сохраняться в порядке их описания.
Включенные контексты будут проверяться на совпадение в порядке их описания в файле extensions.conf.
Источник: http://voip.rus.net/tiki-index.php?page=Asterisk+config+extensions.conf+sorting