Enumlookup

nicht schlecht - aber wie kann ich das Skript OHNE Angabe eines Nameservers aufrufen ? Ich habe die Probleme nämlich nicht und will deshalb keinen angeben.

Ich habe probiert:

1.) die Variable überhaupt nicht anzugeben -> es werden keine ENUM-Einträge geliefert
2.) die Variable mit "" (also leer) anzugeben -> es werden keine ENUM-Einträge geliefert

-- EDIT 03:52 Uhr --
gelöst !

-- dig "$NAMESERVER" (...)
++ dig $NAMESERVER (...)

Die Anführungszeichen weglassen - dann funktioniert zumindest die Sache mit dem "leeren" NAMESERVER

NAMESERVER=""

Kannst Du das bitte in Dein Skript noch einbauen ?
 
Die Anführungszeichen weglassen - dann funktioniert zumindest die Sache mit dem "leeren" NAMESERVER

Danke, so sollte es auch sein. Ich werds gleich ändern. Das sind so Sachen, die ich nicht testen kann, weil ich ohne Angabe eines Nameservers sowieso Probleme habe.
Bis zur Version 1.00 hab ich ja dann noch 92 Versuche. :)

Ich hab noch eine kleine Idee:
Die Ansage der tel-Nummer (bzw. Vorwahl) ist eigentlich nur dann von Interesse, wenn es eine andere Nummer ist, als die, die man angewählt hat. In vielen Fällen wird ein zurückgelieferter tel-Eintrag aber mit der angewählten Nummer identisch sein. Dann würde ein beep reichen und man wüsste, welche Kosten auf einen zukommen.
Ich werd das jedenfalls so in meinen Dialplan einbauen.

Nochwas: Jetzt ist es ja möglich, mehrere tel-Einträge zu definieren. Kann man das irgendwie im Dialplan so lösen, dass man nach Ansage des ersten tel-Eintrags noch die Möglichkeit hat, diesen zunächst abzuweisen und sich erstmal den nächsten tel-Eintrag anzuhören. Am besten noch so, dass man sich aussuchen kann, welche Nummer man wählen möchte, nachdem man alle tel-Einträge abgehört hat.
Geht das, oder muss da ein weiteres agi-Skript ran?

Ich hoffe, meine Fragen sind verständlich.
wrrdlbrrmpft
 
aha - Du hast gerade meine nächste Nachtschicht gebucht :D mal sehen, was sich machen läßt. Irgendwann brauchen wir doch noch die tel:-Variablen - damit wäredas alles ganz einfach.
 
Irgendwann brauchen wir doch noch die tel:-Variablen - damit wäredas alles ganz einfach.
Gut, sollst du bekommen.

[highlight=orange:29f538d2f5]EDIT: Version 0.09 ist oben.[/highlight:29f538d2f5]
 
Mal so nebenbei gefragt: Wie lange dauert es jetzt, bis ihr endlich mal ein Freizeichen hört???
 
hi
scheinbar bin ich blind! wo ist denn nun das file?
ich würde es gerne auch mal probieren... aber ich habe tomaten auf den augen... (für sehhilfe bin ich jederzeit dankbar!)

gruß
thorsten
 
einloggen, auf Seite 1 dieses Threads gehen und dort enumlookup-0.09.tar.gz herunterladen
 
Danke
und ich könnte SCHWÖREN dass es vorhin nicht da war!
Und eingeloggt sollte ich auch gewesen sein - dachte ich zumindest. vielleicht hat mein browser mir aber auch nicht die seite refreshed nach dem einloggen...
naja - meistens sitzt der fehler vor dem bildschirm...

danke.
cu
thorsten
 
hi
@allesOK: das enum-lookup geht sehr schnell - eine merkliche verzögrtung zur direktwahl ohne enum kann ich auf anhieb nicht feststellen

@entwickler: klasse scripte soweit!
ich habe alles fast unverändert übernehmen können. ich habe nur 2 änderungen für mich eingebaut: wenn ich keinen enum zurückbekomme springe ich direkt zum telefon-dial am ende - ohne beep und ohne ansage.
bei erfolgreichen enum-lookup habe ich BackGround(enum-lookup-successful)
vorgeschaltet - und nutze anstadt beep say digits - so muss ich die nummer mir nur anhören wenn enum eine tel-meldung zurückgibt.

