• Eigenständig gehostete oder lokal installierte Instanzen sind komplexer in der Einrichtung und Fehlerbehebung und erfordern daher kostenpflichtigen technischen Support. Kostenlosen Support erhalten Sie mit 3CX StartUP oder einer gehosteten 3CX-Installation mit einen unterstützten SIP-Trunk-Anbieter.

DND außerhalb der Geschäftszeiten autom. aktivieren

patrickb

Gold Partner
Advanced Certified
Mitglied seit
6. Februar 2021
Beiträge
756
Hi ich würde gerne wissen ob es möglich ist den Status aller Nebenstellen zu einer gewissen Tageszeit auf DND stellen zu lassen. Mit der alten Funktion "autom. während der Geschäftszeiten auf Verfügbar stellen" hätte ich es umgekehrt realisieren können. Jetzt bin ich leider überfragt.

Hatte schon an einen CFA Dialer gedacht der zu einer gewissen Tageszeit einen Call an eine CFA auslöst, die dann alle Stellen ausließt und den Status auf DND stellen lässt.
@fxbastler vllt. hast du da eine CallFlow Idee am Start?
 
Ich habe an sowas gedacht: Der Dialer wird jede 60 Sek ausgeführt. Wenn nicht zwischen 17:30 und 17:31 dann läuft der ins leere, Zwischen 17:30 und 17:31, loopt er einmal alle Durchwahlen (Loop = Wenn kleiner als 30) und setzt sie auf DND, danach müste er dann um 17:32 ja wieder ins leere laufen. Ich "missbrauche" den Dialer quasi als minütlich ausgeführten Cronjob...

Kann das funktionieren oder sinnfrei bzw. anders besser lösbar?

DND.PNG
 
Hallo,

das wird funktionieren. Man kann so einen Dialer (habe ich mich auch belehren lassen müssen, siehe letzter Satz der darauf folgenden Antwort) auch dafür missbrauchen und unendlich laufen lassen.

Die Frage die sich uns immer noch stellt und die viele Dinge vereinfachen könnte: wie startet man so einen initialen Anruf der dann die CFA / den Dialer startet? Die Anforderung ist: nach Neustart der 3CX, nach Neustart div. Dienste, zeitgesteuert und idealerweise auf einer Debian 3CX. Egal ob der Anruf an eine CFA die einen Dialer laufen lässt oder irgendwo anders hin geht (um sich z.B. so einen Dialer als cron Ersatz sparen zu können). Sipcmd oder Sip Simple Client waren bisher keine Lösungen. Wir wollen ja auch nicht die 3CX überfrachten und zu viel Fremdsoftware - welche die 3CX wiederum behindert - installieren / laufen lassen. Vielleicht hat da jemand eine Alternative.
 
Zuletzt bearbeitet:
Hallo,

das wird funktionieren. Man kann so einen Dialer (habe ich mich auch belehren lassen müssen, siehe letzter Satz der darauf folgenden Antwort) auch dafür missbrauchen und unendlich laufen lassen.

Die Frage die sich uns immer noch stellt und die viele Dinge vereinfachen könnte: wie startet man so einen initialen Anruf der dann die CFA / den Dialer startet? Die Anforderung ist: nach Neustart der 3CX, nach Neustart div. Dienste, zeitgesteuert und idealerweise auf einer Debian 3CX. Egal ob der Anruf an eine CFA die einen Dialer laufen lässt oder irgendwo anders hin geht (um sich z.B. so einen Dialer als cron Ersatz sparen zu können). Sipcmd oder Sip Simple Client waren bisher keine Lösungen. Wir wollen ja auch nicht die 3CX überfrachten und zu viel Fremdsoftware - welche die 3CX wiederum behindert - installieren / laufen lassen. Vielleicht hat da jemand eine Alternative.
Habs direkt auch mal getestet. Läuft. Ich muss nur checken wie ich eine Liste der im System verfügbaren DWs bekomme, da mir der Script abbricht, wenn eine DW zwischendrin nicht verfügbar ist.

Den Init-Call mache ich ganz easy. Baue ich in einen Callflow ein, wo die normalen Anrufe drauf auflaufen. Als Disconnect handler ein MakeCall auf die DW des Dialers die ich ihm vorher gegeben habe. Dann wird der auf jeden Fall 1 x am Tag gestartet. Eben sobald der erste Anruf kommt.

Man könnte noch eine SQL Abfrage bauen in eine DB die dann einen Parameter mit Zeitstempel setzt der dann nach 24h verfällt. So stellt man sicher das nicht zig mal der Dialer gestartet wird, sondern eben nur beim ersten Anruf des Tages.
 
