[Problem] Kundennummerabfrage

tomsiewert

Neuer User
Mitglied seit
8 Feb 2015
Beiträge
29
Punkte für Reaktionen
0
Punkte
1
Guten Morgen,

derzeit stehe ich vor einem Problem, bei der Kundennummerabfrage.

Wenn man drei mal # drückt, wird man weitergeleitet. Das nächste Problem ist, wenn man die flasch eingegeben hat, muss man erstmal warten, bis die Datei fertig abgespielt ist.

Derzeit sieht es bei mir so aus:

Code:
exten => 1,1,Answer()
   same => 2,Read(KUNDENNUMMER,/var/lib/asterisk/moh/custom/1/kundennummer-abfrage,,,3)
   same => n,GotoIf($["${DB(customerids/${KUNDENNUMMER})}" = "${KUNDENNUMMER}"]?10:99)
   same => 10,GotoIf($["${DB(slacustomers/${KUNDENNUMMER})}" = "${KUNDENNUMMER}"]?20:11)
   same => 11,Playback(/var/lib/asterisk/moh/custom/1/bestandskunde-weiterleitung)
   same => n,Queue(bestandskunden,t)
   same => 20,Playback(/var/lib/asterisk/moh/custom/1/bestandskunde-weiterleitung)
   same => n,Queue(sla,t)
   same => 99,Playback(/var/lib/asterisk/moh/custom/1/fehler-kundennummer)
   same => n,Goto(customerservice,1,2)
   same => n,Hangup()

Hat wer eine andere Idee?

Mit freundlichen Grüßen
Tom S.
 
Moin

Antwortet sonst Niemand, dann versuch ich mich mal daran :D

Um dein Beispiel nachzuvollziehen hab ich es mal modifiziert...
Code:
exten => kunde,1(kundenservice),Answer(250)
same => n(getpin),Read(KUNDENNUMMER,conf-getpin,,,3)
same => n(databasepin),Set(PIN=${DB(customerids/${CALLERID(ani)})})
same => n(pinoutput),Verbose(PIN: ${PIN})
same => n(customerpin),GotoIf($["${PIN}" = "${KUNDENNUMMER}"]?checksla:error)
same => n(checksla),GotoIf($["${DB(slacustomers/${CALLERID(ani)})}" = "${KUNDENNUMMER}"]?customer:sla)
same => n(sla),Playback(auth-thankyou)
same => n(ani),Goto(osmc,300,1)
;same => n,Queue(bestandskunden,t)
same => n(customer),Playback(auth-thankyou)
same => n(zeit),Goto(osmc,200,1)
;same => n,Queue(sla,t)
same => n(error),Playback(auth-incorrect)
same => n(exit),Hangup()
...damit es hier funktioniert.

Die Queue() Anweisungen hab ich mal kommentiert und auf bei mir gültige Extensions verwiesen ( Label: ani und zeit ).
Den Anrufer identifiziere ich anhand seiner CALLERID(ani), mit der er auch in der Datenbank steht.
Mit Verbose() werden Ausgaben fürs Debuggen ausgegeben.
...und anhand von Prioritätsbezeichner wird gesprungen.
Diese Labels ermöglichen auch das Erkennen von "Was macht das eigentlich" in fünf Jahren.

Weiterleitung, nur bei richtig erfolgreicher Bedingungsprüfung
Außerdem ist es in diesem Fall nicht gut, wenn ein Datenbankeintrag nicht existiert, so eine lasche Prüfung auf einen String durchzuführen.
Was kommt denn dabei heraus, wenn "" mit "" verglichen wird ?
( Keine PIN Eingabe und kein Datenbankeintrag )
Genau dies: True
Deswegen eine numerische PIN ( Integer ) nicht auf String "" testen.
Und der Empfehlung folgen, zu testen, ob der Datenbankeintrag existiert.
Quelle: https://www.voip-info.org/wiki/view/Asterisk+func+db_exists
Da 0 oder 1 dabei rauskommt muss noch nicht mal mit irgendetwas verglichen werden.
Für obige Extension würde das so funktionieren...
Code:
same => n(databasepin),ExecIf($[${DB_EXISTS(customerids/${CALLERID(ani)})}]?Set(PIN=${DB_RESULT}):Goto(exit))
( Existiert kein Datenbankeintrag, wird direkt wieder aufgelegt )

Praktisch
Existiert der Datenbankeintrag, steht der Wert in ${DB_RESULT} und wird gleich der Variablen PIN zugewiesen.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.