Enumlookup

Mein "Das geht grundsätzlich" war auf die Rückrufgeschichte bezogen. Es gibt da nur das Problem, daß man, wenn man den Hörer - z.B. eines schnurlosen Telefones in der Hand hält, ohnehin nicht sieht, wenn eine Meldung kommt. Also wird man um den Rückruf nicht drumrumkommen, um die Aufmerksamkeit auf das Display zu lenken.
 
Alles klar. Das kann man mit einem callfile machen. Da ich momentan faul bin, warte ich mal einen Moment ab. Du wirst dein Ergebnis ja hier veröffentlichen, oder? :) Dann muss ich das nur noch ein wenig an meine Bedürfnisse anpassen.
 
ich habe bisher das Grundprinzip des Rückrufes noch nicht durchschaut - ich mache ein Hangup, dann setze ich die Textvariable zur Anzeige und wähle die Nebenstelle an. Aber wie mache ich dann den Anruf der externen Telefonnummer ?
 
OK, ich könnte in enumlookup.agi eine Funktion einbauen, die die call files erzeugt, z. B. so:
1. Man setzt im Dialplan eine Variable TELCALLFILE=YES
2. Dann wird enumlookup.agi ein zweites Mal aufgerufen, macht aber keine DNS-Abfrage, sondern erstellt einfach nur das callfile.
 
ok - CallFile erzeugen geht wieder über AGI - das ist wieder mal Dein Part :mrgreen:
 
nicht so schnell - was machst Du, wenn es mehrere TEL-Einträge gibt ?
Und außerdem muß Dein Skript berücksichtigen, von welcher Extension aus der Anruf kam, um auch dahin zurückzuverbinden.

Und dann ist da immernoch das Problem, daß ich zwar in der exten => h (nach dem Hangup) ein AGI aufrufen kann, aber noch keine Idee habe, wie ich dann im normalen Ablauf weitermache.

Ein zweites Skript, dem ich die Telefonnummer und die Nebenstelle übergeben könnte, wäre vielleicht besser geeignet. Vielleicht sogar noch, über welchen Channel (SIP/IAX oder was auch immer) der Anruf aufgebaut werden soll
 
Im Prinzip könnte ich auch ein zweites Skript schreiben. Ich dachte aber, ich erweitere das vorhandene einfach um eine Funktion. Es soll dann aus dem Dialplan immer nur ein tel-Eintrag an das Skript übergeben werden. Den Channel kann man ja aus ${CHANNEL} übernehmen.

Insgesamt sieht das dann so aus:
1. ${CHANNEL} wird in TELCHAN gespeichert.
2. ${CALLERIDNUM} wird in TELIDNUM gespeichert.
3. Dann kommt der beep zum Auflegen.
4. In ${{ENUMENTRY}$EINTRAG} steht noch der tel-Eintrag mit der höchsten Priorität.
5. Nun wird aus dem Dialplan mit exten => h enumlookup.agi aufgerufen, und da in $TELIDNUM ein Wert steht, wird keine ENUM-Abfrage gemacht, sondern ein Callfile mit TELIDNUM, TELCHAN und ${{ENUMENTRY}$EINTRAG} erzeugt.
6. Das Telefon $TELCHAN/$TELIDNUM klingelt. Man hebt ab, und in diesem Moment wird in einen outgoing-context gesprungen und die ${{ENUMENTRY}$EINTRAG} gewählt.
7. Wenn das fehlschlägt, kann man in die Schleife zurückspringen und den nächsten tel-Eintrag ausprobieren.

Sollte sich so eigentlich realisieren lassen.

P.S.: Man braucht also gar keine zusätzliche TELCALLFILE-Variable.
 
Das ist schon alles richtig.

Aber im Moment stehe ich vor der ungelösten Aufgabe, nach dem

exten => h,1,deadagi,enumlookup.agi

