2016-08-10 85 views
1

我相信Asterisk 13 Queue命令可以指定gosub,因此一旦雙方連接,它就會在被叫方的信道(隊列成員)上執行gosub。 但如何將參數傳遞給gosub?帶有gosub參數的Asterisk 13中的隊列命令?

我想:

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

所有變量都應該附加到頻道,你不應該通過它們,它們應該在那裏。 – os11k

+0

如果我真的想要通過參數,該怎麼辦? – duccom

+0

我明白你的觀點。我也可以採取其他方式來滿足我的需求。但總的來說,由於GoSub允許你傳遞參數,如果你不應該使用它,它的目的是什麼? – duccom

回答

0

您應該使用父通道變量設置。

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

把那個隊列

+0

這只是解決辦法。因此Queue命令中的gosub與GoSub()應用程序不同,它允許將參數傳遞給子上下文? – duccom

+0

這清楚地表明在應用程序隊列描述中。預計只有3個參數。 – arheops

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

希望幫助:

因此你的榜樣,他們的回答結合起來。