Страница 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()