Rufumleitung mit astdb

konabi

Mitglied
Mitglied seit
11 Apr 2005
Beiträge
424
Punkte für Reaktionen
0
Punkte
16
Hallo,
ich habe mal hier im Forum nach einer Lösung für eine Rufumleitung gesucht
und ein schönes Beispiel von Betateilchen gefunden welches ich mir folgendermaßen angepasst habe:

Code:
[macro-sip]
exten => s,1,NoOp(Anruf)
exten => s,2,Set(NUM=${DB(umleitung/${ARG1})})
exten => s,3,GotoIf($[${NUM} =0]?6:4)
exten => s,4,Dial(SIP/${NUM},10)
exten => s,5,Hangup
exten => s,6,Dial(SIP/${ARG1},10)
exten => s,7,Hangup
 
[default]
exten => _5XX,1,MACRO(localsip,${EXTEN})
 
[rufumleitung]
;Rufumleitung an
exten => _100.,1,NoOp(Rufumleitung ein)
exten => _100.,n,DBput(umleitung/${CALLERIDNUM}=${EXTEN:3})
exten => _100.,n,Set(NUM=${DB(umleitung/${CALLERIDNUM})})
exten => _100.,n,SayNumber(${NUM})
exten => _100.,n,PlayBack(auth-thankyou)
exten => _100.,n,Hangup
 
;Rufumleitung aus
exten => 100,1,NoOp(Rufumleitung aus)
exten => 100,n,DBput(umleitung/${CALLERIDNUM}=0)
exten => 100,n,PlayBack(auth-thankyou)
exten => 100,n,Hangup

Wenn ich eine 100 gefolgt von einer Nummer wähle wird eine Rufumleitung zu der Rufnummer nach der 100 geschaltet.
Das ganze funktioniert so daß in der astdb ein Eintrag /umleitung/extension :umleitungsnummer durchgeführt wird.

Mit Anwahl der Rufnummer 100 wird die Rufumleitung rausgenommen indem der astdb eintrag /umleitung/extension den Wert 0 bekommt.

Einen Schönheitfleck hat das ganze:
Ich muß manuell für alle SIP Clients einen asdb Key umleitung/extension mit dem Wert 0 anlegen.

Wie kann ich das automatisieren?

Oder habt Ihr andere Lösungsvorschläge?

Danke Sven
 
Den Eintrag mit der 0 brauchst Du gar nicht. Du kannst doch einfach abfragen, ob es überhaupt einen Eintrag gibt.

Wenn ja -> umleiten an die eingetragene Nummer
Wenn nein -> keine Umleitung vorhanden.
 
Kannst Du mir die nötige Zeile posten?




exten => s,3,GotoIf($[!${NUM}]?...)

wird ja wahrscheinlich nicht gehen.


Danke

Sven
 
Zuletzt bearbeitet:
Code:
Return values
Always returns 0. If the requested key is not found, jumps to priority n+101 if available.
 
Stimmt ist auch eine Lösung.
Aber priorityjumping soll ja so langsam auslaufen, deswegen hatte ich eine andere Lösung angestrebt.

Danke für Deine Mühe.

Gruß Sven
 
konabi schrieb:
Stimmt ist auch eine Lösung.
Aber priorityjumping soll ja so langsam auslaufen, deswegen hatte ich eine andere Lösung angestrebt.

Dazu gibt bspw. DBGETSTATUS
Bsp (in AEL):
Code:
DBget(clipno=clip/${internalno});
 // clipno=${DB(clip/${internalno})}; // Fehler, wenn Wert in Datenbank nicht gefunden wird
NoOp(DB Status ${DBGETSTATUS});

if ("${DBGETSTATUS}" = "NOTFOUND") {
        clipno=${defclip};
};

Und dann gibt es da noch
Code:
${DB_RESULT}        Result value of DB_EXISTS() dial plan function
aus README.variables
(bezieht sich aber alles auf Asterisk 1.2.x)
 
[Grundsatzgedanken]

@cibi

Das ist natürlich völlig korrekt.

Aber - ehrlich gesagt - ich hatte vorhin einfach keine Lust, konabi mit der Nase auch noch DARAUF stoßen zu müssen. README Dateien sind eben dazu da, auch mal gelesen zu werden. Scheinbar ist es aber für Leute bequemer, erstmal zu fragen anstatt sich selbst durch die vorhandene Dokumentation zu wühlen.

Aber mal ehrlich - Du und ich haben das ja auch gemacht. Sonst wüßten wir das nicht. Wieso können andere das nicht auch mal machen ? Vor allem wenn es um solche immer wiederkehrende Grundlagenfragen geht.

[/GRUNDSATZGEDANKEN]

Nix für ungut.
 
@betateilchen

bevor ich in diesem Forum Fragen stelle, versuche ich schon passende Antworten z.B. auf voip-info.org zu finden.

Ich dachte auch der Sinn dieses Forums ist es, daß User anderen Usern helfen.

Für Dich ist das wahrscheinlich eine Grundsatzfrage, weil Du mehr Erfahrung mit dem Thema hast. Keine Frage, Dein Angagement hier im Forum ist sehr bemerkenswert, wenn man die Beiträge verfolgt. Du hast mir ja auch schon oft geholfen.

