所以我需要使用来自调用者调用的上下文中的变量到被调用方使用的上下文,所以我有这样的代码
[calledContext]
exten => s,1,goto(waits)
same => n,goto(playmessage)
same => n(waits),set(a=0)
same => n(waits2),wait(5)
same => n,GotoIf($[${a} = 0]?waits2:hang)
same => n(playmessage),noop(${randomId})
same => n(hang),hangup();
[callerContext]
exten => 012345,1,Noop()
same => n,set(randomId=523)
same => n,Dial(SIP/09201234567,20,G(calledContext^s^1)g)
same => n,hangup()
继承了我的问题,在calledContext上下文中,当我在$ {randomId}上使用noop()时,没有显示任何内容,我如何将来自callerContext的randomId的值传递给calledContext?
答案 0 :(得分:4)
SHARED不是你想要的。
Dial中的G选项是将拨号操作中涉及的两个通道发送到不同位置的有趣选项之一。两者都将被发送到您指定的Context / Extension,给定上下文的名称 - 可能不是您想要的。被叫方被发送到优先级+ 1;主叫方优先权。
也就是说,我希望被叫方开始在calledContext,s,2处执行,并且主叫方开始在calledContext,s,1执行。但这是你的问题的辅助。
可以使用channel variable inheritance将入站通道上设置的变量传递到其拨打的频道。那就是:
exten => 012345,1,Noop()
; Using a single underbar will set randomId on all channels this
; channel creates, but will not continue to propagate further
same => n,set(_randomId=523)
; Using two underbars will cause the variable to always propagate
same => n,set(__someOtherId=111)
same => n,Dial(SIP/09201234567,20,G(calledContext^s^1)g)
same => n,hangup()
使用_或__将导致在被叫方上设置变量。如果您希望变量继续传播到被叫方也可以调用的频道,请使用__。
答案 1 :(得分:-1)
Asterisk使用CHANNEL或leg的概念。
因此,在您的通话中,您有2个频道,每个频道都有自变量和控制结构
您可以通过BRIDGEPEER
查看桥接频道的名称http://www.voip-info.org/wiki/view/Asterisk+Detailed+Variable+List
您可以使用SHARED函数获取其他频道的变量。
http://www.voip-info.org/wiki/view/Asterisk+func+shared
要查看当前频道中设置的变量,您可以使用应用程序DumpChan