eine grundsätzliche frage habe ich zu enum: wie nutzt ihr eigentlich die länderkennung? scheinbar kann mein isdn-provider 0049 nicht nach 0 auflösen und sagt mir "keine verbindung unter dieser vorwahl".
im augenblick mache ich das im asterisk dialplan indem ich 0 + enum-rufnummer ab 3. stelle wähle - grundsätzlich will ich aber ja genau das NICHT. es macht ja schon sinn internationale nummern auch mit enum wählen zu können.

beim schreiben fällt mir dabei auf: kann enum überhaupt schon sowas - z.b. eine USA-voip-nummer auflösen. reicht es dazu enum.conf mit den passenden namesevern zu versorgen?

gruß
thorsten
 
das Skript löst im Moment alle Adressen auf, die bei e164.arpa eingetragen sind - was in der enum.conf steht ist völlig egal.
 
und ich könnte SCHWÖREN dass es vorhin nicht da war!
Das kann durchaus sein, wenn du es gerade in dem Moment runterladen wolltest, als ich eine neue Version hochgeschoben habe.

Neu in Version 0.1.0:
1. Ein optionaler Nameserver wird nun direkt im Dialplan eingetragen, z. B. so:
Code:
exten => 50,1,SetVar(ENUMDNS=ns.portunity.de)
2. Wenn tel-Einträge separiert werden sollen, wird dies nun ebenfalls im Dialplan gelöst, z. B.:
Code:
exten => 50,2,SetVar(ENUMSEPARATETEL=TRUE)
Ich finde, das gehört in den Dialplan. So muss niemand mehr an enumlookup.agi "herumpfuschen". Meine Frage hierzu: Soll ENUMSEPARATETEL mit TRUE oder mit YES oder mit irgendwas anderem aktiviert werden? Zur Zeit funktioniert nur TRUE. Wie wird sowas sonst beim Asterisk gehandhabt?

Was ich noch ändern möchte:
Die temporären Dateien /tmp/enum, /tmp/enumdig und /tmp/enumtel sollen irgendwann mal verschwinden. Momentan möchte ich sie noch zum Debuggen behalten.

Ich bitte nochmals um ausführliche Tests und eventuelle Fehlerberichte.

@betateilchen: Wenn ENUMDNS nicht definiert wird, sollte dein Standard-Server befragt werden. Kannst du das bitte auch nochmal testen, also SetVar(ENUMDNS=irgendwas) im Dialplan einfach weglassen?

Danke!
wrrdlbrrmpft
 
ok - laß mich heute nacht damit basteln, dann kann ich Dir Deine Fragen beantworten.
 
@betateilchen: Du kannst auch gleich noch diese Version hier ausprobieren. Sie unterscheidet sich von Version 0.10 dadurch, dass sie ohne temporäre Dateien auskommt. Von der Funktion her sollte sie mit 0.10 identisch sein. Das bedeutet insbesondere, dass im Dialplan nichts geändert werden muss.

EDIT: Attachment gelöscht.
 
Mal so nebenbei gefragt: Wie lange dauert es jetzt, bis ihr endlich mal ein Freizeichen hört???

ohne enumlookup: etwa 4 Sekunden
mit enumlookup: etwa 4 Sekunden

EDIT: Ich hab das jetzt so gelöst, dass ich jede tel-Nummer während der Ansage akzeptieren (1 drücken) oder zurückweisen (9 drücken) kann:
Code:
exten => _50.,1,SetVar(ENUMEXTEN=49${EXTEN:2})
exten => _50.,2,SetVar(ENUMDNS=ns.portunity.de)
exten => _50.,3,SetVar(ENUMSEPARATETEL=FALSE)
exten => _50.,4,agi,enumlookup.agi
exten => _50.,5,GotoIf($[${ENUMENTRIES}]?6:51)

exten => _50.,6,SetVar(EINTRAG=1)
exten => _50.,7,Goto(11)

