Asterisk und Enum Preferences

Raffi

Neuer User
Mitglied seit
25 Jul 2004
Beiträge
179
Punkte für Reaktionen
0
Punkte
16
Guten Morgen,

angenommen ich habe folgende Enum Einträge:

7.6.5.4.3.2.1.4.4.9.4.e164.arpa. 86400 IN NAPTR 10 60 "u" "E2U+sms" "!^.*$!tel:+49.......!" .
7.6.5.4.3.2.1.4.4.9.4.e164.arpa. 86400 IN NAPTR 10 70 "u" "E2U+fax" "!^.*$!tel:+49.......!" .
7.6.5.4.3.2.1.4.4.9.4.e164.arpa. 86400 IN NAPTR 10 10 "u" "E2U+msg" "!^.*$!mailto:[email protected]!" .
7.6.5.4.3.2.1.4.4.9.4.e164.arpa. 86400 IN NAPTR 10 20 "u" "E2U+iax" "!^.*$!iax:[email protected]!" .
7.6.5.4.3.2.1.4.4.9.4.e164.arpa. 86400 IN NAPTR 10 30 "u" "E2U+sip" "!^.*$!sip:[email protected]!" .
7.6.5.4.3.2.1.4.4.9.4.e164.arpa. 86400 IN NAPTR 10 40 "u" "E2U+h323" "!^.*$!h323:[email protected]!" .
7.6.5.4.3.2.1.4.4.9.4.e164.arpa. 86400 IN NAPTR 10 50 "u" "E2U+tel" "!^.*$!tel:+49441234567!" .

Asterisk löst gegen Enum auf und nimmt sich den IAX, SIP, H323 oder TEL Eintrag. Der Preferenceswert scheint dabei völlig egal zu sein, da Asterisk offensichtlich den DNS in Round Robin Manier abfragt.

Bei Asterisk kann ich's nicht einstellen, deshalb die Frage: Nutz das Feld überhaupt jemand oder ist das rein akademischer Natur? Nach meinem Verständnis sollte das ungefähr so laufen wie bei dem MX Preferences Eintrag; oder hab ich da was nicht verstanden?

Danke und flotten tag noch.

Raffi
 
Asterisk nimmt derzeit den Eintrag, den es als erstes vom DNS-Server zurückgeliefert bekommt. Eigentlich sollte es erst alle nehmen und dann die Prioritäten beachten, aber soweit ich informiert bin wurde das bis dato noch nicht implementiert. (Weiss auch auswendig grade nicht, ob es überhaupt schon einen entsprechenden bug im bugtracker gibt).
 
Danke. Im Bugtraker ist es nicht drin.

Raffi
 
Hallo Raffi,
kannst du mal deinen Auszug der extensions posten?
Ich habe da im augenblick kein gutes Demo/template zur Hand.

Gruß
Thorsten.
 
hi
ich kriege immer ein "EnumLookUp Successfull" - also keine Fehlermeldung vom Enum-Befehl.
Meine num.conf
[general]
search => e164.org
search => e164.arpa
search => ns.portunity.de

mein auszug aus der extionsion ist:
exten => _1.,1,EnumLookup(49${EXTEN:2})
exten => _1.,2,BackGround(enum-lookup-successful)
exten => _1.,3,Dial(${ENUM})
exten => _1.,4,Goto(106)
exten => _1.,105,BackGround(enum-lookup-failed)
exten => _1.,105,Dial(CAPI/464480:b${EXTEN:1},,tT)
exten => _1.,106,hangup()


Ich kriege vom Enumlookup aber immer einen leeren string zurück.
Der Dial sieht auf der CLI so aus:
-- Executing Dial("SIP/24-a6bc", "") in new stack
Jul 29 20:24:47 WARNING[327698]: app_dial.c:495 dial_exec: Dial argument takes format (technology1/number1&technology2/number2...|optional timeout)

any hints?

noch ne frage: wie hast du denn die abrage gemacht deren output du oben gepostet hast? nslookup?

Gruß
Thortsen
 
thorsten.gehrig schrieb:
exten => _1.,1,EnumLookup(49${EXTEN:2})
..
exten => _1.,105,BackGround(enum-lookup-failed)
..

Aus der 105 mach mal eine 102. Dann klappert dat.