Man könnte noch eine SQL Abfrage bauen in eine DB die dann einen Parameter mit Zeitstempel setzt der dann nach 24h verfällt. So stellt man sicher das nicht zig mal der Dialer gestartet wird, sondern eben nur beim ersten Anruf des Tages.
Dafür kann man auch einen eigenen 3CX internen Parameter setzen und mißbrauchen. Jede Schleife der CFA setzt die Variable entspr. der Uhrzeit (Sekunden GMT ab 1970, unixtime). Enthält die Variable ein zu neues Datum dann ist das ein Indiz dafür dass der Dialer bereits in einer anderen Instanz läuft und die neu gestartete Instanz darf sich beenden.
Den Init-Call mache ich ganz easy. Baue ich in einen Callflow ein, wo die normalen Anrufe drauf auflaufen. Als Disconnect handler ein MakeCall auf die DW des Dialers die ich ihm vorher gegeben habe. Dann wird der auf jeden Fall 1 x am Tag gestartet. Eben sobald der erste Anruf kommt.
Das deckt leider nicht alle Fälle ab. Es braucht immer irgendwo einen fremd initiierten Anruf.
 
Dafür kann man auch einen eigenen 3CX internen Parameter setzen und mißbrauchen. Jede Schleife der CFA setzt die Variable entspr. der Uhrzeit (Sekunden GMT ab 1970, unixtime). Enthält die Variable ein zu neues Datum dann ist das ein Indiz dafür dass der Dialer bereits in einer anderen Instanz läuft und die neu gestartete Instanz darf sich beenden.

Das deckt leider nicht alle Fälle ab. Es braucht immer irgendwo einen fremd initiierten Anruf.
Der ja reinkommt. Selbst wenn nur ein Call am Tag kommen würde wäre das der Init-Call. Kommt kein Call interessiert auch niemanden der Status. Oder sehe ich das falsch?
 
Kommt kein Call interessiert auch niemanden der Status.
Das weiss ich nicht. Das hängt von deinem Nutzungszenario ab.

Bei einigen der von uns angedachten Szenarien ist das keine Option. Zumal sehr viele Anrufe (jede DID) über eine CFA laufen müssten um das auslösen zu können. Ausgehende Anrufe mit Automatiken bleiben davon auch unbeeinflusst. So ein Dialer als cron Ersatz läuft dann nur sehr bedingt.

Aber wenn das dein Problem löst - gerne doch.
 
Das weiss ich nicht. Das hängt von deinem Nutzungszenario ab.

Bei einigen der von uns angedachten Szenarien ist das keine Option. Zumal sehr viele Anrufe (jede DID) über eine CFA laufen müssten um das auslösen zu können. Ausgehende Anrufe mit Automatiken bleiben davon auch unbeeinflusst. So ein Dialer als cron Ersatz läuft dann nur sehr bedingt.

Aber wenn das dein Problem löst - gerne doch.
Na schöner wärs natürlich mit nem Cron der das anstößt. Und sicherer auch.
Ne Parameterliste für die Systemvariablen die man mit C# abgreifen könnte wäre halt auch mal nice. Dann würde sich auch mein Problem der existierenden Nebenstellen lösen lassen ^^ - Keine Lust die alle einzeln einzutragen.
 
Für alle NSt.:
C#:
return string.Join(',', (PhoneSystem.Root.GetExtensions().OrderBy(x => x.Number).Select(x => x.Number).ToArray()));

Für alle aktuell registrierten Nebenstellen:
C#:
return string.Join(',', (PhoneSystem.Root.GetExtensions().Where( x => x.IsRegistered == true).OrderBy(x => x.Number).Select(x => x.Number).ToArray()));

Suchtags: callflow designer schnipsel
 
  • Like
Reaktionen: autohaus und patrickb
Für alle NSt.:
C#:
return string.Join(',', (PhoneSystem.Root.GetExtensions().OrderBy(x => x.Number).Select(x => x.Number).ToArray()));

Für alle aktuell registrierten Nebenstellen:
C#:
return string.Join(',', (PhoneSystem.Root.GetExtensions().Where( x => x.IsRegistered == true).OrderBy(x => x.Number).Select(x => x.Number).ToArray()));

Suchtags: callflow designer schnipsel
Gold wert deine Beiträge hier!

Wie kann ich mir alle Queue Extensions in einen String ausgeben lassen? Ich kriege es einfach nicht hin im CFD mit der GetQueueExtensions Funktion.

Ich brauche quasi einen String der mit die in einer Queue hinterlegten Nebenstellen im Format 10,11,12,13,14,15 usw. ausgibt.
 
