IVR меню и WaitExten
Пытаюсь сделать простой 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.
Вообще не понимаю что происходит.
Можно ли запретить человеку, висящему в очереди нажимать кнопки?
Внутри Queue абонент может нажимать кнопки и эти нажатия как extension передаются в контекст очереди.
Вылечилось выкидыванимем очереди в отдельный контекст и указание в queues.conf этого контекста для очереди.
Причём просто вынос очереди из контекста или указание другого контекста queues.conf результата не даёт.