voip-info.org schrieb:
If the lookup was not successful and there exists a priority n + 101, then that priority will be taken next.


noch ne frage: wie hast du denn die abrage gemacht deren output du oben gepostet hast? nslookup?

Prompt:> dig 7.6.5.4.3.2.1.4.4.9.4.e164.arpa ANY für 0441-234567.

Flotten Abend noch.

Raffi
 
Hi
danke!
jetzt funktioniert mein enum-dialin - jetzt muss nur noch meine enum-registrierung klappen (die hängt derzeit).

gruß
thorsten
 
Hi
mal eine Frage an alle die enum-einträge haben:
über welchen provider habt ihr euren eintrag bekommen und wie sind die kosten dafür?

ich habe über www.portunity.net beantragt - aber leider kleine probleme beim "processing" des antrags... (kosten derzeit 0 ¤/Jahr)

gruß
thorsten
 
hi

imho bietet es nicht jeder der dort gelistet ist auch seinen kunden an....

gruß
thorsten
 
@thorsten.gehrig:

Die beiden enum-domains wurden am freitag vormittag nochmal nach Ihrem support-request angetriggert, wurden am 30.07.2004 12:05:01:
zur denic geschickt und sind am 30.07.2004 14:36:48 fertig durch gewesen (sollte von unserem Domainrobot auch mitgeteilt worden sein).

Bzgl. des Generals-Eintrages in der enum.conf reicht "search => e164.arpa", die "search => ns.portunity.de" ist nicht nur nicht nötig sondern technisch auch falsch (weil wir unter der Subdomain keine Telefonnummern weiter als Subdomain einrichten -> das hat nichts mit auf dem DNS-Server eingerichteten Zones zu tun !).

@all:

Wer mehr als einen Service-Eintrag aus einer ENUM-Zone per Asterisk in korrekter Reihenfolge auswerten und nacheinander anwählen will muß dazu "selbst hand anlegen" und darf nicht den integrierten ENUMLookup-Befehl verwenden.

"selbst hand anlegen" bedeuted hier ein kleines AGI-Script schreiben was per dig den Request selbst macht (wie oben bereits von jemanden geposted), auswertet und mehrere Variablen an Asterisk zurückgibt die dann per Goto entsprechend ausgewerted werden können (alternativ die Priorität verändert).

Wir haben dies in unserer Firmen-Asterisk erfolgreich implementiert, der Aufwand ist aber mit "nicht mal eben" zu beziffern und erfordert auch entsprechende Programmierkenntnisse.

Für's erste einfach Routing und für die ersten Gehversuche mit ENUM sollte der bestehende Lookup von Asterisk aber ausreichen. Ansonsten bleibt nur auf eine Erweiterung des bestehenden Asterisk-ENUMLookup-Cmds zu hoffen.

Björn Rücker
 
HI
ich habe folgendes festgestellt:
wenn Asterisk einen ENUM-Lookup macht - und die Antwort auf ein SIP-Ziel zeigt meldet Asterisk "Enum Lookup successfull" und wählt.
wenn die ENUM-Antwort eine TEL-Antwort beinhaltet sagt asterisk "Enum Lookup failed" - obwohl die variable ENUM gesetzt ist (mit dem richtigen ergebniss).
-> Das ist eigentlich doch ein Fehler! (oder?)

Erschwerend kommt hinzu dass (bekannerweisse) Asterisk die Prioritäten nicht berücksichtigt - wenn man nun also einen TEL und einen SIP eintrag hat (SIP = 1 Prio, TEL = 2 prio) dann kommt es immer mal zu successfull und zu failed ... je nachdem wie Asterisk gerade will...

Naja - zumindest wird dadurch teures 0900-er umleiten (als ENUM eintrag) auch unmöglich...

Gruß
Thorsten
 
Eigentlich sollte Asterisk auch Tel-URIs berücksichtigen; wobei zu berücksichtigen ist, dass die Priorität in diesem Fall um 51 erhöht wird. (sonst wird normal weitergerechnet)

Was es jetzt mit dieser Fehlermeldung auf sich hat, weiss ich auch nicht.

Gut, das Problem, dass Asterisk nicht die Prioritäten berücksichtigt sondern das nimmt, was das DNS als erstes zurückliefert ist ein bekannter Bug.
 
