CFD CallsWaiting & MAXCALLERSINQUEUE

voipsonic-graz

Forum User
Basic Certified
Mitglied seit
19. November 2022
Beiträge
132
Hallo,

ich stehe vor folgendem Problem und weiß nicht mehr weiter:

Ich habe einen CFD, der Anhand eines Nebenstellenstatus prüft, ob Available, Away usw.. Soweit funktioniert auch alles, nur ein Punkt nicht.

"Create a Condition"
Transfer: Soll eine Warteschleife abfragen, wenn weniger Anrufer als MAXCALLERSINQUEUE in der WS sind, dann soll auf "Transfer geleitet werden, ansonsten wenn mehr oder gleich MAXCALLERSINQUEUE, dann Abwurf.

1694884075470.png

1694884123418.png

Ich weiß, das ist über eine normale WS einfach zu lösen, aber für mein Scenario leider nicht zu gebrauchen.
Hintergrund: PBX bei einem Arzt mit extremen Anrufaufkommen eingehend. Der Arzt hat 4SC. Davon soll so gut wie immer mind. 1 Leitung frei bleiben. (würde noch über eine WS funktionieren).
Nun das aber: Da der Arzt selbst seine Unternehmensbegrüßung aufsprechen kann und dies ca. 6-8 Sekunden oft dauert, kann ich das nicht bei "Begrüßung vor Weiterleitung" einfügen, die Warteschleifenmusik mit bestimmten Text abspielen und noch die Warteposition mitteilen. Denn: Würde man jetzt zB. 10 Sekunden aufsprechen, würde sich dann die Musik mit Text mit der Warteposition irgendwann mal überschneiden (ich hoffe man versteht was ich meine).

Aus diesem Grund ist mein Plan, den Anrufer (wenn mehr als zB 2 bereits in der WS sind, gleich via CFD rauszuwerfen, ohne dass diese die Begrüßung zu hören bekommen (es soll also gleich ein Besetzt kommen). Dies würde nur im Millisekunden-Bereich eine Leitung blockieren.

Die ganze CFA arbeitet mit globale Parameter.

Kann mir bitte jemand sagen, was ich bei der Condition unter "Transfer" und "Abwurf" korrekt einstellen muss?

Besten Dank
 
Du musst den Abwurf anpassen. Lass ihn einfach ohne Funktion und bau dir im Transfer direkt die GREAT_THAN_OR_EQUAL aus dem Abwurf rein. Sonst wird im Fall das mehr als lMAXCALLSINQUEUE warten, ein Fehler provoziert weil es ja keinen "Block" gibt der true ergibt in dem die CFA weiterlaufen kann.

Zudem solltest du noch eine Abfrage einbauen die sicherstellt das mindestens ein Agent online ist. Hier bietet sich dann GET_LIST_ITEM_COUNT an um die Zahl der Logged In Extensions als Rückgabewert zu erhalten und zu prüfen nachdem du dir die Liste über den Block "Get Queue Extension Status" geholt hast.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: voipsonic-graz
Danke für die Hilfe.
 
  • Like
Reaktionen: patrickb
Hallo,

wie @patrickb schreibt: es muss in diesem Fall nur der linke Condition Block mit einer Bedingung versehen werden. Merke: alle Conditions ausser dem letzten rechts (man kann deren Reihenfolge jederzeit per Drag'n-Drop ändern) müssen eine Bedingung aufweisen. Der letzte muss das nicht unbedingt. Der wird dann immer ausgeführt falls alle anderen fehlschlagen.

Wenn ich die Aufgabenstellung
Der Arzt hat 4SC. Davon soll so gut wie immer mind. 1 Leitung frei bleiben.
richtig lese, dann sind die bisherigen Antworten suboptimal. Mag sein ich interpretiere das falsch, aber entscheidend ist meiner Meinung nach nicht, wieviele Anrufe gerade in der WS warten, sondern wieviele SC der Anlage noch frei sind. Eine direkte Antwort dafür habe ich nicht, aber man kann die Anzahl der aktiven Gespräche der Anlage ermitteln:
C#:
return PhoneSystem.Root.GetActiveConnectionsByCallID().Count;
So lange auf Grund der verwendeten Lizenz die Anzahl SC bekannt ist sollte das reichen, um festzustellen, ob bei einem eingehenden Anruf noch eine SC frei ist.

Sicher kann man die Lizenz und die max. SC irgendwo per CFD abfragen, da müsste ich aber erst suchen. Ich denke, o.g. Schnipsel reicht euch.
 
Das ist natürlich noch nicer es direkt so zu lösen @fxbastler
 
  • Like
Reaktionen: MarcosV__3CX
C#:
return PhoneSystem.Root.GetActiveConnectionsByCallID().Count;
So lange auf Grund der verwendeten Lizenz die Anzahl SC bekannt ist sollte das reichen, um festzustellen, ob bei einem eingehenden Anruf noch eine SC frei ist.

Wow, vielen Dank. Das scheint wunderbar zu funktionieren.

Hat die Klammer bei "...CallID()" etwas zu bedeuten? Oder wie würde sich das verhalten, wenn zB. zwei SIP-Trunks existieren? Oder fasst die Abfrage alle Leitungen unabhängig vom Trunk zusammen?

UND: Ja, du hast meine Aufgabenstellung richtig gelesen. Gerade bei Ärzte ist es zum Teil unmöglich, ein Fax zu versenden oder raus zu telefonieren, denn es kommt schon vor, dass zu guten Zeiten 15-20 Anrufer zu gleich reinkommen wollen. Und nur für das die Lizenz und den Trunk entsprechend hoch zu stufen - ist etwas teuer - noch dazu die 1-2 Sprechstundenhilfen diese Menge gar nicht beantworten können. Das Anrufaufkommen allgemein hat mich nach Rückkehr des Urlaubes der Ärztin etwas schockiert. Zusätzlich war sie auch noch Vertretung von einem anderen Arzt. Sie hatte an diesem Tag 4 Stunden Ordinationszeit und in dieser Zeit kamen über 300 Anrufe rein. Weiß gar nicht, welche alle durch den Trunk mit 4SC noch abgewiesen wurden. :oops:
 
Hat die Klammer bei "...CallID()" etwas zu bedeuten?
Ja.

Oder wie würde sich das verhalten, wenn zB. zwei SIP-Trunks existieren? Oder fasst die Abfrage alle Leitungen unabhängig vom Trunk zusammen?
S.o., direkt vor dem Schnipsel:
man kann die Anzahl der aktiven Gespräche der Anlage ermitteln
Dir ging es doch um die 4 SC bzw. darum, dass noch eine benutzbar bleibt. Der C# Schnipsel gibt denau das wieder. Egal wieviele Trunks, wieviele Leitungen in den Trunks, wieviele Endgeräte, wieviele Geräte davon intern telefonieren - einfach alles spielt da rein sobald es aktiv genutzt wird. Das ist letzten Endes die Zahl, die auch in der 3CX Verwaltungskonsole angezeigt wird.
 
  • Like
Reaktionen: MarcosV__3CX

Statistik des Forums

Themen
44.414
Beiträge
232.716
Mitglieder
78.330
Neuestes Mitglied
uvitas