.titleBar { margin-bottom: 5px!important; }

Feste Extensionlänge

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von talbotde, 28 Jan. 2009.

  1. talbotde

    talbotde Neuer User

    Registriert seit:
    28 Jan. 2009
    Beiträge:
    10
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    ich bin quasi blutiger Anfänger in Sachen asterisk.

    Ich nutze eine Linksys NSLU2 als embedded System um asterisk zu betreiben.

    Ich habe vor, das gerät als IVR System einzusetzen. Bisher funktioniert das auch soweit ganz gut. Ich habe mir bei sipgate.de eine Voip Nummer registriert. Die Software verbindet sich ordnungsgemäß mit dem SIP Server und nimmt anrufe entgegen. Die Navigation per Telefon funktioniert soweit auch schon.

    Allerdings sollen die Anrufer einen x-stelligen Code eingeben um an bestimmte Informationen zu gelangen.

    Zur Zeit löse ich das wie folgt:

    Code:
    [sipin]
    
    exten => sip-nummer,1,ringing
    exten => sip-nummer,2,wait(5)
    exten => sip-nummer,3,answer
    exten => sip-nummer,4,background(ACSwelcome)
    exten => sip-nummer,5,WaitExten(10)
    exten => i,1,Goto(wrong,s,1)
    exten => t,1,Goto(timeout,s,1)
    
    exten => 2222,1,Goto(hala2,s,1)
    
    Wenn die Anrufer jetz 2222 angeben kommen sie in den richtigen Bereich. Bei einer Fehleingabe kommt (bedingt durch die vorletzte Zeile von [sipin]) sofort eine Ansage, dass der Code nicht gültig ist.

    Mein Problem besteht nun darin, dass ich nicht möchte, dass falsche Codes beim ersten Zeichen als falsch angemäkelt werden. Denn so können Anrufer leicht richtige Codes durch wiederholtes Anrufen erraten.

    Gibt es eine Möglichkeit, die Länge von extensions festzulegen, so dass asterisk die eingegebene Extension erst dann prüft wenn sie fertig eingegeben ist? Oder kann man das System so konfigurieren, dass die Extensions bestätigt werden müssen? Z.b. das man einen Stern nach der Eingabe des Codes benutzt um die Eingabe abzusenden.

    Ich hoffe ihr versteht was ich meine und könnt mir weiterhelfen :)
     
  2. Thomas007

    Thomas007 Aktives Mitglied

    Registriert seit:
    18 Sep. 2005
    Beiträge:
    1,455
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
  3. talbotde

    talbotde Neuer User

    Registriert seit:
    28 Jan. 2009
    Beiträge:
    10
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ah. Cool. Danke!
     
  4. talbotde

    talbotde Neuer User

    Registriert seit:
    28 Jan. 2009
    Beiträge:
    10
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Okay noch eine andere Frage:

    Wie realisiere ich am geschicktesten eine case abfrage?

    Also Anrufer gibt Code 1 ein, springe nach A.
    Anrufer gibt Code 2 ein, springe nach B.
    Anrufer gibt Code 3 ein, springe nach C.
    Anrufer gibt ungültigen Code ein, springe nach Fehleransage.

    Und noch eine kleine Frage am Rande... Ich habe schon öfter gesehen, dass Variablen hinter einem Dollarzeichen in Klammern eingeschlossen gezeigt werden.
    also ${fooBar}. Gehe ich recht in der Annahme, dass das einfach nur den Variablenwert ausliest?
     
  5. talbotde

    talbotde Neuer User

    Registriert seit:
    28 Jan. 2009
    Beiträge:
    10
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hm. Ich habe mir jetzt überlegt das so zu machen:

    Code:
    exten => sipin-nummer,4,Read(digits|ACSwelcome|8)
    exten => sipin-nummer,5,GotoIf(${digits}="12345678"?hala2,s,1)
    exten => sipin-nummer,6,GotoIf(${digits}="87654321"?hala3,s,1:wrong,s,1)
    exten => t,1,Goto(timeout,s,1)
    
    So werden die If Abfragen durchlaufen und wenn der richtige Code dabei ist, wird der entsprechende Bereich angesprungen (verzeiht mir, mein Vokabular bzgl. Asterisk ist noch nicht so ausgeprägt).

    Wenn die letzte Abfrage falsch ist kommt eine Fehleransage.
    Ein Timeout gibt eine Timeoutansage aus.

    Das sollte doch so funktionieren. Nur sonderlich elegant finde ich das nicht.