[asterisk-users] vars in Macros called by DIAL with option M

Thomas Winter thowinter at googlemail.com
Tue Aug 5 14:29:27 CDT 2008


On Tuesday 05 August 2008 18:50, Al Baker wrote:
> Err - Ok - let me ask this in MUCH simpler way
>
> 1 - In dialplan , you set a Variable called   "MYVAR", to "Apple"
>
> 2 - You go into MACRO and NOOP the VALUE of "MYVAR" -What SHOULD it BE ?

You should better use
    M(x[^arg]) - Execute the Macro for the *called* channel before connecting
           to the calling channel. Arguments can be specified to the Macro
           using '^' as a delimeter. 

Its not a problem to get vars in the MACRO

> 3 - While IN MACRO you set VALUE of "MYVAR" = "Pear"
>
> 4 - You leave MACRO and get back to DIALPLAN and NOOP the value of MYVAR
> - What should it be

regardless if you set MYVAR, _MYVAR or __MYVAR in the MACRO, it is not 
working. 


> =========== 2nd Question  ===
>  CAN the DIAL command call a SUBROUTINE instead of a MACRO ?
>
> If so WOULD that help him out ?
>
> Any clarification much apprecatted
>
> Tilghman Lesher wrote:
> > On Tuesday 05 August 2008 10:47:34 Thomas Winter wrote:
> >> Hi all,
> >>
> >> Iam using an DIAL Command wird Macro if callee is answer the call.
> >>
> >> exten => 123,n,DIAL(SIP/123 at provider,180,gM(test_connect))
> >> exten => 123,n,NoOp( ${var_from_macro})
> >>
> >>
> >> In Macro test_connect Iam generating an new variable var_from_macro and
> >> would like to use this var in the original dialplan.
> >> I tried also __var_from_macro but didnt work. How can I set vars in
> >> macros called by DIAL so that I can use these vars in the Dialplan or in
> >> the h extention.
> >
> > There isn't any good way to do that, period.  When it comes to
> > inheritance, variables are only inherited from a master channel to a
> > slave channel.  In the case of the Macro operating within the Dial, that
> > Macro is occurring exclusively on the slave channel.  You cannot directly
> > set variables on other channels (for obvious race-condition reasons).
> >
> > However, you could do this in a roundabout way, either by using a
> > database or by using shared variables in trunk.  You'd need to first set
> > (in the master channel, before the Dial) an inherited variable containing
> > the name of the master channel, i.e. Set(_masterchan=${CHANNEL(name)}),
> > then use that inherited variable to set the shared variable in the master
> > channel from the slave channel, i.e. Set(SHARED(foo,${masterchan})=...). 
> > Finally, you would be able to access the shared variable in the master
> > channel with ${SHARED(foo)}.  Again, the SHARED function is only
> > available in trunk at this time, although you could probably backport it
> > to 1.4 with minimal trouble.
>
> _______________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> AstriCon 2008 - September 22 - 25 Phoenix, Arizona
> Register Now: http://www.astricon.net
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users



More information about the asterisk-users mailing list