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

Помогите разобраться с 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))

НЕ РАБОТАЕТ

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

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

спросил 2013-02-07 17:43:02 +0400

galserg Gravatar galserg
65 11 2 9

обновил 2013-02-07 17:47:17 +0400

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

ответил 2013-02-07 18:57:02 +0400

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

Comments

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

komrad123 ( 2013-02-07 19:31:13 +0400 )редактировать

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

galserg ( 2013-02-08 12:49:38 +0400 )редактировать
1

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

asteriskguru ( 2013-02-13 10:43:09 +0400 )редактировать

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

galserg ( 2013-02-13 14:04:08 +0400 )редактировать
2

НЕ РАБОТАЕТ

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

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

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

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

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

ответил 2013-02-09 02:50:13 +0400

Olpag Gravatar Olpag
2024 3 6 30

Comments

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

galserg ( 2013-02-10 18:17:41 +0400 )редактировать

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

Olpag ( 2013-02-11 00:29:40 +0400 )редактировать

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

galserg ( 2013-02-11 21:13:07 +0400 )редактировать

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

Olpag ( 2013-02-12 02:10:49 +0400 )редактировать

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

galserg ( 2013-02-12 12:43:51 +0400 )редактировать
1

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

zzuz ( 2013-02-15 15:46:10 +0400 )редактировать
1

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

поправьте на

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

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

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

ответил 2013-02-07 19:33:59 +0400

komrad123 Gravatar komrad123
3810 5 3 44

обновил 2013-02-07 19:34:57 +0400

Comments

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

galserg ( 2013-02-08 12:46:36 +0400 )редактировать

Ваш ответ

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 ленту новостей

Статистика

Задан: 2013-02-07 17:43:02 +0400

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

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

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