exten => _50.,11,GotoIf($[${ENUMENTRY${EINTRAG}:0:3} = IAX]?12:13)
exten => _50.,12,Macro(callwithvoip,IAX2/,,${ENUMENTRY${EINTRAG}:5},user)
exten => _50.,13,GotoIf($[${ENUMENTRY${EINTRAG}:0:3} = SIP]?14:15)
exten => _50.,14,Macro(callwithvoip,SIP/,peer/,${ENUMENTRY${EINTRAG}:4},user)
exten => _50.,15,GotoIf($[${ENUMENTRY${EINTRAG}:0:3} = tel]?16:100)
exten => _50.,16,SetVar(COUNT=6)
exten => _50.,17,BackGround(beep)
exten => _50.,18,BackGround(0)
exten => _50.,19,BackGround(${ENUMENTRY${EINTRAG}:${COUNT}:1})
exten => _50.,20,SetVar(COUNT=$[${COUNT} + 1])
exten => _50.,21,GotoIf($[${LEN(${ENUMENTRY${EINTRAG}})} - ${COUNT}]?19:16)

exten => _50.,51,Playback(beep)
exten => _50.,52,Macro(callwithvoip,SIP/,peer/,${EXTEN:1},user)

exten => _50.,100,SetVar(EINTRAG=$[${EINTRAG} + 1])
exten => _50.,101,GotoIf($[${EINTRAG} <= ${ENUMENTRIES}]?11:102)
exten => _50.,102,Hangup

exten => 1,1,Macro(callwithvoip,SIP/,peer/,0${ENUMENTRY${EINTRAG}:6},user)
exten => 9,1,Goto(_50.,100)

Man kann dann frei entscheiden, wie lange man sich die Ansage der Nummer anhören will. Man lasse sich nicht durch die Macro-Aufrufe verwirren. Diese rufen ihrerseits einfach nur Dial-Kommandos auf.
 
Ergebnisse der Tests:
[align=justify:9d05f307a0]
[hr:9d05f307a0]

Neu in Version 0.1.0:
1. Ein optionaler Nameserver wird nun direkt im Dialplan eingetragen, z. B. so:
Code:
exten => 50,1,SetVar(ENUMDNS=ns.portunity.de)

Da ich im Abschnitt [GLOBALS] schon die Variable ALLOWENUMTEL definiert habe, habe ich auch die Variabele ENUMDNS direkt dort definiert:

Code:
[globals]
ALLOWENUMTEL => 1
ENUMDNS => ns.portunity.de

@betateilchen: Wenn ENUMDNS nicht definiert wird, sollte dein Standard-Server befragt werden. Kannst du das bitte auch nochmal testen, also SetVar(ENUMDNS=irgendwas) im Dialplan einfach weglassen?

Funktioniert :D

[hr:9d05f307a0]

2. Wenn tel-Einträge separiert werden sollen, wird dies nun ebenfalls im Dialplan gelöst, z. B.:
Code:
exten => 50,2,SetVar(ENUMSEPARATETEL=TRUE)

Auch hier habe ich eine GLOBALE Variable eingesetzt - denn diese Einstellung wird sich normalerweise nicht kontextbezogen ändern. Eine Definition im Dialplan ist natürlich trotzdem alternativ möglich. Gleichzeitig habe ich in meinem Dialplan die Variable "ALLOWENUMTEL" in "ENUMALLOWTEL" umbenannt, um eine einheitlich Bezeichnungsweise (alle Variablen mit ENUM am Anfang beziehen sich auf das ENUM-Skript) sicherzustellen. Auch kann diese Variable jetzt der "Asterisk-Logik" entsprechend mit "yes" belegt werden.

Meine Frage hierzu: Soll ENUMSEPARATETEL mit TRUE oder mit YES oder mit irgendwas anderem aktiviert werden? Zur Zeit funktioniert nur TRUE. Wie wird sowas sonst beim Asterisk gehandhabt?

Normalerweise werden "Schalter" mit yes|no gesetzt - wobei Du im Skript entsprechen GROSS- und kleinschreibung berücksichtigen mußt !

Dahingehend habe ich das Skript mal für meine Testzwecke geändert und die globalen ENUM-Variablen sehen nun so aus:

