Экстеншены, включенные через include => всегда имеют меньший приоритет, чем встроенные. Т.к. В Макрос мы, по-хорошему, приходим на экстеншен s, то перекрыть его Include'ом в астере нельзя.
asteriskguru (Feb 13 '13)editИспользую FreePBX Нужно допилить - при определенных вызовах подменить номер вызываемого абонента нахожу в extensions_additional.conf контекст [macro-dialout-trunk], который выполняется при исходящем звонке
было:
[macro-dialout-trunk]
include => macro-dialout-trunk-custom
exten => s,1,Set(DIAL_TRUNK=${ARG1})
exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
стало:
[macro-dialout-trunk]
include => macro-dialout-trunk-custom
exten => s,1,Set(DIAL_TRUNK=${ARG1})
exten => s,n,ExecIf($[${ARG2}=8075]?Set(ARG2=0000008075))
exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
Все чудесно работает Но хотелось бы засунуть свое правило в отдельный контекст, и использовать для этого специально предназначенный macro-dialout-trunk-custom, который FreeBBX не будет изменять никогда А в этом контексте (создаю его в extensions_custom.conf) то же самое правило не работает и в CLI при прохождении звонка его не видно, тоесть
[macro-dialout-trunk-custom]
exten => s,1,ExecIf($[${ARG2}=8075]?Set(ARG2=0000008075))
НЕ РАБОТАЕТ
Подскажите, почему?
Потому что строчки include => в контекстах macro-... совершенно бесполезены. Пропишите в extensions_override_freepbx.conf:
[macro-dialout-trunk]
exten => s,1,ExecIf($[${ARG2}=8075]?Set(ARG2=0000008075))
exten => s,n,Set(DIAL_TRUNK=${ARG1})
exten => s,n,ExecIf($[${ARG2}=8075]?Set(ARG2=0000008075))
exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
Экстеншены, включенные через include => всегда имеют меньший приоритет, чем встроенные. Т.к. В Макрос мы, по-хорошему, приходим на экстеншен s, то перекрыть его Include'ом в астере нельзя.
asteriskguru (Feb 13 '13)editНЕ РАБОТАЕТ
Подскажите, почему?
Если выполнить dialplan show macro-dialout-trunk, то можно увидеть, что
Include =>'macro-dialout-trunk-custom'
находится не в начале, а в конце диалплана , поэтому выполнение до него просто не дойдет...
Про инклюды поясню. Секретов тут никаких нет. Впервую очередь выполняется диаплан первого уровня, потому добавляются инклюды сверху вниз и так далее. в extensions_override_freepbx.conf тоже самое , просто там и есть диаплан первого уровня для вышеприведенного привера контекстов. Сначала выполняется то , что в extensions_override_freepbx.conf , затем инклюд в стандартном файле , затем другой инклюд , и так далее до предельного значения. При просмотре dialplan show модуль pbx_config как раз и показывает алгоритм выполнения диаплана.
zzuz (Feb 15 '13)editу вас два раза extens => s,1 стало после инлуда
поправьте на
[macro-dialout-trunk] include => macro-dialout-trunk-custom exten => s,2,Set(DIAL_TRUNK=${ARG1})
и счасте должно наступить. иликак посоветовали раньше отдельный макрос написать
Пробовал и таким образом. Тоже не работает. А вообще - при инклуде одного диалплана в другой что происходит с приоритетами если шаблоны совпадают? Я считал что инклуд это как подпрограмма - екстеншен ныряет в инклуд, с ним там что-то происходит, после окончания инклуда возвращается в основной диалплан. я ошибался?
galserg (Feb 8 '13)editЗадан: Feb 7 '13
Просмотрен: 4,437 раз
Обновлен: Feb 09 '13
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.