我想知道如何在当前上下文中运行某些应用程序,然后切换到另一个上下文(就像它已包含在内)。
所以,例如,我有几个传入调用的上下文,但是,特别是对于一个,我需要执行一些额外的操作(具体来说,我需要Answer()
并延迟一秒钟)。所以,假设我有这样的事情:
[main-context]
include => this
include => that
[special-context]
exten => s,1,Agi(agi://<whatever>}
exten => _X.,1,Answer()
same => n,Wait(1)
include => main-context
我希望收到的来自special-context
的来自Answer()
然后main-context
的来电,就好像special-context
中没有匹配扩展一样}。
(我已经使用s
- 扩展,如图所示,但这似乎与扩展的正常执行并行运行,所以我认为这不会有帮助。)
这可能吗?
答案 0 :(得分:0)
您可以使用goto命令。
[special-context]
exten => _X.,1,Answer()
exten => _X.,2,Goto(main-context,${EXTEN},1)
P.S。我强烈建议你阅读任何单一的星号书,例如O'Reilly的“Asterisk the telephony”
答案 1 :(得分:0)
另一种解决方案:
[special-context]
exten => s,1,Agi(agi://<whatever>}
exten => _X.,1,Answer()
same => n,Wait(1)
same => n,Dial(Local/${EXTEN}@main-context)
根据the manual,这会调用一个伪通道(chan_local),它会将一个回调放回拨号方案。
我也在启动AGI接口(在s
- 扩展名中),应该注意额外的Dial()
会干扰您在AGI接口上收到的信令。对我来说,solution posted by arheops效果更好。