[Gelöst]Problem mit Asterisk Datenbank (DBdel Befehl)

alfhh

Mitglied
Mitglied seit
5 Jan 2006
Beiträge
329
Punkte für Reaktionen
0
Punkte
0
Hallo,
ich hänge hier so ein wenig fest. Folgender Setup: Ich lasse mir von meiner Fritzbox im Büro meine ankommenden ISDN Anrufe über Voip auf meinen Asterisk (VServer) weiterleiten, anschließend auf mein Homebüro. Leider geht ja bei diesem Weiterleiten die Anrufernummer verloren, weil die Fritzbox das ja über einen weiteren VoipAccount laufen lässt. Nun habe ich für den Büroanschluss das Leistungsmerkmal Parallelruf. Ich leite also zusätzlich den Anruf über Parallelruf auf den Asterisk, über eine Voipnummer bei meinem Voipprovider. Diese Anrufe treffen nun ziemlich zeitgleich bei meinem Asterisk ein. Ich habe mir also einen Dialplan gebastelt der, wenn der Anruf über den Parallelruf eintrifft (mit der CallerID) die CallerID in eine Variable der Asterisk Datenbank schreibt, und dann einen Hangup macht. Parallel dazu trifft der Anruf von der Fritzbox ein, dort nehme ich mir dann die CallerID aus der Datenbank, und setze die CallerID des Anrufes neu. Ergebnis ist, das ich kostenlos weiterleite über die Fritzbox, und trotzdem die CallerID des Anrufers bekomme. Das funktioniert soweit auch schon. Hier nun das Problem. Ich möchte nachdem ich die CallerID gesetzt habe, den Wert aus der Datenbank löschen. Leider wird der DBdel Befehl nicht ausgeführt. Der Wert ist nach dem Durchlauf des Dialplans noch da. Funktionieren tut der Befehl, ich habe einfach mal eine interne Rufnummer eingerichtet, die nur den DBdel Befehl aufruft und dann einen Hangup macht. Dann ist der Wert weg.
Zweites Problem ist ähnlich. Wenn man mit DBget einen Wert aufruft,dort aber kein Eintrag/Wert in der Datenbank ist, wird auf +101 im Dialplan verzweigt. Das klappt bei mir auch nicht. Der Hintergrund ist, da die Anrufe über beide Accounts nur fast gleichzeitig kommen, wollte ich den Anruf der von der Fritzbox kommt in eine Schleife schicken, bis die CallerID über die andere Verbindung in die Datenbank geschrieben wurde. (Das ist am Ende auskommentiert, das DBget am Anfang habe ich rausgenommen) Im Moment warte ich einfach ein paar Sekunden.
Code:
exten => 413,1,wait,5
exten => 413,2,Set(CALLERID(number)=${DB(test/cid)})
exten => 413,3,NoOp(${CALLERID})
exten => 413,4,wait,2
exten => 413,5,DBdel(test/cid)      <<<<< Der Befehl wird nicht ausgeführt.
exten => 413,6,Dial,SIP/30|55|Ttr
;exten => 413,102,wait,1
;exten => 413,103,Goto(1)
Hiermit setze ich den Wert in der Datenbank:
Code:
exten => 4940xxxxxxx,1,Set(DB(test/cid)=${CALLERIDNUM})
exten => 4940xxxxxxx,n,hangup
Hiermit gelingt es problemlos den Wert zu löschen.
Code:
exten => 414,1,DBdel(test/cid)
exten => 414,2,hangup


Wichtig ist das die CallerID schnell gelöscht wird,weil sonst die Schleife am Anfang nicht funktionieren würde. Der nächste Anruf kann ja noch eintreffen während der andere noch läuft.
Hat jemand eine Idee was mit dem beiden Befehlen schiefläuft? Habe ich was übersehen?
Gruß
Alf aus HH
-----------------------
1. FRITZ!Box Fon WLAN 7050,1und1 6000/600,ISDN (Office)
2. Asterisk 1.2.1 auf Vserver
3. Grandstream BT100 an DLink 614+ mit Hansenet 2000/192 vom Nachbarn.(Home)
 
Zuletzt bearbeitet:

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
  1. Dein Beitrag ist furchtbar schlecht zu lesen. Bitte mache ein Leerzeichen nach dem Punkt am Satzende. Bitte ändere das in Deinem obigen Beitrag!
  2. kannst Du mal die Ausgabe der CLI posten?
 

alfhh

Mitglied
Mitglied seit
5 Jan 2006
Beiträge
329
Punkte für Reaktionen
0
Punkte
0
Sorry Beateilchen,
der Beitrag ist geändert. Sowas sollte man nicht, wenn man genervt ist, um Mitternacht schreiben. Jetzt stehe ich hier ein wenig wie ein Kasper. Nachdem ich drei Abende damit verbracht habe herauszufinden warum das nicht klappt, geht es jetzt. Im CLI waren allerdings keine Fehler zu entdecken. Es sah genau so aus wie jetzt auch. Allerdings sitze ich jetzt im Büro, und das Setup hat sich deswegen leicht geändert. Ich werde heute Abend das nocheinmal überprüfen. Dabei werde ich mich auch noch einmal an der Schleife versuchen, vielleicht klappt das jetzt ja auch.
Vielen Dank für deine schnelle Reaktion, und vielen Dank für deinen Kurs. Der hat mich echt weitergebracht.

Bye
Alf aus HH

-----------------------
1. FRITZ!Box Fon WLAN 7050,1und1 6000/600,ISDN (Office)
2. Asterisk 1.2.1 auf Vserver
3. Grandstream BT100 an DLink 614+ mit Hansenet 2000/192 vom Nachbarn.(Home)
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
Wenn Du wirklich mit Schleifen arbeiten willst, dann schau Dir doch mal extensions.ael an - die Datei findest Du normalerweise unter /etc/asterisk und da sind ein paar anschauliche Beispiele für Fallunterscheidung, Schleifen etc. enthalten. Du mußt ja nicht das Rad in der extensions.conf neu erfinden :wink:
 

alfhh

Mitglied
Mitglied seit
5 Jan 2006
Beiträge
329
Punkte für Reaktionen
0
Punkte
0
So, auch das Problem mit dem nicht funktionierenden Sprung nach n+101 ist gelöst. Der Befehl heißt jetzt "DBget". Das ist besonders für Leute (wie mich) interessant, die die Beispiele im Asterisk Buch "The Future of Telephony" als Anleitung verwenden. Da werden die Beispiele noch mit "Set" aufgeführt.
Mein Fehler mit der nicht gelöschten Variable lässt sich nicht mehr nachvollziehen, vermutlich lag das Problem zwischen meinen Ohren ;-)

Bye,
Alf aus HH