Mehrstellige DTMF-Zahlen als PIN-Abfrage möglich?

Hallo!

Zunächst: Ich bin neu bei MD und kenne mich nicht gut aus. Im Forum finde ich aber dennoch keine Antwort auf meine Frage.

Ich möchte erreichen, dass ein Anrufer auf seinem Telefon eine PIN eingeben muß, damit er zu einer IVR weitergeleitet wird, oder eben nicht.

Also:

  1. Externer Anrufer ruft an
  2. Text “Bitte Pin eingeben”
  3. Erkennen von 4 DTMF-Zahlen
  4. Text der IVR “Drücke 1 für…, 2 für…, 3 für…”
  5. Externes Script wird aufgerufen, PIN und IVR-Auswahl wird (z. B. als Parameter) mitgeteilt, ein Java-Programm wertet die Daten aus.
  6. Text “Anruf wurde verarbeitet” oder “Anruf wurde abgelehnt”
  7. Auflegen

Geht so etwas? Bin für jeden Hinweis dankbar!

Vielen Dank schon jetzt!

MarcFromD

Hallo MarcFormD,

erst mal willkommen in der Community. Das ist eine Standardfunktionalität kann aber durch ein Skript realisiert werden.

Dann machst Du unter “Erweitert > Skripte” ein neues Skript mit folgenden Einstellungen:

Bezeichnung: ivr
Kontext: ivr
Einbinden: nein
Durchwahl: 200

Damit ist Dein Skript unter 200 erreichbar. Hier mal ein Ansatz wie das gehen kann. Ist nicht komplett und aus dem Kopf. Sollte aber genügend Ansätze liefern:

exten => s,1,Answer ; Kanal beantworten
same => n,Playback(bitte-pin-eingeben) ; Ansage abspielen, musst Du vorher per Ansagesystem erstellen
same => n,Read(PIN,4) ; Pin mit 4 Stellen Abfragen und in Variable PIN speichern
same => n,GotoIf($ “${PIN}” = “1234” ]?ivr,1) ; Wenn der PIN 1234 ist dann weiter auf das ivr
same => n,Hangup ; ansonsten auflegen

exten => ivr,1,NoOp(IVR) ; Logzeile ausgeben, dass wir im IVR sind
same => n,PlayBack(duecke-1-2-3) ; Ansage abspielen, musst Du vorher per Ansagesystem erstellen
same => n,WaitExten(); Auf Duchwahl warten (1,2,3,…)

exten => _X,1,NoOp(Einstellige Taste gedrückt)
same => n,Set(TASTE=${EXTEN}); Taste in Variable EXTEN speichern
same => n,AGI(/opt/mein_tolles_java.jar ${EXTEN} ${PIN}) ; Ein JavaProgramm aufrufen und die Variablen übergeben. Dort drinnen Kanalvariablen setzen
same => n,GotoIf($ “${RETURN}” = “ok” ]?main,100,1) ; Wenn die zurückgegebene Kanalvariable den Wert ok hat dann nach z.B. nach intern 100 abwerfen
same => n,Hangup ; Sonst auflegen

Weitere Infos über die Befehle und Infos über Asterisk Skripting findest Du unter voip-info.org.

Alles über AGIs und Beispiele für JAVA findest Du dort auch.

Das Skript habe ich so nicht getestet. Du solltest auf der Asterisk CLI mitschauen wie das Skript abgearbeitet wird um evtl. Fehler zu erkenne. Siehe http://wiki.pascom.net/confluence/display/MD74DE/Zugriff+auf+MobyDick#ZugriffaufMobyDick-ZugriffaufdieAsteriskCLI

LG
Mathias

Genial. Mir wird meine Problemlösung mundgerecht serviert. Nur noch würzen muss ich…

Vielen Dank!

Gerne. Dient bestimmt auch anderen als Einstieg in das, wie ich finde recht nützliche, geskripte.

Viel Erfolg,
Mathias