First time here? Check out the FAQ!

Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Помогите разобраться с include =>

0

Использую 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))

НЕ РАБОТАЕТ

Подскажите, почему?

спросил Feb 7 '13

galserg Gravatar galserg
65 11 2 9

обновил Feb 7 '13

3 Ответа

2

Потому что строчки 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})
ссылка удалить спам редактировать

ответил Feb 7 '13

asteriskguru Gravatar asteriskguru
1160 4 5 21
http://www.asteriskguru.r...

Comments

чей то они безболезны ? конкретно тут приоритет просто сломан.

komrad123 (Feb 7 '13)edit

попробую, спасибо. А действительно - почему строчки include => в контекстах macro-... совершенно бесполезены? контексты в оверрайдах как я понимаю полностью заменяют родные?

galserg (Feb 8 '13)edit
1

Экстеншены, включенные через include => всегда имеют меньший приоритет, чем встроенные. Т.к. В Макрос мы, по-хорошему, приходим на экстеншен s, то перекрыть его Include'ом в астере нельзя.

asteriskguru (Feb 13 '13)edit

ага, тоесть в инклуд имеет смысл писать экстеншены которые заведомо не будут обработаны в родительском диалплане? а если у нас в родительском диалплане обрабатывается контекст s то все инклуды курят? Спасибо, раскрыли глаза....

galserg (Feb 13 '13)edit
2

НЕ РАБОТАЕТ

Подскажите, почему?

Если выполнить dialplan show macro-dialout-trunk, то можно увидеть, что

 Include =>'macro-dialout-trunk-custom'

находится не в начале, а в конце диалплана , поэтому выполнение до него просто не дойдет...

ссылка удалить спам редактировать

ответил Feb 8 '13

Olpag Gravatar Olpag
2024 3 6 30

Comments

а в диалплане инклуд находится в начале... В чем логика?

galserg (Feb 10 '13)edit

это Вы судите по конф. файлам? или все же выполнили команду dialplan show macro-dialout-trunk ?

Olpag (Feb 10 '13)edit

выполнял, Вы правы абсолютно - инклуд добавляется в самый конец Но в чем логика? И нафига в общем-то такой инклуд нужен?

galserg (Feb 11 '13)edit

в чем логика добавления инкклюда в конец? это надо выяснять у разрабов астериска.... я всего лишь ответил на Ваш вопрос "почему не работает?"... делайте так, как сказал asteriskguru, через extensions_override_freepbx.conf...

Olpag (Feb 11 '13)edit

Спасибо, очень помогли

galserg (Feb 12 '13)edit
1

Про инклюды поясню. Секретов тут никаких нет. Впервую очередь выполняется диаплан первого уровня, потому добавляются инклюды сверху вниз и так далее. в extensions_override_freepbx.conf тоже самое , просто там и есть диаплан первого уровня для вышеприведенного привера контекстов. Сначала выполняется то , что в extensions_override_freepbx.conf , затем инклюд в стандартном файле , затем другой инклюд , и так далее до предельного значения. При просмотре dialplan show модуль pbx_config как раз и показывает алгоритм выполнения диаплана.

zzuz (Feb 15 '13)edit
1

у вас два раза extens => s,1 стало после инлуда

поправьте на

[macro-dialout-trunk]
include => macro-dialout-trunk-custom
exten => s,2,Set(DIAL_TRUNK=${ARG1})

и счасте должно наступить. иликак посоветовали раньше отдельный макрос написать

ссылка удалить спам редактировать

ответил Feb 7 '13

komrad123 Gravatar komrad123
3810 5 3 44

обновил Feb 7 '13

Comments

Пробовал и таким образом. Тоже не работает. А вообще - при инклуде одного диалплана в другой что происходит с приоритетами если шаблоны совпадают? Я считал что инклуд это как подпрограмма - екстеншен ныряет в инклуд, с ним там что-то происходит, после окончания инклуда возвращается в основной диалплан. я ошибался?

galserg (Feb 8 '13)edit

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: Feb 7 '13

Просмотрен: 4,437 раз

Обновлен: Feb 09 '13

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.