Asterisk 带gosub参数的星号为13的队列命令?

Asterisk 带gosub参数的星号为13的队列命令?,asterisk,Asterisk,我相信Asterisk 13队列命令可以指定gosub,这样一旦双方连接,它就会在被叫方的通道(队列成员)上进行gosub。 但是如何将args传递给gosub呢 我试过: exten => _X.,n,Queue(queue1,,,180,,,setstartcall,s,1(arg_callstarted,${UNIQUEID})) 但它不起作用,我没有在我的子上下文中理解这个论点 [setstartcall] exten => s,1,Set(DB(${ARG1}/${ARG

我相信Asterisk 13队列命令可以指定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()

您应该使用父通道变量设置

exten => _X.,n,Set(__ARG_1=${UNIQUEID}); double underline mean set this variable to same for any child channel created.

将其置于队列之前,您应该使用父通道变量设置

exten => _X.,n,Set(__ARG_1=${UNIQUEID}); double underline mean set this variable to same for any child channel created.

把它放在队列前面

只是为了扩展arheops的答案,您可以使用变量继承通过堆栈向下传递变量,如下所述

因此,正如他们所解释的,您可以设置一个以两个下划线开头的变量,以供创建的任何新通道继承,这意味着可以将其设置为
\uuuuufoo
,然后在以后引用为
${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()

希望这能有所帮助。

为了扩展arheops的答案,您可以使用变量继承通过堆栈向下传递变量,如下所述

因此,正如他们所解释的,您可以设置一个以两个下划线开头的变量,以供创建的任何新通道继承,这意味着可以将其设置为
\uuuuufoo
,然后在以后引用为
${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允许您传递参数,如果您不使用它,它在这里的用途是什么?我认为不应该总是将arg分配给全局变量。如果您确实希望传递arg,请将其作为扩展(number)的一部分传递,如s-${VAR}和在dialplan中解析。所有变量都应该附加到通道,您不应该传递它们,它们应该就在那里。如果我真的想传递参数呢?我明白您的意思。我也可以用其他方法来满足我的需要。但一般来说,由于GoSub允许您传递参数,如果您不使用它,它在这里的用途是什么?我认为不应该总是将arg分配给全局变量。如果您确实希望传递arg,请将其作为扩展(number)的一部分传递,如s-${VAR}和dialplan中的parse。这只是一种解决方法。所以gosub in Queue命令不像gosub()应用程序那样允许将参数传递给子上下文,而子上下文在应用程序队列描述中明确说明了这一点。只需要3个参数。这只是一种解决方法。所以gosub in Queue命令不像gosub()应用程序那样允许将参数传递给子上下文,而子上下文在应用程序队列描述中明确说明了这一点。只需要3个参数。