asterisk - 将组名称获取到 Asterisk 中相应的 pri 端口

标签 asterisk phone-call ivr pbx

我正在使用 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})

对于第二个 pri 端口 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} )})

其他组等,我调用电话

   exten => _X.,n,dial(DAHDI/${GROUP}/${NUMBER})

但我认为这不是一个好主意,因为我有 8 个端口,所以我必须编写 8 行来确定组并通过匹配 DID 进行拨号。那么有没有办法在我的拨号计划中动态获取组意味着如果有的话 channel 变量,我可以从中获取当前传入端口调用的组?

最佳答案

据我所知,DAHDI 组没有这样的变量。

在 chan_dahdi.conf 中,您使用相同的选项“context=from-pstn”,因此您可以轻松地为组 1 设置“context=pri-g1”(为组 2 等设置“context=pri-g2”)然后在 dialplan 中定义类似的内容:

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

设置起来不像有 channel 变量那么方便,但是对于asterisk来说速度很快。

请注意,在 [pri-g#] 中,exten 可能不是“s”,而是 DID 数字或其他内容 - 但您很快就会在 CLI 错误中看到它。

关于asterisk - 将组名称获取到 Asterisk 中相应的 pri 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177111/

相关文章:

Asterisk 11 中的 MySQL CDR?

sip - Asterisk : originate call doesn't set the CALLERID in the dialplan

android - Adobe Air Mobile(iOS、Android)和来电

asp.net-mvc - IVR 与 Asp.net MVC : How can I stop reinventing the browser?

installation - 使用 Asterisk 设置 IVR

asterisk - 无法播放 Asterisk 中保留的音乐

Websocket 连接失败并显示 Asterisk 11

mysql - 如何使用 Asterisk MYSQL 命令调用存储过程?

java - 如何在 Java EE 中调用电话

android - 使用Appium在Android设备上调用电话