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

Зомби-каналы при постановке на удержание

Добавлено: 14 янв 2013, 14:30
Natalja
Добрый день!
Возникла необходимость ставить абонента на удержание и снимать с него не средствами самого телефона, а с помощью DTMF. Мне казалось что это легко сделать макросами и features.conf. Допустим по нажатию "11" отправляем абонента в контекст, где он ставится на удержание. Почему-то оказалось, что при этом появляются зомби-каналы. У меня какие-то неверные настройки? Зомби меня не беспокоили бы, но после того как их накапливается штук 7 dtmf перестают восприниматься и в CLI-консоли выдается ошибка: ERROR[14769]: app_macro.c:292 _macro_exec: Macro(): possible infinite loop detected. Returning early.
Заранее спасибо :)

extensions.conf:
[from-inside]
exten => _XXX,1,NoOp("Start")
exten => _XXX,n,Set(DYNAMIC_FEATURES=test_start)
exten => _XXX,n,Dial(SIP/${EXTEN},20)
exten => _XXX,n,HangUp()

[macro-test-start]
exten => s,1,NoOp("Macro test-start")
exten => s,n,Set(hold_channel=${BRIDGEPEER})
exten => s,n,ChannelRedirect(${hold_channel},test-hold,s,1)
exten => s,n,Read(DEST,dial,,i)
exten => s,n,GotoIf($["${DEST}" = "0"] ?rehold:do_call)
exten => s,n(rehold),Bridge(${hold_channel})
exten => s,n,HangUp()
exten => s,n(do_call),Dial(Local/${DEST}@from-inside,,g)

[test-hold]
exten => s,1,NoOp("Test-hold")
exten => s,n,Answer()
exten => s,n,MusicOnHold(,3600)
exten => s,n,HangUp()

features.conf:
[applicationmap]
test_start => 11,self,Macro,test-start

Re: Зомби-каналы при постановке на удержание

Добавлено: 14 янв 2013, 14:33
Vlad1983
что мешает пользовать парковку?

Re: Зомби-каналы при постановке на удержание

Добавлено: 14 янв 2013, 14:52
Natalja
Влад, сама задача поставлена более широко, постановка на удержание - это её часть. В конечном итоге надо добиться того, чтобы А в разговоре с Б мог поставить Б на удержание, а потом на выбор:
1. Снять Б с удержания
2. Позвонить В
2.1. Поменять местами Б и В, т.е. нажатием какой-то комбинации вернуться к разговору с Б, а В поставить на удержание
2.2. создать с Б и В конференцию

Может ошибаюсь, но по-моему парковкой такого не сделать...

Re: Зомби-каналы при постановке на удержание

Добавлено: 14 янв 2013, 16:11
ded
Сделать. Всё вполне штатный Астериск функционал, парковка + конференция.
Но я бы сделал это всё средствами ИП телефона, а не средствами Астериск, ибо это уже есть, и ничего придумывать не надо.

Re: Зомби-каналы при постановке на удержание

Добавлено: 14 янв 2013, 16:47
Natalja
Запаркованный вызов ведь может снять кто угодно, не только тот, кто его запарковал? Если да, то такой вариант не подходит ( Но спасибо, попробую разобраться с настройками парковки.
Я бы тоже оставила эти функции за телефонами, но в сети будут и обычные tdm-телефоны без нужных кнопок, поэтому приходится их дублировать Астериском.

p.s. Насчет зомби все-таки интересно - от чего они появляются? От кривого диалплана?

Re: Зомби-каналы при постановке на удержание

Добавлено: 14 янв 2013, 17:59
Vlad1983
зомби обычно вылазят при использовании chan_local
попробуйте заменить эту строку
exten => s,n(do_call),Dial(Local/${DEST}@from-inside,,g)
такой
exten => s,n(do_call),Dial(Local/${DEST}@from-inside/n)
в опции g там смыла нет никакого

Re: Зомби-каналы при постановке на удержание

Добавлено: 15 янв 2013, 10:40
Natalja
Влад, у меня зомби появляются до повторного dial-а, в момент когда я ставлю абонента на удержание. Первоначальный звонок происходит в контексте from-inside. А звонит Б, пока они в разговоре - все нормально. Затем А набирает "11", который согласно features.conf запускает макрос test-start. Этот макрос берет и редиректит Б в контекст test-hold командой ChannelRedirect(${hold_channel},test-hold,s,1). И в этот момент появляется зомби. Просмотр каналов в cli-консоли выдает такое:

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

Channel                                               Context
AsyncGoto/SIP/002-00000020<ZOMBIE>                    from-inside
SIP/001-0000001f                                      macro-test-start
SIP/002-00000020                                      test-hold
То есть в момент, когда происходит редирект канала из одного контекста (from-inside) в другой (test-hold), в первом (from-inside) остается зомби-тень этого перекинутого канала. Это нормально для команды Redirect?