Solange bei einer "Schalter-Variablen" nicht explizit "yes|YES" gesetzt ist, oder diese Variable nicht angegeben ist, soll Dein Skript "no" annehmen !

Code:
;in extensions.conf
[globals]
;ENUM-bezogene Variablen, die in der extensions.conf verwendet werden
ENUMALLOWTEL => yes ; yes|no
;ENUM-bezogene Variablen, die in enumlookup.agi verwendet werden
ENUMDNS => ns.portunity.de ; optional 
ENUMSEPARATETEL => no ; yes|no

So habe ich nun mal den Dialplan angepaßt - er bezieht sich jetzt auf die Einstellung ohne separate TEL: Einträge ! Getestet und funktioniert.

--- 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.
[hr:9d05f307a0]

Jetzt habe ich mal die Version 0.11 beta verwendet (Skript geändert auf Option ENUMSEPARATETEL=yes|no)

@betateilchen: Du kannst auch gleich noch diese Version hier ausprobieren.
Sie unterscheidet sich von Version 0.10 dadurch, dass sie ohne temporäre Dateien auskommt.
Von der Funktion her sollte sie mit 0.10 identisch sein. Das bedeutet insbesondere,
dass im Dialplan nichts geändert werden muss.

Funktioniert ohne Änderung des Dialplans in extensions.conf problemlos :D
[hr:9d05f307a0]

Nun sollte ich mal noch die ganze Sache mit der Option ENUMSEPARATETEL=yes testen ... (Blick auf die Uhr - oje)
Nagut, fangen wir mal an:

Ah - was mir da spontan als erstes auffällt:
Wenn die Option ENUMALLOWTEL auf "no" steht, kannst Du Dir die gesamte Abarbeitung der TEL: Einträge sparen :wink:
Vielleicht kannst Du diese Variable als "übergeordnet" betrachten:

ENUMALLOWTEL = no & ENUMSEPARATETEL = yes|no ==> Keine TEL-Einträge aus ENUM berücksichtigen !

Ok - erster Teil: Das Zurückliefern der TEL-Einträge in separaten Variablen funktioniert erstmal korrekt.

Ich hab noch eine kleine Idee:
Die Ansage der tel-Nummer (bzw. Vorwahl) ist eigentlich nur dann von Interesse,
wenn es eine andere Nummer ist, als die, die man angewählt hat.
In vielen Fällen wird ein zurückgelieferter tel-Eintrag aber mit der angewählten Nummer identisch sein.
Dann würde ein beep reichen und man wüsste, welche Kosten auf einen zukommen.
Ich werd das jedenfalls so in meinen Dialplan einbauen.

Nochwas: Jetzt ist es ja möglich, mehrere tel-Einträge zu definieren.
Kann man das irgendwie im Dialplan so lösen,
dass man nach Ansage des ersten tel-Eintrags noch die Möglichkeit hat,
diesen zunächst abzuweisen und sich erstmal den nächsten tel-Eintrag anzuhören.
Am besten noch so, dass man sich aussuchen kann, welche Nummer man wählen möchte,
nachdem man alle tel-Einträge abgehört hat.
Geht das, oder muss da ein weiteres agi-Skript ran?

Diese grundlegende Überarbeitung des Dialplans würde ich gerne auf nächste Nacht verschieben - das kriege ich jetzt einfach nicht mehr klar zusammen - bitte um Verständnis.

Grundsätzlich stellt sich dazu ja folgende Frage:

Wenn TEL: grundsätzlich zugelassen ist (ENUMALLOWTEL=yes) und (ENUMSEPARATETEL=no) dann werden die ENUM-Einträge ja in ihrer festgelegten Prioritätenreihenfolge abgearbeitet, und in diesem Fall macht ein "Springen" zum nächsten TEL: Eintrag keinen Sinn, da dadurch die festgelegte Reihenfolge durchbrochen wird.

