Используется asterisk 1.6.2.11-r1. Стоит карта TE220. К одному разъёму её подключен PSTN, к другому — вышеуказанная АТС.
chan_dahdi.conf:
[trunkgroups]
[channels]
usecallerid=yes
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
callreturn=yes
echocancelwhenbridged=yes
echocancel=yes
echotraining=yes
language=ru
amaflags=documentation
context=incoming-pstn
group=1
switchtype=euroisdn
signalling=pri_cpe
rxgain=0.0
txgain=0.0
channel => 1-15,17-31
context=incoming-lg
group=2
switchtype=euroisdn
signalling=pri_net
rxgain=0.0
txgain=0.0
channel => 32-46,48-62
Всё подключается, работает, мониторы показывают, что всё отлично.
Теперь, extensions.conf:
[globals]
PSTNTRUNK=DAHDI/g1
LGTRUNK=DAHDI/g2
[default]
[incoming-pstn]
exten => 500,1,Dial(${LGTRUNK}/500,,m)
exten => 500,n,Hangup()
[incoming-lg]
exten => s,1,Dial(${PSTNTRUNK},60)
exten => s,n,Hangup()
Сперва поясню: я пока хочу поставить * между нынешней лыжей и PSTN так, чтобы они оба работали в прежнем режиме, а * занимался только транзитом звонков, прежде чем начну что-то настраивать. От PSTN входящие звонки по потоку идут на экстеншн 500, так что, атс ждёт звонки на этот номер. Соответственно, если звонить с внешнего номера, то всё отрабатывает замечательно: выбирается свободный канал в первой группе, соединяет со свободным каналом второй группы на 500 номер лыжи, а там уже звонит телефон за АТС.
Когда же я пытаюсь звонить изнутри телефонной сети во внешний мир, то АТС почему-то хочет соединиться с экстеншеном 's', о чём * пишет в логах. И тут как раз проблема. Если вышеуказанный вариант контекста incoming-lg, то в консоли пишет:
[Sep 13 19:33:21] -- Accepting call from '' to 's' on channel 0/5, span 2
[Sep 13 19:33:21] -- Executing [s@incoming-lg:1] Dial("DAHDI/36-1", "DAHDI/g1,60") in new stack
[Sep 13 19:33:21] -- Requested transfer capability: 0x00 - SPEECH
[Sep 13 19:33:21] -- Called g1
[Sep 13 19:33:21] -- Channel 0/1, span 1 got hangup, cause 28
[Sep 13 19:33:21] -- Hungup 'DAHDI/1-1'
оно и понятно: неизвестно, какой номер передавать надо.
Если использовать такой вариант:
[incoming-lg]
exten => s,1,Dial(${PSTNTRUNK}/${EXTEN},60)
exten => s,n,Hangup()
, то пишет в консоли
[Sep 13 19:35:20] -- Accepting call from '' to 's' on channel 0/4, span 2
[Sep 13 19:35:20] -- Executing [s@incoming-lg:1] Dial("DAHDI/35-1", "DAHDI/g1/s,60") in new stack
[Sep 13 19:35:20] -- Requested transfer capability: 0x00 - SPEECH
[Sep 13 19:35:20] WARNING[13364]: chan_dahdi.c:3734 dahdi_call: Unrecognized pridialplan NPI modifier: s
[Sep 13 19:35:20] -- Called g1/s
[Sep 13 19:35:21] -- Channel 0/1, span 1 got hangup, cause 28
[Sep 13 19:35:21] -- Hungup 'DAHDI/1-1'
[Sep 13 19:35:21] == Everyone is busy/congested at this time (1:0/0/1)
[Sep 13 19:35:21] == Spawn extension (incoming-lg, s, 1) exited INCOMPLETE on 'DAHDI/35-1'
[Sep 13 19:35:21] WARNING[13364]: pbx.c:4370 __ast_pbx_run: Channel 'DAHDI/35-1' sent into invalid extension 's' in context 'incoming-lg', but no invalid handler
[Sep 13 19:35:21] -- Hungup 'DAHDI/35-1'
Наконец, если я напишу code][incoming-lg]
exten => s,1,Dial(${PSTNTRUNK}/REALTELNUMBER,60)
exten => s,n,Hangup()
, где REALTELNUMBER — реально существующий телефонный номер в формате PSTN, то меня на этот самый телефонный номер спокойно соединяет. Без каких либо проблем.
Итак, вопрос: в данном случае надо настраивать LG, чтобы она отдавала номер вызываемого абонента и тд и тп? Или же надо настраивать *? Если второе, то куда копать, намекните, пожалуйста.