Есть такая мысль, хочу осуществлять "тонкий" контроль выхода пользователей наружу, т.е. выходов получается очень много, пользователей тоже. Рулить путем перекидывания их между контекстами мне кажется довольно запутанно.... Хочу сделать через базу данных и AGI. Большитх проблем с написанием AGI не вижу, с базой проблем еще меньше...
Использую Trixbox, при звонке наружу он всегда вызывает макрос macro-dialout-trunk. Вначале там есть такие строчки:
| Код: |
| include => macro-dialout-trunk-custom ; можно ли использовать этот инклуд? exten => s,1,Set(DIAL_TRUNK=${ARG1}) |
Не пойму как я могу что-то воткнуть в начало (или середину) макроса? Нумерация priority идет дальше с 1.
Может не в ту сторону думаю? Мне надо при каждом звонке наружу (trunks) вызывать некую самописную AGI и передавать ей 3 параметра: название транка, CallerID, CalledID. Желательно использовать возможность custom модификации trixbox'a, а не патчить....[/code]
| Цитата: |
| можно ли использовать этот инклуд? |
Или я туплю и все так и задумано? Хочется добавить вызов еще чего-го, переписывай весь макрос под себя?
В таком случае не будет ли мешать работе конструкция (2 раза priority = 1) ?
| Код: |
| exten => s,1,.... ; это то, что я в инклуде прописал exten => s,n,... ; это тоже я там прописал exten => s,1,... ; а это пошел штатный код trixbox'a exten => s,n,... ; все еще его код |
Просто следующий шаг. Можно
| Код: |
| exten => s,1,.... ; это то, что я в инклуде прописал exten => s,n,... ; это тоже я там прописал exten => s,n,... ; а это пошел штатный код trixbox'a exten => s,n,... ; все еще его код |
или
| Код: |
| exten => s,1,.... ; это то, что я в инклуде прописал exten => s,2,... ; это тоже я там прописал exten => s,3,... ; а это пошел штатный код trixbox'a exten => s,4,... ; все еще его код [quote][/quote] |
Имеем авто-сгенерированный код:
| Код: |
| [macro-dialout-trunk] include => macro-dialout-trunk-custom exten => s,1,Set(DIAL_TRUNK=${ARG1}) exten => s,n,ExecIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]],Authenticate, exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1) exten => s,n,Set(DIAL_NUMBER=${ARG2}) exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS}) ... |
Я втыкаю вместо include свой код. По сути полностью переписываю все, что идет дальше, немного изменяя под себя. В нем приорити начинаются с 1, потом n, n, и т.д.,
Дальше, после моего include идет то, что я изменить не могу
| Код: |
| exten => s,1,Set(DIAL_TRUNK=${ARG1}) ... |
т.е. опять приоритет 1
Не повлияет ли это на самосознание asterisk'a ? Ведь получится 2 строки с приоритетом 1.
сначала выполняется экстен s,1, s,2, s.. - s = ствртовый
потом совпадения по названию или номеру, и только потом, то что в инклюде.
Т е в твоем варианте он и не дойдёт до инклюда.
В макросе macro-dialout-trunk примерно в середине (по тексту) есть вызов макроса dialout-trunk-predial-hook, который определен в extension.conf и изначально пустой.
Вот туда и надо пихать свои custom AGI. Они будут вызываться непосредственно перед самым Dial.