AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

IVR меню и WaitExten

Asterisk IP PBX 3 сообщений 21.12.2010 11:35 - 22.12.2010 08:20
#1 21.12.2010 11:35

IVR меню и WaitExten


Asterisk 1.4.36

Пытаюсь сделать простой IVR с очередью на конце.

Необходимо чтобы пользователь мог нажать цифру пункта меню пока их ему зачитывают. При этом чтобы ему ещё и MOH проигрывался.
Read() для этих целей не подходит (он может давать нажимать цифры во время прослушивания файла, но MOH после этого не включает).

Сделано вот так:

Code:

exten => 8800,1,Answer
exten => 8800,n,Wait(1)
exten => 8800,n,Background(file)
exten => 8800,n,Set(TIMEOUT(digit)=0)
exten => 8800,n,Set(TIMEOUT(response)=10)
exten => 8800,n,StartMusicOnHold
exten => 8800,n,WaitExten(10)

exten => 1,1,Set(testvar='1')
exten => 1,n,Set(CDR(accountcode)=${testvar})
exten => 1,n,Set(QUEUE_PRIO=10)
exten => 1,n,Goto(call-centre,que,1)

exten => 0,1,Set(testvar=${testvar}'0')
exten => 0,n,Set(CDR(accountcode)=${testvar})
exten => 0,n,Set(QUEUE_PRIO=1)
exten => 0,n,Goto(call-centre,que,1)

exten => t,1,Goto(call-centre,0,1)

exten => i,1,Goto(call-centre,0,1)

exten => que,1,Queue(DGK-queue,t,,,540)
exten => que,n,Playback(DGKend)
exten => que,n,Hangup()


Всё работает, но:

Пытливый пользователь может успеть нажать, допустим, 10. Тогда он обработается как 1, попадёт в очередь по Goto и ТУТ ЖЕ обработается по 0.
Даже если все операторы свободны.

Как этого избежать? Как сделать так, чтобы при нажатии 10, 100 и т. д. обрабатывалась только 1? Или чтобы любые нажатия кроме 1 и 0 попадали на invalid extension?

Added after 1 hours 30 minutes:

Вынес аналогичный кусок кода в новый контектс (разница только в названии по-сути).
В нём всё отрабатывается корректно - любой явно не указанный екстеншн падает на invalid.

Вообще не понимаю что происходит. Sad
#2 21.12.2010 17:57

Многочисленные тесты показали, что всё это работает только если человек попал в очередь и там жмёт кнопки. Если просто PlayBack или что-то подобное - не переходит никуда.

Можно ли запретить человеку, висящему в очереди нажимать кнопки?
#3 22.12.2010 08:20

Оказалось всё просто.
Внутри Queue абонент может нажимать кнопки и эти нажатия как extension передаются в контекст очереди.
Вылечилось выкидыванимем очереди в отдельный контекст и указание в queues.conf этого контекста для очереди.

Причём просто вынос очереди из контекста или указание другого контекста queues.conf результата не даёт.