所以我需要使用调用方调用的上下文中的变量到被调用方使用的上下文,所以我有这样的代码
[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()
这是我的问题,在调用上下文上下文中,当我在 ${randomId} 上使用 noop() 时,什么都不显示,如何将随机 ID 的值从调用上下文传递到调用上下文?
SHARED 不是你想要的。
拨号中的 G 选项是将拨号操作中涉及的两个通道发送到不同位置的有趣选项之一。两者都将被发送到您指定的上下文/扩展,给定上下文的名称 - 可能不是您想要的。被叫方被发送到优先级+1;主叫方优先级。
也就是说,我希望被叫方在 calledContext,s,2 开始执行,而调用方在 calledContext,s,1 开始执行。但这是您问题的附属问题。
入站信道上设置的变量可以使用信道变量继承传递到它拨打的信道。那是:
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()
使用 _ 或 __ 将导致在被叫方上设置变量。如果您希望变量继续传播到被叫方也可能调用的通道,请使用 __。
星号使用通道或腿的概念。
所以在你的通话中你有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