Das Problem bei mehrstufigen IVRs ist, dass der Benutzer je nach
Menüstruktur mehrmals eine einstellige Zahl (evtl. 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 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 mit
Goto(). Nehmen wir an, Sie haben folgende
Soundfiles im Verzeichnis /var/lib/asterisk/sounds/
abgespeichert:
grundmenue.gsm
Bitte drücken Sie die 1 für den Verkauf, die 2 für den Hausmeister und die 3 für die Kantine.
kantine.gsm
Drücken Sie die 1 für den Essensplan dieser Woche und die 2 für den Essensplan der nächsten Woche.
essensplan-diese-woche.gsm
Montag gibt es Nudeln mit Tomatensoße, Dienstag gibt es Jägerschnitzel, ...
essensplan-naechste-woche.gsm
Montag gibt es Eintopf, Dienstag gibt es Jägerschnitzel, ...
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 Menue wird staendig 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-Menue ; gesprungen. ; exten => i,1,Goto(beispiel-ivr,30,2)