получение имени группы для соответствующего pri-порта в звездочке

Я использую sagoma 8 port card My 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

Моя проблема заключается в том, как я могу динамически отображать номер группы текущего вызывающего порта в своем диалплане.

Например, если пользователь вызывает вызов pri, который находится в порту 1, тогда моя команда набора номера

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

и т.д. для других групп, для набора номера я делаю

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

Но я не думаю, что это хорошая идея, потому что у меня есть 8 портов, поэтому я должен написать 8 строк, чтобы определить группу и набрать номер, сопоставляя DID. Так что есть ли способ динамически группировать группу в моем диалплане, если есть из которой я могу получить группу текущего входящего вызова порта?

Ответ 1

Как я знаю, для этих групп DAHDI нет таких переменных.

В вашем chan_dahdi.conf вы используете ту же опцию "context = from-pstn", поэтому вы можете легко установить "context = pri-g1" для группы 1 ( "context = pri-g2" для группы 2 и т.д.), а затем определите в диалплане что-то вроде этого:

[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 #] exten может быть не "s", а DID-номер или smth else, но вы скоро увидите его в CLI-ошибках.

Ответ 2

По случаю найдено именно то, что вы хотите - вы можете установить переменные в chan_dahdi.conf следующим образом:

[channels]
...
group=1
setvar=__GROUP=1
...

group=2
setvar=__GROUP=2
...

(and so on)

После этого вы можете использовать свой диалплан из вопроса.