Asterisk 13 中带有 gosub 参数的队列命令?

问题描述 投票:0回答:3

我相信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()
asterisk
3个回答
0
投票

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

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

将其放在队列之前


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()

希望有帮助。


0
投票

抱歉,我的答案很糟糕。这么多年过去了,我面临着同样的需求。

您可以这样在队列应用程序的 gosub 参数中使用参数:

exten => _X.,n,Queue(queue1,,,180,,,"setstartcall,arg_callstarted,${UNIQUEID}")

在代码中找到答案:https://github.com/asterisk/asterisk/blob/6222e73cd8085112f4cfa94621e937ebce2835f9/apps/app_queue.c#L7349

© www.soinside.com 2019 - 2024. All rights reserved.