Colleagues, please tell me the answer to the my question!
If I write a macro for the dialplan, then “s” is set as exten, however, the variable ${MACRO_EXTEN} is available in the macro, and it contains the real exten from the context that called the macro.
Sometimes it is very necessary.
And if I write not a macro, but a subroutine, is there a similar variable?
Macro set some channels variables like MACRO_EXTEN,Gosub doesnt have a similar variable or at least I havent fund it on the documenation but you can use argument to save that variable same => n,Gosub(it-gosub,s,1(${EXTEN}))
That is how I do it. However, it seems to me that ${MACRO_EXTEN} was a good, correct idea.
It is very strange that in routines there is no such functionality.
When you call a Marco() you do Marco(test,arg1,arg2) which will execute [macro-test] (as macro’s need the marco- prefix in the context name). Which means a Macro() requires the use of the ‘s’ extension in its dialplan.
When you call a GoSub you so GoSub(context,exten,priority(arg1, arg2). Just like you would with a GoTo statement except with the args option. So now you can do GoSub(dial,${EXTEN},1(arg1)) which means that it will exten the [dial] context and look for a match against ${EXTEN}. So it would be like:
[dial]
exten => _1NXXNXXXXXX,1,NoOp(Running Dial GoSub)
same => n,NoOp(Dialing ${EXTEN})
same => n,NoOp(ARG1 = ${ARG1} - Setting Timer)
same => n,NoOp(ARG2 = ${ARG2} - Setting Dial Options)
same => n,Dial(PJSIP/${EXTEN}@pstn-trunk,${ARG1},${ARG2})
vs
[macro-dial]
exten => s,1,NoOp(Running Dial GoSub)
same => n,NoOp(Dialing ${ARG1} - Dest to Dial)
same => n,NoOp(ARG1 = ${ARG2} - Setting Timer)
same => n,Dial(PJSIP/${ARG1}@pstn-trunk,${ARG2})