我正在使用sagoma 8端口卡我的chan_dahdi.conf
来配置端口是
;autogenerated by /usr/sbin/wancfg_dahdi do not hand edit
;autogenrated on 2015-06-12
;Dahdi Channels Configurations
;For detailed Dahdi options, view /etc/asterisk/chan_dahdi.conf.bak
[trunkgroups]
[channels]
context=default
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
relaxdtmf=yes
rxgain=0.0
txgain=0.0
group=1
callgroup=1
pickupgroup=1
immediate=no
;Sangoma A108 port 1 [slot:4 bus:2 span:1] <wanpipe1>
switchtype=euroisdn
context=from-pstn
group=1
echocancel=yes
signalling=pri_cpe
channel =>1-15,17-31
;Sangoma A108 port 2 [slot:4 bus:2 span:2] <wanpipe2>
switchtype=euroisdn
context=from-pstn
group=2
echocancel=yes
signalling=pri_cpe
channel =>32-46,48-62
;Sangoma A108 port 3 [slot:4 bus:2 span:3] <wanpipe3>
switchtype=euroisdn
context=from-pstn
group=3
echocancel=yes
signalling=pri_cpe
channel =>63-77,79-93
;Sangoma A108 port 4 [slot:4 bus:2 span:4] <wanpipe4>
switchtype=euroisdn
context=from-pstn
group=4
echocancel=yes
signalling=pri_cpe
channel =>94-108,110-124
;Sangoma A108 port 5 [slot:4 bus:2 span:5] <wanpipe5>
switchtype=euroisdn
context=from-pstn
group=5
echocancel=yes
signalling=pri_cpe
channel =>125-139,141-155
;Sangoma A108 port 6 [slot:4 bus:2 span:6] <wanpipe6>
switchtype=euroisdn
context=from-pstn
group=6
echocancel=yes
signalling=pri_cpe
channel =>156-170,172-186
;Sangoma A108 port 7 [slot:4 bus:2 span:7] <wanpipe7>
switchtype=euroisdn
context=from-pstn
group=7
echocancel=yes
signalling=pri_cpe
channel =>187-201,203-217
;Sangoma A108 port 8 [slot:4 bus:2 span:8] <wanpipe8>
switchtype=euroisdn
context=from-pstn
group=8
echocancel=yes
signalling=pri_cpe
channel =>218-232,234-248
我的问题是如何在我的拨号计划中动态获取当前呼叫端口的组号。
例如,如果用户呼叫端口1中的pri,则我的拨号语句为
exten => _X.,n,dial(DAHDI/g1/${NUMBER})
对于第二个优先端口2 的呼叫
exten => _X.,n,dial(DAHDI/g2/${NUMBER})
g3、g4、g5等用于其他端口,以便设置特定的DID
当前,当调用到来时,我正在做的是创建一个GROUP变量,该变量通过检查DID范围来存储组
same => n,Set(__GROUP=${IF($[ ${EXTEN} >= ${DIDMINPORT1}]? ${IF($[ ${EXTEN} <= ${DIDMAXPORT1}]?g1:g1)} :g1)})
same => n,Set(__GROUP=${IF($[ ${EXTEN} >= ${DIDMINPORT2}]? ${IF($[ ${EXTEN} <= ${DIDMINPORT2}]?g2: ${GROUP} )} : ${GROUP} )})
等等,用于其他组,用于拨号I do
exten => _X.,n,dial(DAHDI/${GROUP}/${NUMBER})
但我认为这不是一个好主意,因为我有8个端口,所以我必须写8行来确定组,并通过匹配DID进行拨号。那么,有没有任何方法可以在我的拨号计划中动态获取组,这意味着如果有任何通道变量,我可以从中获取当前传入端口呼叫的组?
据我所知,DAHDI组没有这样的变量。
在您的chan_dahdi.conf中,您使用相同的选项"context=from-pstn",因此您可以很容易地为组1设置"context=pri-g1"(为组2设置"context=cri-g2"等),然后在拨号计划中定义类似的内容:
[pri-main]
exten => s,1,NoOp(Main routine)
[pri-g1]
exten => s,1,Set(PRI_GROUP=1)
exten => s,n,GoTo(pri-main,s,1)
[pri-g2]
exten => s,1,Set(PRI_GROUP=2)
exten => s,n,GoTo(pri-main,s,1)
...
[pri-g8]
exten => s,1,Set(PRI_GROUP=8)
exten => s,n,GoTo(pri-main,s,1)
它不像有通道变量那样方便设置,但星号的设置速度很快。
请注意,在[pri-g#]中,extent可能不是"s",而是DID编号或smth else,但您很快就会在CLI错误中看到它。
偶尔可以找到您想要的东西-您可以在chan_dahdi.conf中设置变量,如下所示:
[channels]
...
group=1
setvar=__GROUP=1
...
group=2
setvar=__GROUP=2
...
(and so on)
之后,您可以使用您的拨号计划从问题。