我相信Asterisk 13 Queue命令可以指定gosub,这样一旦双方连接,它就会在被叫方的通道(队列成员)上进行gosub。 但是如何将args传递给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()
答案 0 :(得分:0)
您应该使用父通道变量设置。
exten => _X.,n,Set(__ARG_1=${UNIQUEID}); double underline mean set this variable to same for any child channel created.
把它放在队列之前
答案 1 :(得分:0)
为了扩展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()
希望有所帮助。