Hi
das mit dem erhöhen um 51 hab ich im WIKI nicht gefunden - sollte vielleicht mal ergänzt werden (vielleicht mache ich das - nachdem ich es getestet habe).

ist natürlich sehr sehr hilfreich um wirklich teure umleitungen auf 0900 zumindest abzufangen oder per ansage einen hinweiß auszugeben...
(BTW: gibt es einen befehl der einem die nummer "vorliest" - ohne festival?)
EDIT: gefunden: saydigits(${ENUM}) sollte gehen...

gruß
thorsten
 
Ziffer für ziffer geht das mit SayDigits, als ganze Zahl mit SayNumber.
 
portunity.net schrieb:
"selbst hand anlegen" bedeuted hier ein kleines AGI-Script schreiben was per dig den Request selbst macht (wie oben bereits von jemanden geposted), auswertet und mehrere Variablen an Asterisk zurückgibt die dann per Goto entsprechend ausgewerted werden können (alternativ die Priorität verändert).

Wir haben dies in unserer Firmen-Asterisk erfolgreich implementiert, der Aufwand ist aber mit "nicht mal eben" zu beziffern und erfordert auch entsprechende Programmierkenntnisse.

Warum kann dieses "kleine AGI-Script" nicht einfach mal hier - im Interesse der Allgemeinheit - veröffentlicht werden ?
:roll:
 
betateilchen schrieb:
...

Warum kann dieses "kleine AGI-Script" nicht einfach mal hier - im Interesse der Allgemeinheit - veröffentlicht werden ?
:roll:

Gute Idee, das hätte ich auch gern. :)
 
So.
Nachdem keiner die Lösung des "multiplen ENUM" verraten will, habe ich mir mal einige Zeit den Kopf zerbrochen, wie man das Lösen könnte.
Der entscheidende Tipp kam von PURtel.com : "Frag doch mal ENUMLOOKUP mehrmals hintereinander ab !"

Danke Volker !

:groesste:

Zuerst wußte ich nicht so recht, was er damit meint, und ich weiß auch immer noch nicht, wie PURtel selbst das löst.

Also hab ich experimentiert und mir - McGuyver-mäßig aus einer Kugelschreibermine und einem Bindfaden - selbst etwas gebastelt.

Und siehe da - wie allseits bekannt ist, kann man nicht vorhersagen, WELCHER Eintrag zurückgeliefert wird. Aber die Wahrscheinlichkeit, verschiedene Einträge zurückzubekommen, wächst natürlich mit der Anzahl der ENUM-Abfragen auf die gleiche Rufnummer.

Daraus habe ich mir einfach mal einen Kontext für meine EXTENSIONS.CONF gebastelt, der insgesamt 5 Mal einen Lookup auf die gewählte Rufnummer macht.

Ich hoffe, das Ganze ist weitgehend selbsterklärend - zumindest habe ich versucht, das entsprechend zu kommentieren.

Bestimmt läßt sich das Problem auch eleganter lösen - aber so wie hier beschrieben, funktioniert es ohne jegliches Skript - einfach mit Funktionen, die * für den Dialplan mitbringt.

Sieht nicht "schön" aus - aber es funktioniert

Nun sind die Skript-Spezialisten

http://www.ip-phone-forum.de/forum/viewtopic.php?p=34408#34408

gefordert - vielleicht kann diese Logik ja jemand in eine "professionelle" Verpackung einhüllen.

Code:
[enum]
;
; es werden nur SIP und IAX Einträge berücksichtigt
; TEL Einträge werden zwischengespeichert und als "letze Möglichkeit" gewählt,
; oder wenn gar kein ENUM-Eintrag vorhanden ist ( extension => 102 )
; ACHTUNG: Risiko der unbemerkten kostenpflichtigen Weiterleitung
; auf Mehrwertnummern möglich !
;
; 1. Versuch
exten => _**., 1,EnumLookup(49${EXTEN:3})
; wenn erfolglos geht es direkt nach 102 - eine Funktion von app_enumlookup
; wenn TEL Eintrag geht es direkt nach 52 - auch eine Funktion von app_enumlookup
exten => _**., 2,setvar(EN1=${ENUM}) ; ersten Eintrag sichern für spätere Vergleiche
exten => _**., 3,GotoIf($[$[${ENUM:0:3} = SIP] | $[${ENUM:0:3} = IAX]]?4:5) ; nur SIP oder IAX verwenden
exten => _**., 4,Dial(${ENUM},10,r)

