14.2. Mehrstufige IVR-Systeme
Das Problem bei mehrstufigen IVRs ist, dass der Benutzer je nach
Menüstruktur mehrmals eine einstellige Zahl (eventuell sogar die gleiche)
drücken soll, aber jeweils ein anderes Ergebnis erhält oder eine andere
Aktion erfolgt. Da innerhalb eines Contextes eine Zahl aber nur einmal
vergeben werden kann, bliebe der Anrufer immer auf dieser Menüebene
hängen. Sollen mehrere Menüs hintereinander geschaltet werden und sollen
in jedem Menü gleiche Eingaben andere Ergebnisse bringen, so muss man
diese Untermenüs in andere Contexte (in unserem Beispiel
[kantine]
) legen. Der Sprung zwischen den einzelnen
Positionen erfolgt dann mit
Goto()
(siehe
Abschnitt C.65, „Goto()
“). Nehmen wir an, Sie haben folgende
Soundfiles im Verzeichnis
/var/lib/asterisk/sounds/
abgespeichert:
Wenn der Verkauf unter der Extension 100 und der Hausmeister unter
der Extension 150 erreichbar ist, sieht der Dialplan für diese IVR
folgendermaßen aus:
[beispiel-ivr]
; Das Menü wird ständig wiederholt.
;
exten => 30,1,Answer()
exten => 30,2,Background(grundmenue)
exten => 30,3,Background(silence/3)
exten => 30,4,Goto(2)
exten => 1,1,Dial(SIP/100)
exten => 2,1,Dial(SIP/150)
; Goto() springt in einen anderen
; Context ([kantine])
;
exten => 3,1,Goto(kantine,100,1)
exten => i,1,Goto(30,2)
[kantine]
exten => 100,1,Background(kantine)
exten => 100,2,Background(silence/3)
exten => 100,3,Goto(1)
exten => 1,1,Playback(essensplan-diese-woche)
exten => 1,2,Wait(2)
exten => 1,3,Goto(1)
exten => 2,1,Playback(essensplan-naechste-woche)
exten => 2,2,Wait(2)
exten => 2,3,Goto(1)
; Bei einer Falscheingabe wird
; wieder in das Start-Menü
; gesprungen.
;
exten => i,1,Goto(beispiel-ivr,30,2)
Auch wenn es technisch möglich ist, beliebig tiefe
Verschachtelungen zu realisieren, so ist es in der Praxis ratsam, nicht
mehr als drei Ebenen an Menüs hintereinanderzuschalten. Viele Anrufer
legen nach der dritten Eingabe-Ebene auf.