Страница 1 из 2

как обрывать вызов при использование нескольких маршрутов?

Добавлено: 20 апр 2017, 17:27
alex.preys
есть маленький колцентр, в нём GMS шлюз на 4 GMS канала. случается, все порты заняты, и в качесте дополнительного, (и более дорогого маршрута) используется fallback шлюз. проблема в том, что вызовы уходят на fallback даже если вызываемый абонент не принял вызов (сбросил вызов, или звонок завершился по таймауту). т.е. абонент на телефоне сбросил вызов не принимая его, и через ~10 сек снова получил вызов уже с другого номера.

как сделать так, чтобы вызовы при занятости основного шлюза уходили на fallback, а при отбое абонента - нет. или чистыми средствами * этого не добиться? ведь стандартно сервер не знает сколько каналов у GMS шлюза. т.е. нужно городить какой-то счётчик? как сделать это оптимально?

пример текущего конфига (в 1й сторке пишем разговор):

exten => _096X., 1, Monitor(wav,/var/lib/asterisk/recordings/${STRFTIME(${EPOCH},,%m.%d.%Y__%H-%M)}_${EXTEN}_${CALLERID(num)}_${CDR(billsec)},bm)
exten => _096X., n, Dial(SIP/${EXTEN}@192.168.10.112, 60, rt)
exten => _096X., n, Dial(SIP/${EXTEN}@192.168.10.117, 60, rt)

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 20 апр 2017, 18:23
gosha
сравнить статусы DIALSTATUS после занято и после отбоя шлюзом по количеству каналов. на основе статуса делать второй Dial.

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 20 апр 2017, 19:41
alex.preys
BYSY к сожалению в обоих вариантах

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 20 апр 2017, 20:55
ded
alex.preys писал(а):есть маленький колцентр, в нём GMS шлюз на 4 GMS канала.
Наверное всё же GSM а не GMS.
Я встречал в некоторых шлюзах этот параметр регулируется - какой код отбоя идёт в случае занятости канала (тогда выбираем следующий канал), а какой в случае занятости абонента (тогда ничего не выбираем).

Ну и это знать просто обязаны!
https://wiki.asterisk.org/wiki/display/ ... hanIsAvail

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 03 май 2017, 18:48
alex.preys
пытаюсь "сделать по мануалу"

exten => _0., 1, ChanIsAvail(SIP/192.168.50.117:5062&SIP/192.168.50.117:5060)
same => n, CUT(theChannel_ks=${AVAILORIGCHAN},,1)
same => n, Verbose(0,${theChannel_ks})
same => n, Dial(SIP/${EXTEN}@${theChannel_ks}, 60, rt)
same => n, Hangup()

но получаю
WARNING[32074][C-00005e5e]: pbx.c:4926 pbx_extension_helper: No application 'CUT' for extension (TEST, номер , 2)

Gentoo
Asterisk 11.21.1 built by portage @ callcenter on a x86_64 running Linux on 2016-02-21 12:41:18 UTC

> core show applications
...
ControlPlayback: Play a file with fast forward and rewind.
DAHDIScan: Scan DAHDI channels to monitor calls.
...
т.е. таки нету апликейшена

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 03 май 2017, 18:56
whoim
Это функция, а в диаплане - бред

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 03 май 2017, 18:57
alex.preys
спасибо!!!

а можно подробнее про "бред"?
или вы имелии ввиду что моё знание синтаксиса вызывает у вас рвотные позывы?

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 03 май 2017, 20:22
alex.preys
ps: у меня тоже иногда :)

частично исправил, но
same => n, Set(theChannel_ks=${CUT(${AVAILORIGCHAN},/,2)})
same => n, Verbose(0,${theChannel_ks})

в консоль выдаёт пустую строку, 2 менял и на 1, и на 0 - с тем же результатом, даже слеш заменял на 1 чтобы хоть что-то отрезало - но нет.

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 03 май 2017, 21:11
awsswa
2009XXX-1 - это имя первого транка, 2009XXX-2 - второго

exten => _9XXXXXXX,1,ChanIsAvail(SIP/2009XXX-1&SIP/2009XXX-2&SIP/2009XXX-3,as)
exten => _9XXXXXXX,n,NoOp(Availchan is ${AVAILCHAN}) ; будет выведено какой канал доступен
exten => _9XXXXXXX,n,NoOp(Availstatus is ${AVAILSTATUS}) ; будет указан статус канала
exten => _9XXXXXXX,n,Dial(${CUT(AVAILCHAN,,1&2)}/${EXTEN},120,T)
exten => _9XXXXXXX,n,Hangup()

Функция ChanIsAvail - проверяет статус линии и на выходе выдает варианты:
1-зарегестрирован, не звонит
2-зарегестрирован и используется (если call-limit = 1 не установлен)
3-зарегестрирован и используется (call-limit = 1)
5-не зарегестрирован
6-зарегестрирован и звонит
Узнаем статус линии - если статус 1 или 2 то звоним по ней.

Re: как обрывать вызов при использование нескольких маршруто

Добавлено: 04 май 2017, 13:40
alex.preys
КАК же меня тошнит от моего знания синтаксиса :)

в приведённом (верю что рабочем примере) строчки

Код: Выделить всё

exten => _9XXXXXXX,n,NoOp(Availchan is ${AVAILCHAN}) ; будет выведено какой канал доступен
exten => _9XXXXXXX,n,NoOp(Availstatus is ${AVAILSTATUS}) ; будет указан статус канала 
куда будет выведена инфа? в консоль? там пусто :'(

работает в таком варианте

Код: Выделить всё

exten => _0., 1, ChanIsAvail(SIP/192.168.50.117:5060&SIP/192.168.50.117:5062)
;same => n, Verbose(0,${CUT(AVAILORIGCHAN,/,2)})
same => n, Dial(SIP/${EXTEN}@${CUT(AVAILORIGCHAN,/,2)})
same => n, Hangup()