; 2. Versuch
exten => _**., 5,EnumLookup(49${EXTEN:3})
exten => _**., 6,setvar(EN2=${ENUM}) ; 2. Eintrag sichern
exten => _**., 7,GotoIf($[$[${ENUM:0:3} = SIP] | $[${ENUM:0:3} = IAX]]?8:10)
exten => _**., 8,GotoIf($[${EN2} != ${EN1}]?9:10) ; vergleichen, ob wir den Eintrag schon hatten
exten => _**., 9,Dial(${ENUM},10,r)

; 3. Versuch
exten => _**.,10,EnumLookup(49${EXTEN:3})
exten => _**.,11,setvar(EN3=${ENUM}) ; 3. Eintrag sichern
exten => _**.,12,GotoIf($[$[${ENUM:0:3} = SIP] | $[${ENUM:0:3} = IAX]]?13:15)
exten => _**.,13,GotoIf($[$[${EN3} != ${EN1}] & $[${EN3} != ${EN2}]]?14:15)
exten => _**.,14,Dial(${ENUM},10,r)

; 4. Versuch
exten => _**.,15,EnumLookup(49${EXTEN:3})
exten => _**.,16,setvar(EN4=${ENUM}) ; 4. Eintrag sichern
exten => _**.,17,GotoIf($[$[${ENUM:0:3} = SIP] | $[${ENUM:0:3} = IAX]]?18:20)
exten => _**.,18,GotoIf($[$[${EN4} != ${EN1}] & $[${EN4} != ${EN2}] & $[${EN4} != ${EN3}]]?19:20)
exten => _**.,19,Dial(${ENUM},10,r)

; 5. Versuch
;
; wenn der 5. Versuch keinen neuen SIP oder IAX Eintrag gibt es zwei Möglichkeiten
; exten 26 = Auflegen
; anstatt aufzulegen, kann eine optionale Prüfung auf TEL-Eintrag erfolgen
; dazu müssen beide Sprunadressen in den GotoIf von 26 auf 30 geändert werden
;
exten => _**.,20,EnumLookup(49${EXTEN:3})
exten => _**.,21,setvar(EN5=${ENUM}) ; 5. Eintrag sichern
exten => _**.,22,GotoIf($[$[${ENUM:0:3} = SIP] | $[${ENUM:0:3} = IAX]]?23:26) ; bei
exten => _**.,23,GotoIf($[$[${EN5} != ${EN1}] & $[${EN5} != ${EN2}] & $[${EN5} != ${EN3}] & $[${EN5} != ${EN4}]]?24:26)
exten => _**.,24,Dial(${ENUM},10,r)
;exten => _**.,25,Goto,30 ; als Option: zwangsweise auf TEL-Eintrag prüfen
exten => _**.,26,Hangup

; prüfen ob zwischenzeitlich ein TEL Eintrag gefunden wurde
; Wenn ja - kostenpflichtig wählen
; Wenn nein - auflegen
exten => _**.,30,GotoIf($[${ENTEL}]?31:32)
exten => _**.,31,Dial(SIP/0${ENTEL:2}@providerxy,30,r)
exten => _**.,32,Hangup


; falls TEL-Eintrag gefunden wird, wird dieser in der Variablen ENTEL gespeichert
; und der nächste ENUM-Lookup durchgeführt
; sollten mehrere TEL-Einträge gefunden werden, wird nur der letzte gefundene gespeichert.
exten => _**.,52,setvar(ENTEL=${ENUM})
exten => _**.,53,Goto,5
exten => _**.,56,setvar(ENTEL=${ENUM})
exten => _**.,57,Goto,10
exten => _**.,61,setvar(ENTEL=${ENUM})
exten => _**.,62,Goto,15
exten => _**.,66,setvar(ENTEL=${ENUM})
exten => _**.,67,Goto,20
exten => _**.,71,setvar(ENTEL=${ENUM})
exten => _**.,72,Goto,31

; falls überhaupt kein ENUM-Eintrag existiert, wird die Nummer kostenpflichtig gewählt.
exten => _**.,102,Dial(SIP/${EXTEN:2}@providerxy,30,r)
exten => _**.,103,Hangup
 
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.