[Frage] DND / DB Abfrage vor DialCommand

crasher-mike

Neuer User
Mitglied seit
1 Okt 2010
Beiträge
32
Punkte für Reaktionen
0
Punkte
0
Hallo, zur Zeit nutze ich beispielsweise folgende Einträge

Code:
exten => 1866,1,Dial(SIP/1866,25,r)
exten => 1866,n,Goto(sales,1)
exten => 1865,1,Dial(SIP/1865,25,r)
exten => 1865,n,Goto(sales,1)
exten => 1851,1,Dial(SIP/1851,25,r)
exten => 1851,n,Goto(sales,1)
exten => 1857,1,Dial(SIP/1857,25,r)
exten => 1857,n,Goto(sales,1)
exten => sales,1(sales),Dial(SIP/1866&SIP/1865&SIP/1851&SIP/1857)

Was mich daran stört ist, dass wenn einer der Teilnehmer DND aktiviert gleich der ganze Raum klingelt. Das wirkt einem ungestörten Arbeiten ja eher entgegen.

Daher habe ich (teilweise aus Codeschnipseln aus dem Netz) folgende Macros erstellt.

Das erste Macro erstellt über das Wählen einer Extension in der DB einen Eintrag mit DND/CALLERID(num) und dem Wert 1 beim aktivieren der DND Funktion, beziehungsweise löscht den Eintrag aus der DB beim Deaktivieren

[macro-DNDONOFF]
exten => s,1,GotoIf(${DB_EXISTS(DND/${CALLERID(num)})}?disable-dnd,1)
exten => s,n,Set(DB(DND/${CALLERID(num)})=1) ;There was no entry on AstDB, so We active your DND
exten => s,n,playback(do-not-disturb)
exten => s,n,playback(activated)
exten => s,n,hangup

exten => disable-dnd,1,DBdel(DND/${CALLERID(num)}) ; You are disabling your DND
exten => disable-dnd,n,playback(do-not-disturb)
exten => disable-dnd,n,playback(de-activated)
exten => disable-dnd,n,hangup


Wird nun ein Teilnehmer angerufen wird das folgende DialMacro ausgeführt, dass zuerst schaut ob ein Teilnehmer die DND Funktion aktiviert hat und ruft den Teilnehmer entweder an oder "soll dann nach einer Ansage alle Teilnehmer der Gruppe klingeln lassen die nicht DND aktiviert haben, wenn der Anrufer auch jemand anderes sprechen möchte" (da liegt der Hund begraben ;-)

[macro-DIALDND]
exten => s,1,GotoIf(${DB_EXISTS(DND/${ARG1})}?DND-ON,1);If DND entry exists on AstDB it means DND is ON
exten => s,n,Dial(SIP/${ARG1},25,t) ; DND is OFF, start dialing
exten => s,n,Goto(from-inside,${ARG2},1)

exten => DND-ON,1,Dial(SIP/${ARG1},3,t)
exten => DND-ON,n,Background(sorry&the-party-you-are-calling&has&activated&do-not-disturb&please-try-again-later&or&pls-stay-on-line&silence/5)
;exten => DND-ON,n,Goto(from-inside,${ARG2},1)

In den im Macro aufgeführten Zeilen
exten => s,n,Goto(from-inside,${ARG2},1)

springe ich dann im Beispiel für Sales in den Kontext
exten => sales,1(sales),Dial(SIP/1866&SIP/1865&SIP/1851&SIP/1857)

Damit werden nun wieder alle Teilnehmer angeklingelt, ungeachtet dessen, ob ein DND DB Eintrag gesetzt ist oder nicht. Wie kann ich das DialCOmmand denn so dynamisch aufbauen, dass Teilnehmer mit aktiviertem DND in der DB nicht mit angeklingelt werden ? Ginge das irgendwie mit Warteschlangen oder kann ich mir das dial cmd via DB Abfrage und regulärem Ausdruck dynamisch aufbauen ? Über einen Denkanstoß (je einfacher desto besser) würd ich mich freuen!
 
Zuletzt bearbeitet:
Ich glaube ich hab da einen Ansatz. Gibt es die Möglichkeit dem untenstehenden Dial Aufruf abhängig davon ob ein Eintrag in der DB existiert entweder ein SIP/0 oder SIP/${ARG1} zu übergeben ? Ggf. würde ich einfach mehrere dieser Aufrufe durch ein "&" verknüpfen und damit nur die Teilnehmer der Gruppe anklingeln die nicht auf DND stehen. Falls doch läuft der call auf einer Dummy Extension (bsp.0) auf.

Ein Beispiel und ich hoffe daraus geht hervor, worauf ich hinaus möchte :)

Dial(SIP/${DB_EXISTS(DND/${ARG1})}?0:${ARG1})
 
Zuletzt bearbeitet:
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.