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

Tilghman Lesher tilghman at mail.jeffandtilghman.com
Tue Aug 5 11:04:23 CDT 2008


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.

-- 
Tilghman



More information about the asterisk-users mailing list