damit ich sie dann einzeln ansprechen kann und den Status anpassen lassen kann.
 
Nur um sicherzugehen habe ich das eben probiert: es funktioniert wie beschrieben (iterieren mittels GET_LIST_ITEM von Element 0 bis GET_LIST_ITEM_COUNT).

Aber falls es dennoch etwas anders sein soll:
C#:
return string.Join(',', (PhoneSystem.Root.GetDNByNumber(qcnumber) as Queue).QueueAgents.Select(x => x.DNRef.Number).OrderBy(x => x).ToArray());
liefert alle Agenten der Warteschleife qcnumber (ein String) als kommaseparierten String zurück - egal ab angemeldet oder nicht.
 
Zuletzt bearbeitet:
Ich bin einfach zu doof dazu :/

Ziel ist das er mir die Queue Agents ausließt und dann für diese Nebenstellen DND setzt.

Ich bekomme das immer nur mit fixen Nebenstellen hin in einer C# Box. exists oder notexists habe ich eingebaut damit er nicht in einen Fehler läuft wenn eine Nebenstelle zwischendrin fehlt. Datetime ist drumherum, damit er mir das nur zu einer bestimmten Zeit setzen lässt.

12.PNG
 
Ich bin einfach zu doof dazu :/
Ganz sicher nicht.

Ich habe mir das im Bild noch nicht vollständig angeschaut geschweige denn versucht nachzuvollziehen warum das so ist wie es ist. Was ich auf den ersten Blick sehe: du arbeitest mit Zahlen, hier Integer. Das geht bei 3CX oft genug schief. Beinahe alle Variablen sind vom Typ string, insbes. auch die Nummern (der Nebenstellen). Falls du wissen willst wieso: alles sind intern DN. Eine Liste der DN gefällig? Hier:
C#:
return string.Join(',', (PhoneSystem.Root.GetDN().OrderBy(x => x.Number).Select(x => x.Number).ToArray()));
 
Die bekomme ich ja dank deiner Hilfe schon. Ich kriege nur den String dann nicht so hin das er mir für alle im String vorhandenen DNs das DND setzt.
 
ungetestet(!):
C#:
foreach(string strExt in (PhoneSystem.Root.GetDNByNumber(qcnumber) as Queue).QueueAgents.Select(x => x.DNRef.Number).ToArray()) {
    Extension ext = PhoneSystem.Root.GetDNByNumber(strExt) as Extension;
    ext.CurrentProfile = ext.FwdProfiles.Where(x => x.Name == "Out of office").First(); // Available, Away, Out of office, Custom 1, Custom 2
    ext.Save();
}

mach vorher ein Backup ;)

edit: getdnbynumber vergessen ...
edit2: kurz getestet, läuft nach Beheben eines Typo (as statt As), war halt freihändig
 
Zuletzt bearbeitet:
  • Like
Reaktionen: patrickb
Ich teste nachher mal aber das sieht schon vielversprechend aus. Ich checke ja schon nicht mal wo ich die ganzen Parameter der TK herbekomme ^^

Weil selbst mit aktiviertem DEVELOPMENT_DNTABLE_EXPOSE Parameter check ich null was da was ist :D
 
Weil selbst mit aktiviertem DEVELOPMENT_DNTABLE_EXPOSE Parameter check ich null was da was ist
Das ist schon mal sehr hilfreich (und brauchen wir ab und an) aber nutzt hier zu wenig. Die Schnipsel von weiter oben gehen alle etwas darüber hinaus.
 
Das ist schon mal sehr hilfreich (und brauchen wir ab und an) aber nutzt hier zu wenig. Die Schnipsel von weiter oben gehen alle etwas darüber hinaus.
ja deswegen :D Ich sitze gerade mit großen Augen vorm Rechner :D
 
Die letzte veröffentlichte API vor mehreren Jahren war die 3CXCallControlAPI_v15 . Das ist die grundlegende Dokumentation der API. Da sind Beispiele dabei ohne die man nicht weiter kommt. Das ist halt alles recht alt und inzwischen auch tlw. überholt. Wer sich etwas fischelant anstellt findet auch die aktuelle Version auf der dafür vertrauenswürdigsten aller vertrauenswürdigen Seiten. Der Rest ist langwieriges intensives Studieren der Beispiele und damit einhergehend der unergründlichen Tiefen der in sich selbst verlinkten API Dokumentation.
 
  • Like
Reaktionen: patrickb

Zurzeit aktive Besucher

Statistik des Forums

Themen
21.511
Beiträge
108.218
Mitglieder
70.726
Neuestes Mitglied
jim97
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 register cta
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.