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

ivr в макросе команды dial

Добавлено: 18 май 2015, 16:22
hronik
Всем доброго дня!
Имеем Asterisk 13.2.0 через который идут звонки от клиентов к операторам ( не очередь, просто переадресация)
Что бы решить задачу: "проигрывать приветствие ВЫЗЫВАЕМОЙ стороне бесконечно, пока оператор не нажмет 1"
Был написан макрос, примерно такой:

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

exten => s,1,Log(NOTICE,        ${UNIQUEID}     Come  ${CALLERID(all)} to [macro-hello-play]!  CHANNEL=${CHANNEL})
    same = n,Set(TIMEOUT(response)=1)
    same = n(loop),Wait(1)
    same = n,Background(hello-play)

exten => 1,1,MacroExit()

exten => t,1,Goto(loop)

exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(loop)
Запись hello-play содержит в себе 10 минут бесконечных "блаблабла нажмите 1 для соединения с клиентом"
Такая форма была сделана для того что бы оператор обязательно услышал приветствие, даже если перед ним трубку снял автоответчик.

Но возникла проблема, если клиент (вызывающий) положил трубку до того как оператор нажмет "1", то макрос не завершает своего действия, а продолжает просить нажать 1, в логах в это время получаем:

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

WARNING[29074]: chan_sip.c:4286 __sip_autodestruct: Autodestruct on dialog 'AE643477BA4AB84473ECFABCB751C1F5' with owner SIP/IP-000053e8 in place (Method: BYE). Rescheduling destruction for 10000 ms
А когда оператор все же нажмет "1" то вызов просто оборвется.

Вопрос: Мне нужно обрывать макрос если вызывающий положил трубку или сообщать оператору, что клиент не дождался и повесил трубку. Подскажите с какой стороны зайти.
Или может я изначально выбрал не правильное решение?
Спасибо!

Re: ivr в макросе команды dial

Добавлено: 18 май 2015, 16:54
ded
Задача "проигрывать приветствие ВЫЗЫВАЕМОЙ стороне бесконечно, пока оператор не нажмет 1" уже имеет в себе логические тупики.
Но если всё-таки хочется упорствовать, то надо ввести в макрос кроме t и i, ещё

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

exten => h,1,MacroExit()
exten => t,1,Goto(loop)
exten => i,1,

Re: ivr в макросе команды dial

Добавлено: 18 май 2015, 17:01
hronik
Спасибо за ответ!
Да задача тупиковая, я полностью согласен :)

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

exten => h,1,MacroExit()
Не помогает, так как ждет сигнал от вызываемой стороны, а не вызывающей, на сколько я понимаю.

Re: ivr в макросе команды dial

Добавлено: 18 май 2015, 18:27
ded
Идея с макросом - тухлая. Хотите ловить Hangup c другой стороны - не передавайте в макрос и обрабатывайте ваш цикл в родительском контексте, там и Hangup обработаете.