我相信Asterisk 13 Queue命令可以指定gosub,因此一旦双方连接,它将在被叫方的通道(队列成员)上gosub。 但是如何将参数传递给 gosub 呢?
我尝试过:
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()
您应该使用父通道变量设置。
exten => _X.,n,Set(__ARG_1=${UNIQUEID}); double underline mean set this variable to same for any child channel created.
将其放在队列之前
为了扩展 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()
希望有帮助。
抱歉,我的答案很糟糕。这么多年过去了,我面临着同样的需求。
您可以这样在队列应用程序的 gosub 参数中使用参数:
exten => _X.,n,Queue(queue1,,,180,,,"setstartcall,arg_callstarted,${UNIQUEID}")