wieder an die ursprüngliche Stelle in der Schleife zurückzukommen. Außerdem würde der Dialplan auch nach dem "normalen" Auflegen (letzter Eintrag) in die extension h springen und das enumlookup nochmal ausführen.
 
Wo ist denn die Schwierigkeit, in die Schleife zurückzuspringen? Geht das nicht mit Goto? Man weiß doch genau, wo man hinspringen will. Man sollte dann vielleicht globale Variablen benutzen, da Channel-Variblen nach dem Auflegen möglicherweise unbrauchbar werden.

Außerdem würde der Dialplan auch nach dem "normalen" Auflegen (letzter Eintrag) in die extension h springen und das enumlookup nochmal ausführen.
Gut, dass du mich darauf aufmerksam gemacht hast. Ich denke, das kann ich im Skript abfangen. Ich hab aber erstmal lange grübeln müssen. Die Lösung sieht so aus:
Es wird zuerst überprüft, ob die übermittelte Nummer nicht gerade schonmal gewählt wurde (LASTCALL=X). Wenn ja, wird LASTCALL zurückgesetzt und das Skript beendet. Ansonsten wird das Callfile erzeugt und LASTCALL auf X gesetzt. X steht dabei für die TEL-Nummer. LASTCALL muss dann aber auch zu Beginn eines neuen Anrufs zurückgesetzt werden. Sonst kann man nicht zweimal hintereinander die gleiche Nummer anrufen.

Ich werd mir das heute Nacht in Ruhe erschlafen. Vielleicht kann ich das dann die nächsten Tage einbauen.
 
ich werde auch nochmal in Ruhe nachdenken - vielleicht fällt mir auch nochwas ein. Bevor Du irgendwas weiterprogrammierst, laß uns morgen abend mal Gedankenaustausch machen, wie es weitergeht.
 
So - jetzt habe ich grade mal noch 3 Stunden gebastelt. :bluescre:

Die Sache mit dem Rückruf sollten wir vergessen. :beerdigu:

Es ist einfach nicht möglich, nach einem Hangup noch einigermaßen ein kontrolliertes Abarbeiten innerhalb des Dialplanes - und schon gar nicht in einem Schleifenkonstrukt - sicherzustellen.

Bis hin zum Einsatz eines Perl-Skriptes, das den Anruf über die Manager-Schnittstelle des Asterisk initiiert, habe ich so ziemlich alles probiert.

Hinzu kommt als nächstes Problem die "Trägheit" vieler Telefone nach einem Hangup, was die "Display-Aktualisierung", also die erneute Anzeige einer neuen CallerIDNum, angeht.

Was mir als Möglichkeit noch eingefallen ist, wäre eine "VoiceMenü" gesteuerte Ausführung des Anrufes auf tel: nach dem Motto:

"Sie sind im Begriff, einen kostenpflichtigen Anruf durchzuführen. Bitte drücken Sie 1 um zu bestätigen, 2 um weitere ENUM-Einträge zu suchen, oder legen Sie einfach auf"

Falls Du noch andere Ideen hast - immer her damit.
Der Einsatz der h-Extension zur Schleifensteuerung ist jedenfalls nicht zu empfehlen.
 
Hinzu kommt als nächstes Problem die "Trägheit" vieler Telefone nach einem Hangup, was die "Display-Aktualisierung", also die erneute Anzeige einer neuen CallerIDNum, angeht.
Das ist schlecht.

Das VoiceMenü wäre für mich weniger interessant, bzw. es bringt mir in dieser Ausführung keinen Vorteil gegenüber einem einfachen beep. Eine Anzeige der Nummer wär eigentlich schon nicht schlecht. Ich werd mich mal etwas umsehen, ob es schon fertige Lösungen gibt, wie man unter Linux ein Punktmatrix-Modul ansteuern kann. Das ließe sich vielseitig verwenden, z. B. auch zur Anzeige meiner E-Mails, ohne dass ich meinen Arbeitsplatzrechner einschalten muss.
Das Modul würde ich einfach an die Telefonleitung hängen.

