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

Enumlookup

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von wrrdlbrrmpft, 24 Sep. 2004.

  1. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Da das EnumLookup von Asterisk nur den ersten Eintrag liefert, hab ich dieses Skript geschrieben.

    enumlookup.agi:
    EDIT: Die Datei gibt es jetzt als Anhang, siehe etwas weiter unten.

    Funktion: Das Skript sucht nach iax- und sip-Einträgen und speichert diese dann in IAXDIAL und SIPDIAL. Diese beiden Variabeln können dann im Dialplan genutzt werden, z. B.:

    Dial(${IAXDIAL}&${SIPDIAL},,T)

    [highlight=orange:822d431931]
    EDIT: Jetzt sollte es auch mit mehreren sip- und iax-Einträgen zurecht kommen.
    [/highlight:822d431931]

    EDIT: Die neueste Version gibt es hier:
    http://www.voip-info.org/tiki-index.php?page=Asterisk+and+multiple+ENUM+entries
     
  2. rollo

    rollo IPPF-Promi

    Registriert seit:
    5 Juli 2004
    Beiträge:
    8,281
    Zustimmungen:
    1
    Punkte für Erfolge:
    38
    Ort:
    JO30SK
    Erstmal vielen Dank für das script.

    Fragen:

    Wie werden Prioritäten bei mehreren SIP bzw. IAX Einträgen berücksichtigt?

    Ist das auf Abfragen nach 9.4.e164.arpa beschränkt (Bin kein RegExep freak)?

    Vorschlag:

    Erweiterung um tel und mail Einträge.

    jo
     
  3. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Da bin ich dran, noch etwas Geduld.
    Ja, aber das kann man sich so anpassen, wie man es braucht.
    tel und mail ist auch kein Problem. Ich hab tel zunächst bewusst rausgelassen, weil das evtl. teuer werden kann, wenn man nicht aufpasst. Bei Interesse werd ich das Skript weiterpflegen und ggf. erweitern, je nach Zeit und Lust.
     
  4. rollo

    rollo IPPF-Promi

    Registriert seit:
    5 Juli 2004
    Beiträge:
    8,281
    Zustimmungen:
    1
    Punkte für Erfolge:
    38
    Ort:
    JO30SK
    Ich freu' mich drauf!

    jo
     
  5. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    So, damit sollten die Einträge nach Priorität geordnet werden. Der ENUM-Wert mit Priorität 1 sollte dann in ENUMENTRY1, der mit Priorität n in ENUMENTRYn stehen. Das ist zur Zeit auf 999 ENUM-Einträge begrenzt :( . Das kann ich aber vermutlich schneller auf z. B. 999999 erweitern, als irgendjemand so viele ENUM-Einträge eingeben kann :) .
    Die Anzahl der verwertbaren ENUM-Einträge wird in ENUMENTRIES abgelegt.

    Noch ein paar Hinweise:

    1. Die Nummer muss in der Form LON an das Skript übergeben werden, wobei L für die Ländervorwahl, O für die Ortsvorwahl und N für die Nummer steht, also z. B. 4930123456 für die Berliner Nummer 123456.

    2. Wer außer iax und sip nochwas rausfiltern will, der kann im Skript nach egrep suchen und den Filter anpassen, z. B. so:
    | egrep 'iax|tel|mail' \

    Das würde die iax-, tel- und mail-Einträge heraussuchen, habs nicht getestet.

    enumlookup.agi:
    EDIT: Code entfernt, siehe Anhang etwas weiter unten.

    Fragen, Fehlerberichte und Verbesserungsvorschläge nehm ich gern entgegen.

    wrrdlbrrmpft
     
  6. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich hab noch einen Fehler eliminiert. Ich werd das jetzt als Anhang hier veröffentlichen. Sonst beschwert sich noch einer der Mods, dass ich hier bei jeder kleinen Änderung neue Skripte poste.

    Noch eine Änderung: Für die Übermittlung der Rufnummer ist ab sofort die Variable ENUMEXTEN zuständig. Das könnte also ungefähr so aussehen:

    in extensions.conf:
    Code:
    exten => _5.,1,Setvar(ENUMEXTEN=49${EXTEN:2})
    exten => _5.,2,agi,enumlookup.agi
    exten => _5.,3,Dial(${ENUMENTRY1},,T)
    exten => _5.,4,Dial(${ENUMENTRY2},,T)
    exten => _5.,5,Hangup
    
    wrrdlbrrmpft
     
  7. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Du kannst doch mittels "EDIT" Deine CODE-Blöcke in den vorhergegangen Postings einfach löschen :wink: dann steht hier immer nur die letzte Version des Skriptes im Thread.
     
  8. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Schon geschehen.
     
  9. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Tolle Sache - ich werde das in einer der nächsten Nächte mal ausgiebig testen. Wäre super, wenn wir für die Sache wirklich mal eine komplette Lösung hätten.

    :groesste:
     
  10. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Es wird nochmal kniffelig. Man kann im Dialplan eine Schleife programmieren, die nach und nach alle zurückgelieferten ENUM-Einträge untersucht und entsprechend abarbeitet. Die Schleife könnte z. B. zuerst alle Einträge nach IAX durchsuchen und bei Erfolg wählen. Ansonsten springt sie in diesem Fall in die Priorität 100 und legt auf. Sie könnte aber genausogut in eine weitere Schleife springen und nach SIP durchsuchen.

    in extensions.conf:
    Code:
    exten => _5.,1,Setvar(ENUMEXTEN=49${EXTEN:2})
    exten => _5.,2,Setvar(COUNTER=#)
    exten => _5.,3,agi,enumlookup.agi
    exten => _5.,4,GotoIf($[${ENUMENTRY${LEN(${COUNTER})}} = IAX]?5:6)
    exten => _5.,5,Dial(${ENUMENTRY${LEN(${COUNTER})}})
    exten => _5.,6,Setvar(COUNTER=#${COUNTER})
    exten => _5.,7,GotoIf($[${LEN(${COUNTER})} = ${ENUMENTRIES}]?100:4)
    exten => _5.,100,Hangup
    
    Ich habs noch nicht getestet. Bei diesen Verschachtelungen ist daher mit ziemlicher Sicherheit noch der eine oder andere Fehler drin. Aber bei genauem Hinsehen, wird das Prinzip klar sein. Ansonsten fragen!

    wrrdlbrrmpft
     
  11. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Verfasst am: Gestern um 17:49
    ich halte ein "Abtelefonieren" nach der in ENUM registrierten Priority-Reihenfolge für völlig ausreichend, weil damit jeder Nutzer die Möglichkeit hat, die Reihenfolge selbst vorzubestimmen.
    [hr:abb8edd5d0]
    Nach 3 Stunden erfolglosem Experimentieren ( bis ich endlich draufgekommen bin, daß auf meinem Server /dev/stdin und /dev/stdout nicht existierten :shock: ) kann ich nur sagen:


    :nemma: :bier: :groesste:

    :rosen: :rosen: :rosen: DAS IST EINFACH NUR GENIAL ! :rosen: :rosen: :rosen:
    Ein paar Feinheiten noch - aber das kriegen wir auch noch gelöst :wink: Jetzt gehe ich erstmal schlafen.
     
  12. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Guten Morgen !

    Ich habe mal meine EXTENSION.CONF ein bißchen umgebaut.
    Es ist nun möglich, mit Hilfe einer Vordefinierten Variablen ALLOWENUMTEL festzulegen, ob bei einer negativen ENUM-Abfrage, oder wenn auf den "kostenlosen" Einträgen niemand erreicht wurde, ein kostenpflichtiger Telefonanruf durchgeführt werden darf

    Was ich mir jetzt im Skript noch wünsche:

    - alle gefundenen tel: Einträge in Variablen ENUMTELENTRY1 - ENUMTELENTRYn
    - diese Einträge ebenfalls sortiert nach den im ENUM-Listung vorgegebenen Prioritäten
    - eine entsprechende Zählvariable ENUMTELENTRIES

    Dann ließe sich - falls erlaubt, auch noch eine Abarbeitung von gefundenen tel: Einträgen durchführen, falls diese erlaubt sind. Sie würden dann in einer ähnlichen Schleife wie für die SIP und IAX Anrufe ab extension => 11 abgearbeitet. Eine entsprechende Anpassung des Dialplans werde ich hier posten, sobald diese Variablen verfügbar sind.

    Ich gebe es gerne zu: ich bin ein Skript-Dummie :oops: deshalb will ich mich an dem tollen Skript nicht "vergreifen" um das selbst reinzubasteln.

    --- EDIT ---

    Die an die jeweils aktuelle Version des AGI angepaßten Dial-Plan-Vorschläge für die extensions.conf sind ab sofort hier zu finden.
     
  13. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo betateilchen,

    wie ich sehe, hast du die Möglichkeit gefunden, wie man Variablen als Integer deklariert. Danach hab ich Ewigkeiten gesucht und dann in letzter Not dieses elendige Konstrukt über ${LEN} gewählt. :lol:

    Habe eine neue Version mit tel und mail. Ich werde das oben in den sechsten Forumsbeitrag reinhängen. Hatte noch keine Zeit zum Testen.
    [highlight=orange:d7bb60434b]Bitte sendet Fehlerberichte![/highlight:d7bb60434b]

    In wie weit macht es Sinn, für tel eigene Variablen zu benutzen? Ich werde es wohl so machen, dass ich im ersten Anlauf alle Einträge in eine Schleife lege und dort nach IAX und SIP durchsuche. Sobald ein IAX- oder SIP-Eintrag gefunden wird, wird dieser angewählt. Dieser hat von allen IAX- und SIP-Einträgen die höchste Priorität. Schlägt das fehl, wird der mit der zweit höchsten Priorität genommen, usw. Schlagen alle IAX- und SIP-Einträge fehl, bzw. es gibt gar keine, wird in die nächste Schleife gesprungen und nach tel durchsucht. Wird tel gefunden, dann wird zunächst die Nummer angesagt und, wenn man nicht auflegt, angerufen. Als (vorerst) letzte Möglichkeit kann man schließlich noch eine Voicemail aufzeichnen und an die E-Mail-Adresse versenden.

    Alternativ:
    Die Schleife geht stur nach Prioritäten geordnet vor. Stößt sie auf einen tel-Eintrag, dann wird vorher die Nummer angesagt. Bei IAX und SIP kann direkt gewählt werden. Voicemail ist auch klar.

    Eine Notwendigkeit, tel-Einträge in gesonderten Variablen abzulegen, sehe ich zur Zeit nicht. Ich lasse mich aber gern eines Besseren belehren.

    wrrdlbrrmpft

    [highlight=orange:d7bb60434b]EDIT: Ich hab das Skript nun nach ganz oben geschoben, damit man nicht lange danach suchen muss.[/highlight:d7bb60434b]
     
  14. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    @w.... (das kann man nicht aussprechen, ohne zu spucken :wink:

    Das ist eigentlich ganz einfach:

    Setvar(VARIABLE=1); ordnet der Variablen den Integer-Wert 1 zu
    Setvar(VARIABLE=${VARIABLE} + 1); ordnet der Variablen den Integer-Wert VARIABLE+1 (=2) zu
    Setvar(VARIABLE=${VARIABLE}+1) ordnet der Variablen den verketteten String VARIABLE+ "+1" zu (= "1+1")

    Das entscheidende sind die Leerzeichen vor und nach dem Operator "+" !
     
  15. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Ok - es geht auch ohne separate Variablen für tel: Einträge :wink:
    Man muß ja ein Skript nicht unnötig aufblähen.
    Meine extensions.conf sieht jetzt so aus:

    --- EDIT ---

    Die an die jeweils aktuelle Version des AGI angepaßten Dial-Plan-Vorschläge für die extensions.conf sind ab sofort hier zu finden.
     
  16. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Genial, das kann ich ja fast direkt übernehmen. Statt Playback(beep) kann man wohl auch SayDigits(${ENUMENTRY${EINTRAG}:5}) nehmen, bzw. erst beep und dann SayDigits oder wie auch immer.
     
  17. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    ja - nur hat mir SayDigits zu lange gedauert, weil da i.d.R. 12 Stellen anzusagen sind - und die Dame ist nicht die schnellste.

    Und bevor jetzt wieder jemand schreibt "Du kannst auch SayNumber() nehmen" sei angemerkt, daß SayNumber nur bis 99.999.999 funktioniert, also erstens nur 8 Stellen und zweitens kommen da "merkwürdige" Ansagen raus, weil versucht wird, die Zahl in "Sprache" umzusetzen:
    Beispiel: 24 -> englische Soundfiles: "twenty four" (das paßt ja noch) -> deutsche Soundfiles: "zwanzig vier" :mrgreen:

    Den Dialplan habe ich gerade nochmal ergänzt (exten 33 + 34) - in der Abarbeitung der "mail"-Einträge hatte ich das Inkrementieren und Überprüfen auf weitere Einträge vergesssen. Naja, es war auch spät in der Nacht.
     
  18. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Mir würde es evtl. schon reichen, wenn ich mir nur die Vorwahl ansagen lasse.
    Man könnte das natürlich auch so realisieren, dass man erst einen beep hört. Dann legt man auf, das Telefon klingelt, und man sieht im Display die Nummer. Hebt man dann ab, wird die Verbindung gewählt. Noch besser wäre es natürlich, wenn man vom Asterisk via CLIP nach Lust und Laune Nummern an Telefone senden könnte. Aber das ist technisch wahrscheinlich nicht möglich, da die Endgeräte vermutlich nur während eines einkommenden Rufs auf CLIP-Nummern reagieren.
    Mit SendText könnte das vielleicht funktionieren, wenn die Endgeräte das unterstützen; meine leider nicht.
     
  19. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    SayDigits(${ENUMENTRY${EINTRAG}:0:4}) ; sagt die die ersten 4 Stellen an

    Vorsicht !


    Das geht grundsätzlich - daran arbeite ich gerade.
     
  20. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Du meinst, man kann sich auch, während man den Hörer in der Hand hält, via CLIP Nummern aufs Display schicken lassen? Wenn ja, gibts dafür einen Befehl?