我相信在Asterisk 13中队列命令可以指定gosub,因此一旦双方连接,它将在被叫方的通道(队列成员)上gosub。但是如何传递参数给sub呢?
我试着:
exten => _X.,n,Queue(queue1,,,180,,,setstartcall,s,1(arg_callstarted,${UNIQUEID}))
但是它不工作,我没有在我的子上下文中得到参数。
[setstartcall]
exten => s,1,Set(DB(${ARG1}/${ARG2})=${EPOCH})
exten => s,n,Return()
你应该使用父通道变量setup
exten => _X.,n,Set(__ARG_1=${UNIQUEID}); double underline mean set this variable to same for any child channel created.
放在queue前面
进一步扩展arheops的答案,您可以使用变量继承在堆栈中向下传递变量,如下所示https://wiki.asterisk.org/wiki/display/AST/Variable+Inheritance
因此,正如他们解释的那样,您可以设置一个以两个下划线开头的变量,以便由创建的任何新通道继承,这意味着它可以设置为__FOO
,然后稍后引用为${FOO}
。
因此,把你的例子和他们的答案结合起来:
[incoming] ; Using 'incoming' as the parent context
exten => _X.,n,Set(__UNIQ=${UNIQUEID})
exten => _X.,n,Queue(queue1,,,180,,,setstartcall))
[setstartcall]
exten => s,1,Set(DB(arg_callstarted/${UNIQ})=${EPOCH})
exten => s,n,Return()
希望对你有帮助。