Das ist aber nix, was ich jetzt auf die Schnelle hinbekomme. Vorerst werd ich mir dann die ersten 5 Ziffern der Nummer ansagen lassen.
 
So, zwei Fehler hab ich noch entdeckt und bereinigt. Leider kann ich es momentan nicht testen, da die dig-Abfragen fehlschlagen, warum auch immer.
 
Sind das zufällig die Fehler, die falsche Einträge zurückliefern ?

SIP/[email protected]!
IAX2/[email protected]/123!

Das Ausrufezeichen am Ende gehört da nicht hin - der Fehler scheint aber nur in der Version 02 vorhanden zu sein.

DIG-Abfragen funktionieren bei mir problemlos.

-- EDIT --

ähm - wieso taucht der Fehler jetzt auch in der Version 01 auf ?
Ich bin der festen Überzeugung, daß ich schon mit SIP und IAX2 getestet habe und daß das funktioniert hatte.

:gruebel:
 
Nein, das sind andere Fehler. Kannst du mir mal deine dig-Abfrage posten? Die Nummern kannst du abändern.

EDIT: Mich interessieren auch nur die Zeilen mit den ENUM-Einträgen.
 
Hast Du hierfür eine Erklärung ?

1. Telefonnummer - sie hat einen IAX und einen SIP Eintrag (in dieser Reihenfolge)

Code:
    -- Executing NoOp("IAX2/77@77/3", "IAX2/[email protected]/123") in new stack
    -- Executing NoOp("IAX2/77@77/3", "SIP/[email protected]") in new stack
    -- Executing NoOp("IAX2/77@77/3", "") in new stack
    -- Executing NoOp("IAX2/77@77/3", "") in new stack
    -- Executing NoOp("IAX2/77@77/3", "") in new stack

beide Einträge werden korrekt zurückgeliefert

2. Telefonnummer - sie hat nur einen SIP Eintrag

Code:
    -- Executing NoOp("IAX2/77@77/6", "SIP/[email protected]!") in new stack
    -- Executing NoOp("IAX2/77@77/6", "") in new stack
    -- Executing NoOp("IAX2/77@77/6", "") in new stack
    -- Executing NoOp("IAX2/77@77/6", "") in new stack
    -- Executing NoOp("IAX2/77@77/6", "") in new stack

SIP Eintrag wird falsch zurückgegeben

3. Telefonnummer - sie hat nur einen IAX Eintrag

Code:
    -- Executing NoOp("IAX2/77@77/2", "IAX2/[email protected]/123") in new stack
    -- Executing NoOp("IAX2/77@77/2", "") in new stack
    -- Executing NoOp("IAX2/77@77/2", "") in new stack
    -- Executing NoOp("IAX2/77@77/2", "") in new stack
    -- Executing NoOp("IAX2/77@77/2", "") in new stack

IAX Eintrag wird richtig zurückgegeben - aber nur manchmal ...


Die DIG - Abfragen sind die aus Deinem Skript - ich verwende ja nix anderes.
 
Wenn ich mit
dig 1.2.3.4.5.6.e164.arpa ANY
eine Abfrage mache, sehen die Einträge bei mir immer folgendermaßen aus:
1.2.3.4.5.6.e164.arpa. 30M IN NAPTR 1 10 "u" "E2U+iax" "!^.*$!iax:[email protected]!" .
Mein Skript ist nun so ausgelegt, dass es das Ende des Eintrags anhand der Kombination
!" .
erkennt. Ich kann mit den ganzen Zeichen, außer der Priorität und der "Nummer" nicht viel anfangen. Also, wenn hier hinter der "Nummer" noch was anderes außer
!" .
kommt, dann funktioniert das Skript nicht richtig. Deshalb würde es mich interessieren, wie deine dig-Abfrage aussieht.
 
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.