Wenn TEL: grundsätzlich zu gelassen ist (ENUMALLOWTEL=yes) und (ENUMSEPARATETEOL=yes) dann werden die ENUM-Einträge in den Variablen"arrays" nach "nicht-TEL" und "TEL" in ihrer Priorität sortiert. Da man diese Eintragsgruppen dann komplett getrennt im Dialplan abarbeiten muß, ist zu hinterfragen, in welcher Reihenfolge die "Gruppen" berücksichtigt werden. Meine Denklogik geht dahin, zuerst die "nicht-TEL" abzuarbeiten und danach die "TEL" - gibt es dagegen irgenwelche Einwände ?

Vielleicht gibt es hierzu noch von anderen ein paar Gedanken - die werde ich dann ggf. im neuen Dialplan nächste Nacht berücksichtigen.

Das Skript ist richtig klasse :bier: alle Achtung !

Bis hierher - und nun Gute Nacht !
[/align:9d05f307a0]
 
Wenn die Option ENUMALLOWTEL auf "no" steht, kannst Du Dir die gesamte Abarbeitung der TEL: Einträge sparen
Diesen Parameter benutze ich gar nicht. Wenn ich keine tel-Einträge berücksichtigen will, lasse ich eine extension der Form
exten => ?,?,GotoIf(tel-Eintrag?)
einfach weg. Wenn die Schleife im Dialplan nur nach IAX und SIP sucht, werden tel-Einträge sowieso übersprungen. Braucht man diesen Parameter daher überhaupt? Wenn nicht, denke ich, dass er den Dialplan eher unübersichtlicher macht.
Wenn TEL: grundsätzlich zugelassen ist (ENUMALLOWTEL=yes) und (ENUMSEPARATETEL=no) dann werden die ENUM-Einträge ja in ihrer festgelegten Prioritätenreihenfolge abgearbeitet, und in diesem Fall macht ein "Springen" zum nächsten TEL: Eintrag keinen Sinn, da dadurch die festgelegte Reihenfolge durchbrochen wird.

Wenn TEL: grundsätzlich zu gelassen ist (ENUMALLOWTEL=yes) und (ENUMSEPARATETEOL=yes) dann werden die ENUM-Einträge in den Variablen"arrays" nach "nicht-TEL" und "TEL" in ihrer Priorität sortiert. Da man diese Eintragsgruppen dann komplett getrennt im Dialplan abarbeiten muß, ist zu hinterfragen, in welcher Reihenfolge die "Gruppen" berücksichtigt werden. Meine Denklogik geht dahin, zuerst die "nicht-TEL" abzuarbeiten und danach die "TEL" - gibt es dagegen irgenwelche Einwände ?
Seh ich genauso. Normalerweise sollte es in der Verantwortung des ENUM-Domain-Inhabers liegen, die Prioritäten richtig zu setzen. Nur, wird das in der Praxis auch funktionieren? Ich bin ja zunächst an möglichst kostenlosen Gesprächen interessiert und würde SIP und IAX deshalb lieber nehmen als TEL.
Andererseits kann es auch mal erwünscht sein, dass ein TEL-Eintrag Vorrang hat, z. B. wenn jemand sein SIP-Telefon nur auf Reisen benutzt.
Ich bin mir daher auch noch nicht ganz sicher, welche Dialplan-Version ich nehmen werde. Vielleicht werd ich auch eine Art Menü verwenden, wo man zwischen den einzelnen ENUM-Einträgen hin und her springen kann. Einen ersten Ansatz dafür hab ich ja in meiner vorigen Nachricht geliefert.

Version 0.11 wird freigegeben:
- ENUMSEPARATETEL wird nicht mehr über TRUE sondern über yes oder YES aktiviert.
- Es werden keine temporären Dateien mehr angelegt.
 
Mir fällt gerade auf, dass sich das Skrip evtl. sehr gut mit den "Line"-Select aus diesem meinen anderen Thread kombinieren lässt, so dass man bei der Wahl bewusst beeinflussen kann, wie es sich verhalten sollen.

(hab es Skript selbst noch nicht probiert, bin aber gespannt darauf es auszuprobieren)
 
@ Beta:

Eine kleine Erwähnung dieses Threads dort, weil doch Ursprung des Artikels, fänd ich nett, auch wenn es eine englischsprachige Seite ist. :mrgreen:
 
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.