Readme's sind gut, aber ein deutsches Buch zu Asterisk wäre besser. Und genau daran arbeite ich. Leider sitzt mir die Zeit im Nacken, so daß ich zugegebenermaßen in letzter Zeit viele Fragen stelle....

Das eine oder ander Kapitel habe ich auch im WIKI bereit gestellt und ein paar weitere werden sicher folgen. Und wenn ich dann wieder mehr Zeit habe, kann ich mich auch hier im Forum besser engagieren.

Gruß Sven
 
Wenn Du schon die neue Syntax in Deinem Dialplan verwendest, und die Sache mit dem priorityjumping selbst hier ins Forum schreibst - dann hättest Du aber auch die Sache mit der Ergebnis-Abfrage bereits wissen können. Die gehört nämlich zum Thema priorityjumping und der damit verbundenen Frage, wie man solche Aufgaben ohne das jumping lösen kann.

Also nix für ungut, es war nicht böse gemeint - aber wenn man ein Buch schreibt, sollte man solche Grundlagen wissen. Oder wie willst Du mit Halbwissen ein vernünftiges Buch zusammenschreiben ?
 
@betateilchen

Der größte Vorteil ein Buch zu schreiben ist wirklich das Lernen dabei. Man ist halt gezwungen den Sachen genau auf den Grund zu gehen. Das Buch wird sich mehr an den Anfänger als an den Profi wenden. Das Thema Rufumleitung möchte ich als sinnvolles Beispiel zum nutzen der astdb verwenden. Dabei würde ich auch, wenn Du nix dagegen hast, angeben daß ich die Grundidee hier im Forum in einem Beitrag von Dir gefunden habe. Natürlich nur wenn Du nix dagegen hast.

Gruß Sven
 
Mit freundlicher Unterstützung von betateilchen und cibi... ;-)

Code:
   [macro-rufumleitung]
   exten => s,1,DBget(NUM=umleitung/${ARG1})
   exten => s,n,NoOP(DBGetStatus: ${DBGETSTATUS}
   exten => s,n,GotoIf($["${DBGETSTATUS}"  = "NOTFOUND"]?4:6)
   exten => s,n,Dial(SIP/${ARG1},10)
   exten => s,n,Hangup
   exten => s,n,Set(NUM=${DB(umleitung/${ARG1})})
   exten => s,n,Dial(SIP/${NUM},10)
   exten => s,n,Hangup
    
   [default]
   exten => _2X,1,macro(rufumleitung,${EXTEN})
   include => rufumleitung
    
   [rufumleitung]
   exten => _*3.,1,NoOp(Rufumleitung ein)
   exten => _*3.,n,DBput(umleitung/${CALLERIDNUM}=${EXTEN:2})
   exten => _*3.,n,Set(NUM=${DB(umleitung/${CALLERIDNUM})})
   exten => _*3.,n,Playback(rufuml_an)
   exten => _*3.,n,SayNumber(${NUM})
   exten => _*3.,n,Hangup
    
   exten => _*4,1,NoOp(Rufumleitung aus)
   exten => _*4,n,DBdel(umleitung/${CALLERIDNUM})
   exten => _*4,n,PlayBack(rufuml_aus)
   exten => _*4,n,Hangup
@betateilchen
was dagegen wenn ich deinen Namen als Grundidee für dieses Script im Buch erwähne?


Gruß Sven
 
konabi schrieb:
Mit freundlicher Unterstützung von betateilchen und cibi... ;-)
@betateilchen
was dagegen wenn ich deinen Namen als Grundidee für dieses Script im Buch erwähne?

Wenn Du in diesem Zusammenhang dann auch gleich einen Hinweis auf den Asterisk-Kurs hier im Forum mit in Dein Buch schreibst, ist das ok.
 
Das könnte dann so aussehen:

Die astdb Datenbank eignet sich beispielsweise um eine Rufumleitung über ein Telefon zu aktivieren. Schauen wir uns dazu folgendes Beispiel an. Die Grundidee zu diesem Script habe ich in einem Beitrag von „betateilchen“ auf http://www.ip-phone-forum.de gefunden und etwas abgeändert. Unter anderem bietet „betateilchen“ in diesem Forum auch einen Onlinekurs zur Konfiguration von Asterisk an.


Gruß Sven
 
Einmal betateilchen reicht:

konabi schrieb:
Die astdb Datenbank eignet sich beispielsweise um eine Rufumleitung über ein Telefon zu aktivieren. Schauen wir uns dazu folgendes Beispiel an. Die Grundidee zu diesem Script habe ich in einem Beitrag von „betateilchen“ auf http://www.ip-phone-forum.de gefunden und etwas abgeändert. In diesem Forum gibt es auch einen Onlinekurs zur schrittweisen Konfiguration eines Asterisk-Servers.
 
Zur Buch-Idee :

Mein alter Technologie-Prof. (selber Herausgeber von zahlreichen Lektüren die wahrscheinlich überall stehen aber nie jemand ernsthaft las) hat immer gesagt :


"Wenn Sie etwas und ich betone etwas über ein Thema wissen und merken das viele Fragen -- dann mit allem Nachdruck "Schreiben Sie ein Buch""


;-) Ohne weitere Worte ;-)

Grüsse, Stefan

P.S. : Ich hab noch keines geschrieben :grins:
 
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.