get extension status Weiterleitung an Warteschleife wenn besetzt oder an Nebenstellenummer wenn verfügbar.

Maurice123

Bronze Partner
Basic Certified
Mitglied seit
18. Juli 2025
Beiträge
10
Hallo,

Ich bin momentan dran mit der 3CX Call Flow Designer ein sogenannten Design zu erstellen indem der Status des Agent überprüft wird. Bei dem abgefragt wird wenn z.B GREAT_THAN_OR_EQUAL("GetQueueStatus1.AvailableAgents","1") dies zur Spalte Links weiter geht und dies zur Nebenstellenummer rüber geleitet wird oder wenn EQUAL(GREAT_THAN_OR_EQUAL("GetQueueStatus1.AvailableAgents","0") ist dann zur Warteschleife kommt also rechte spalte. Dazu nutzte ich ein C# Skript den ich als txt eingefügt habe. Folgendes Problem habe ich dabei das folgende Fehlermeldung dank des C# Skripts kommt wenn ich es in der 3CX Telefonanlage einsetze: ,,
:[28461..28467)E: (556,27)-(556,33): Error CS0115: 'Main.CountFreeAgents.Invoke()': no suitable method found to override

public override object Invoke()

^^^^^^

:[28518..28522)E: (558,40)-(558,44): Error CS1061: 'Main.CountFreeAgents' does not contain a definition for 'Flow' and no accessible extension method 'Flow' accepting a first argument of type 'Main.CountFreeAgents' could be found (are you missing a using directive or an assembly reference?)

string extNumber = (string)this.Flow.Variables["extNumber"].Value;

^^^^

:[28829..28844)E: (566,62)-(566,77): Error CS1061: 'QueueAgent' does not contain a definition for 'ExtensionNumber' and no accessible extension method 'ExtensionNumber' accepting a first argument of type 'QueueAgent' could be found (are you missing a using directive or an assembly reference?)

DN dnAgent = PhoneSystem.Root.GetDNByNumber(agent.ExtensionNumber);

^^^^^^^^^^^^^^^
"
Ich hab schon einiges versucht es zu lösen aber es half nicht weiter. Man sieht auch ein Beispiel Screenshot wie ich es aufgebaut habe und die Zip um es auszulesen, weil leider die Projekt Datei auf ein anderen Rechner momentan liegt. Ich hoffe das hilft weiter o_O
 

Anhänge

Hallo @Maurice123

du hast das Problem so weit gut beschrieben und Dateien angehangen. Die Test_Projekt.zip ist allerdings unvollständig. Das kann sich so niemand anschauen. Da fehlt die Datei Test_Projekt.cfdproj und - viel schlimmer - die Datei main.flow. Alles andere ist enthalten. Aber wer kein C# aus CFD Projekten lesen und aus den Kopf rückwärts bauen kann (das wird immer wieder in div. 3CX Foren erfolglos angefragt), der kann damit gar nichts anfangen. Es fehlt quasi alles für den CFD.

Was ich aber am Code sehe ohne das Projekt laden zu können: das Programmbeispiel wurde vmtl. aus einem alten Beitrag aus dem internat. 3CX Forum kopiert (*wink) und du verwendest nicht den dort verwendeten CFD Funktionsblock Execute C# File sondern den Block Execute C# Code. Das funktioniert nicht.

Der Code in CountFreeAgents.txt ist eine Klasse und ist damit grundsätzlich ein CFD Funktionsblock Execute C# File. Das ist aber nicht als Datei sondern als Code in Form des eines CFD Funktionsblock Execute C# Code in dein Projekt eingebunden.

Wenn dem so ist - was ist auf Grund der fehlenden .cfdproj Datei nicht sehen kann - dann kann das nicht funktionieren, auch wenn der Code korrekt wäre.

Wir nutzen meisten C# Schnipsel in Form des CFD Funktionsblock Execute C# Code, wie z.B. das hier als Einzeiler:
C#:
return ((Queue)PhoneSystem.Root.GetDNByNumber(QUEUENUMBER)).QueueAgents.OfType<Extension>().Count(extAgent => extAgent.QueueStatus == QueueStatusType.LoggedIn && extAgent.CurrentProfile.Name == "Available");
das die Menge der Agenten liefert oder alternativ so etwas wie das hier:
https://www.3cx.de/forum/threads/cfd-user-in-warteschleife-in-or-out-überprüfen.121650/post-440219
das gezielter abfragt.

Es gibt noch mehr Möglichkeiten ...
:D :D
 
Zuletzt bearbeitet:
Guten Morgen @fxbastler.

Heute habe ich die Möglichkeit die ZIP Datei wo auch die Projektdatei als auch die Flow Datei beinhaltet ist, rein zu senden. Auch den Punkt mit den Code ist auch korrekt. Den habe ich aus ein alten Forum Beitrag raus genommen um zu schauen, simulieren und zu testen, wie gut das mit den Code aber etwas umgewandelt laufen würde. Ich wäre echt intressiert wie so etwas mit Code laufen würde. Ich wäre auch intressiert welche Fehler ich gemacht habe. Natürlich habe ich auch gesehen das du erwähnt hattest das ich den Code für ,,Execute C# Code" verwendet habe. Das habe ich leider nicht bemerkt. Danke schonmal für die Bereitschaft ^^. Als Nachtrag: Du erwähntest es gäbe noch mehr Möglichkeiten... Gäbe es auch Möglichkeiten ohne Codieren. Da ich bis her auf meiner Suche jetzt nur aufs codieren gestoßen bin.
 

Anhänge

Zuletzt bearbeitet:
Heute habe ich die Möglichkeit die ZIP Datei wo auch die Projektdatei als auch die Flow Datei beinhaltet ist, rein zu senden.
Die Datei im Anhang hat zwar die Endung .zip, sollte aber die Endung .7z haben. Egal, ich krieg das hin ;)

Auch den Punkt mit den Code ist auch korrekt. Den habe ich aus ein alten Forum Beitrag raus genommen um zu schauen, simulieren und zu testen, wie gut das mit den Code aber etwas umgewandelt laufen würde. Ich wäre echt intressiert wie so etwas mit Code laufen würde. Ich wäre auch intressiert welche Fehler ich gemacht habe.
Ich nehme alles zurück und behaupte das Gegenteil.
Jetzt wo man das vollständige Projekt sieht wird ersichtlich, dass du den für diesen Code richtigen CFD Funktionsblock verwendet hast: den Execute C# File. Du hast die Datei hochgeladen, die Klasse gewählt, die Methode gewählt und gut ist.

Deine Probleme sind ganz andere:
  1. Die Methode ist mit public override object angegeben. Richtig wäre etwas wie z.B. public int .
    Es wird keine andere Routine mit override überschrieben (daher wird das bemängelt) und es wird kein Objekt zurückgegeben sondern ein int (oder ein string wie sonst üblich, s.u.). 3CX wandelt intern gern vieles in Strings um, musst du aufpassen. Deine anschl. Condition muss Variablen vom Typ int und nicht string vergleichen. Das ist ein Folgefehler.
    Dass der Name der Methode mit Invoke vielleicht etwas suboptimal benannt wurde ist eine andere Sache. Ich würde das nicht machen aber das spielt hier zufällig keine Rolle
  2. Die Parameterübergabe stimmt nicht. Du schreibst da etwas wie (string)this.Flow.Variables["extNumber"] und hast aber nur eine Variable im main flow (nicht im Projekt) namens extNumber.
    Vielleicht wäre es einfacher für dich, wenn du eine Variable namens extNumber vom Typ String mit dem richtigen Wert im CFD Block unter Input Parameter definierst. Da die Variable statisch ist macht das mehr Sinn.
  3. Ein QueueAgent agent hat keine Property ExtensionNumber nach deren DN man auch noch suchen muss.
    Der hat eine Property DN die man gleich verwenden kann.

Natürlich habe ich auch gesehen das du erwähnt hattest das ich den Code für ,,Execute C# Code" verwendet habe. Das habe ich leider nicht bemerkt.
Nein, hast du nicht, s.o.. Das habe ich auf Grund der nicht vorhandenen Main.flow im erzeugten Code nicht richtig deuten können.

Danke schonmal für die Bereitschaft ^^. Als Nachtrag: Du erwähntest es gäbe noch mehr Möglichkeiten... Gäbe es auch Möglichkeiten ohne Codieren. Da ich bis her auf meiner Suche jetzt nur aufs codieren gestoßen bin.
Was genau meinst du mit 'ohne Codieren'?
Andersrum: Ohne C# Code kann man das was du möchtest nicht abfragen.

Schau dir bitte andere Beispiele bzgl. 3CX und C# an. Suche z.B. mal im Forum nach dem Wort Schnipsel, auch wenn das vmtl. meistens C# Code für den CFD Funktionsblock Execute C# Code sind .
Sonst drück in irgend einem CFD Block auch gern mal die Taste F1 und lies da weiter.
 
Zuletzt bearbeitet:
Guten Morgen @fxbastler,

danke für die Rückantwort ^^. Ich meinte bei meiner letzten Frage ob man ohne C# Code das ganze machen kann. Ich denke da gibts auch Möglichkeiten zu? Ich habe auch den ganzen Code Ablauf nochmal verbessert und die Fehler machen entfernt bzw. korrigiert sowie du es beschrieben hattest. Würde dazu mich nochmal melden wie es abgelaufen ist.
 
Man kann mit CFD Bordmitteln den WS Status abfragen, die WS Agenten, deren Status und auch deren WS Login Status. So eine Lösung im CFD sieht nicht schön aus - noch dazu mit CFD Schleifen - aber man kann das machen.

Man kann mit CFD Bordmitteln jedoch nicht abfragen, ob ein Nutzer gerade telefoniert. Das wird aber auch benötigt. Das ist im Code der Teil mit <DN>.GetActiveConnections().Length == 0 . Dafür gibt es keinen CFD Funktionsblock. Das kann man nur mit C# lösen.
 
Morgen,

ich melde mich mal wieder nach einer langen Zeit wieder. Tut mir leid das in letzter Zeit keine Antwort mehr kam :D. Ich kämpfe momentan immer noch an das Problem. Ich hab jetzt auch mal den kompletten Script zu Ringgroup angepasst. Da ich etwas das Projekt verfehlt hatte und es zu Richtung Ringgroup gehen sollte. Ich habe trotzdem Fehler anhand dessen. Die lauten : :[28653..28705)E: (559,22)-(559,74): Error CS0266: Cannot implicitly convert type 'TCX.Configuration.RingGroup' to 'TCX.Configuration.Queue'. An explicit conversion exists (are you missing a cast?)

Queue queue = (RingGroup)PhoneSystem.Root.GetDNByNumber(extNumber);

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

:[28730..28743)W: (560,22)-(560,35): Warning CS0618: 'Queue.Members' is obsolete: 'Use QueueAgents instead'

DN[] agents = queue.Members;

^^^^^^^^^^^^^

:[28829..28836)E: (565,30)-(565,37): Error CS0103: The name 'dnAgent' does not exist in the current context

bool bAgentFree = dnAgent.GetActiveConnections().Length == 0;

^^^^^^^

:[28909..28917)E: (566,35)-(566,43): Error CS0103: The name 'extAgent' does not exist in the current context

bool bAgentAvailable = extAgent.CurrentProfile.Name == "Available";
^^^^^^^^

Ich hänge auch mal das Projekt an, leider nur in zip da 7z nicht unterstützt wird hier ;). Noch ein Hinweis am Rande ich habe das magische Handbuch genommen was ich hier als zip datei index hinterlegt habe
 

Anhänge

Zuletzt bearbeitet:
... Cannot implicitly convert type 'TCX.Configuration.RingGroup' to 'TCX.Configuration.Queue'. An explicit conversion exists (are you missing a cast?)

Queue queue = (RingGroup)PhoneSystem.Root.GetDNByNumber(extNumber);
Das ist richtig, das ist falsch :)

entweder Queue queue = (Queue)PhoneSystem.Root.GetDNByNumber(extNumber);
oder RingGroup rgroup = (RingGroup)PhoneSystem.Root.GetDNByNumber(extNumber);

Aber wenn du mit RG an Stelle WS arbeitest ist das Verfahren und sind die Abfragen komplett anders. RG haben keine Agenten, man kann sich mit Bordmitteln nicht ab- und anmelden u.v.a.m..

Warning CS0618: 'Queue.Members' is obsolete: 'Use QueueAgents instead'
Das ist nur eine Warnung dass diese Funktion bitte nicht mehr verwendet werden sollte. Siehe mein Schnipsel oben, ich verwende auch QueueAgents.

Error CS0103: The name 'dnAgent' does not exist in the current context

bool bAgentFree = dnAgent.GetActiveConnections().Length == 0;

^^^^^^^

:[28909..28917)E: (566,35)-(566,43): Error CS0103: The name 'extAgent' does not exist in the current context

bool bAgentAvailable = extAgent.CurrentProfile.Name == "Available";
Naja, wenn du den C# Code so weit reduzierst wie im akt. Test Projekt 2 angegeben, dann fehlt dir eben auch die Definition von dnAgent und extAgent. Mit RG wird das ohnehin nichts, s.o..

Wenn du solche Schwierigkeiten hast den angebotenen Code zu lesen, die Systematik dahinter zu verstehen, die offensichtlichen und bemängelten C# Fehler zu erkennen und selber zu beheben, dann ist es angebracht so etwas nicht selber zu tun.

Das ist zwar keine Raketenwissenschaft aber ich nehme an du wirst auch kein Flugzeug nach komplett vorliegenden Bauplänen und Anleitungen (egal ob Modell, Segler oder Passagier...) selber nachbauen geschweige denn dass es fliegt wie es soll. Jetzt kommst du damit, dass noch bevor es fliegt, du schon schon anfängst das zu modifizieren.
 
Ich hab die ersten beiden angepasst ^^. Die letzten beiden muss ich dafür eine Variable erstellen oder nach meiner Recherche aus soll das so aussehen?:
foreach (DN dn in agents)
{
if (dn is Extension ext)
{
bool isFree = ext.GetActiveConnections().Length == 0;
bool isAvailable = ext.CurrentProfile?.Name == "Available";

if (isFree && isAvailable)
{
iFreeAgents++;
return true;
}
}
 
Ich hab die ersten beiden angepasst ^^.
Ich habe keine Ahnung was du damit meinst.
Die letzten beiden muss ich dafür eine Variable erstellen oder nach meiner Recherche aus soll das so aussehen?:
Ich weiß auch hier nicht was du damit meinst.

Du kannst auch gern den C# Code als Code Block hier posten, siehe
https://www.3cx.de/forum/threads/rufweiterleitung.101354/post-452570

Oder du hängst das als Datei an so wie du es schon im ersten Post getan hast.

Warum nimmst du nicht einfach den CFD Baustein Execute C# Code und diese einzelne Zeile?

C#:
return ((Queue)PhoneSystem.Root.GetDNByNumber(QUEUENUMBER)).QueueAgents.OfType<Extension>().Count(extAgent => extAgent.QueueStatus == QueueStatusType.LoggedIn && extAgent.CurrentProfile.Name == "Available" && extAgent.GetActiveConnections().Length == 0);
 
Das ist richtig, das ist falsch :)

entweder Queue queue = (Queue)PhoneSystem.Root.GetDNByNumber(extNumber);
oder RingGroup rgroup = (RingGroup)PhoneSystem.Root.GetDNByNumber(extNumber);

Aber wenn du mit RG an Stelle WS arbeitest ist das Verfahren und sind die Abfragen komplett anders. RG haben keine Agenten, man kann sich mit Bordmitteln nicht ab- und anmelden u.v.a.m..

Das ist nur eine Warnung dass diese Funktion bitte nicht mehr verwendet werden sollte. Siehe mein Schnipsel oben, ich verwende auch QueueAgents.
Das war mit das erste gemeint und
Naja, wenn du den C# Code so weit reduzierst wie im akt. Test Projekt 2 angegeben, dann fehlt dir eben auch die Definition von dnAgent und extAgent. Mit RG wird das ohnehin nichts, s.o..
das als letztes.

Code:
 foreach (DN dn in agents)
 {
     if (dn is Extension ext)
     {
         bool isFree = ext.GetActiveConnections().Length == 0;
         bool isAvailable = ext.CurrentProfile?.Name == "Available";

         if (isFree && isAvailable)
         {
             iFreeAgents++;
             return true;
         }
     }
 
  1. Dein Code im vorigen Post ist nicht vollständig.
  2. Es fehlt wieder die Abfrage ob der Agent überhaupt an WS angemeldet ist.
 
Mein Fehler:

Code:
using System;
using TCX.Configuration;

public class CountFreeAgents : ScriptBase<object>
{
    public bool FreeAgents(String extNumber)
    {
        RingGroup ringGroup = (RingGroup)PhoneSystem.Root.GetDNByNumber(extNumber);
        DN[] agents = QueueAgents;


            foreach (DN dn in agents)
            {
                if (dn is Extension ext)
                {
                    bool isFree = ext.GetActiveConnections().Length == 0;
                    bool isAvailable = ext.CurrentProfile?.Name == "Available";

                    if (isFree && isAvailable)
                    {
                        iFreeAgents++;
                        return true;
                    }
                }

        
        return false;
    }
}

passt das jetzt so?
 
Habs jetzt gelöst. Es sollte so aussehen.

Code:
using System;
using TCX.Configuration;

public class CountFreeAgents : ScriptBase<object>
{
    public bool FreeAgents(String extNumber)
    {
        RingGroup ringGroup = (RingGroup)PhoneSystem.Root.GetDNByNumber(extNumber);
        DN[] agents = ringGroup.Members;


        foreach (DN agent in agents)
        {
            bool bAgentFree = agent.GetActiveConnections().Length == 0;
            bool bAgentAvailable = !agent.IsBreak(now: DateTime.Now) && !agent.IsOutOfOffice(DateTime.Now);


            if (bAgentFree && bAgentAvailable)
            {
                return true;
            }
        }

        
        return false;
    }
}

und es klappt nur musste etwas im Designer anpassen. Was er nicht tut wenn alle Agents besetzt sind den Prompt Playback abspielen der über den Transfer zur Warteschleife kommt. Würde mich jetzt nicht stören wenn das jetzt nicht funktioniert wäre aber intressant was ich falsch mache. Den Designer projekt hänge ich an falls man lust hat es mal anzuschauen.
 

Anhänge

Dann halt so, mit einer Rufgruppe.

Hinweis:
In einer 3CX sind Mitglieder einer Rufgruppe keine Agenten (wie bei einer WS) sondern das sind eben Mitglieder (member) einer RG.

Noch einige Anmerkungen:
  1. Das mit dem .IsBreak(...) und .IsOutOfOffice(...) sieht nett aus, aber funktioniert vielleicht nicht so wie gewünscht. Hast du das denn probiert? Stell z.B. mal alle RG Mitglieder auf away oder DND oder Custom2. Dann ruft es nirgends, aber die Abfrage ist der Meinung es könnte dennoch irgendwo rufen.
    Es sollte der Status der NSt. abgefragt werden: ob available oder custom 1 zutrifft, z.B.:
    (member.CurrentProfile.Name == "Available" || member.CurrentProfile.Name == "Custom 1")

  2. Ist es dir denn egal, ob der Member der RingGroup überhaupt an der 3CX angemeldet (sprich Farbe nicht grau) ist? Falls nein:
    member.IsRegistered gibt gleich einen bool Wert zurück
    Wobei man sich da die Festlegung einer Variable sparen und das gleich in die Bedingungen des if mit reinpacken kann.
Wie schon oben schon geschrieben: das kann man alles als Einzeiler und damit effizienter schreiben, LINQ sei Dank. Die Zeile ist halt ein klein wenig lang, aber das kann man ja der besseren Lesbarkeit halber auf mehrere Zeilen umbrechen.
 
Das mit dem .IsBreak(...) und .IsOutOfOffice(...) sieht nett aus, aber funktioniert vielleicht nicht so wie gewünscht. Hast du das denn probiert? Stell z.B. mal alle RG Mitglieder auf away oder DND oder Custom2. Dann ruft es nirgends, aber die Abfrage ist der Meinung es könnte dennoch irgendwo rufen.
Es sollte der Status der NSt. abgefragt werden: ob available oder custom 1 zutrifft, z.B.:
(member.CurrentProfile.Name == "Available" || member.CurrentProfile.Name == "Custom 1")
Also beim ersten Punkt habe ich dies gestern schon ausgetestet. Das läuft so wenn alle abwesend sind kommt der Anrufer Rechts in der Warteschleife. Sind alle Online also Verfügbar wird der an ein Ringgroup Mitarbeiter weitergeleitet sowie gewollt. Ich kann den gängigen Code mal in mein Script einfügen. Frage ,,Custom 1" ist damit der Status des Mitarbeiter gemeint was jetzt z.B Im Betriebsurlaub sein kann? Und muss man das vorher definieren mit ein Wert bzw Variable oder erkennt der das automatisch also z.B Im Betriebsurlaub.

Ist es dir denn egal, ob der Member der RingGroup überhaupt an der 3CX angemeldet (sprich Farbe nicht grau) ist? Falls nein:
member.IsRegistered gibt gleich einen bool Wert zurück
Wobei man sich da die Festlegung einer Variable sparen und das gleich in die Bedingungen des if mit reinpacken kann.
Und für Sowas meinst du dann in der schleife von
Code:
foreach (DN agent in agents)
dann sowas z.B
Code:
if (member.IsRegistered)
    {

        Console.WriteLine(agent.Name + " ist angemeldet.");
    }
 
Klare Worte: so langsam und sicher verliere ich den Willen dir zu helfen. Wer meine Posts der letzten Jahre verfolgt kann erahnen was das heißt und wie selten das ist. Meine Gründe dafür schreibst du schon oben und so auch hier wieder wenn ich das lese:

foreach (DN agent in agents)
und dahinter kommt so etwas:
if (member.IsRegistered)
{

Console.WriteLine(agent.Name + " ist angemeldet.");
}
Das sind zwei Zeilen Code. Beide sind falsch.
Weder gibt es eine Variable member (erste Zeile) noch gibt es eine Textkonsole zur Ausgabe so wie es in der zweiten Zeile steht. So zieht sich das von Beginn an durch alle deine Posts in diesem Thread hier. Ich bin nicht hier um deine Arbeit zu machen oder zu erklären oder dir C# nahe zu bringen.

Ich hatte es schon geschrieben:
Wenn du solche Schwierigkeiten hast den angebotenen Code zu lesen, die Systematik dahinter zu verstehen, die offensichtlichen und bemängelten C# Fehler zu erkennen und selber zu beheben, dann ist es angebracht so etwas nicht selber zu tun.

Es steht im Prinzip schon alles in diesem Thread geschrieben. Du musst es nur verstehen und richtig anwenden.


Frage ,,Custom 1" ist damit der Status des Mitarbeiter gemeint was jetzt z.B Im Betriebsurlaub sein kann? Und muss man das vorher definieren mit ein Wert bzw Variable oder erkennt der das automatisch also z.B Im Betriebsurlaub.
Ich habe keine Ahnung wie diese 3CX eingerichtet ist. Das solltest du wissen.

Zurück zu den 3CX Grundlagen die ich bei dir vermisse. Es gibt aktuell in einer 3CX fünf Status für Nebenstellen:
1754569098005.png

Grundsätzlich und ab Werk wird es nur in den Status Available (anwesend) oder Custom 1 an der Nebenstelle rufen. Mögliche Ausnahmen davon sind, dass in weiteren Einstellungen für jeden Status gewählt werden kann, ob Anrufe von RG angenommen werden und man sich an WS abmeldet oder man Ausnahmen definiert hat. So steht es im 3CX Handbuch, so wird es in den Schulungen erklärt. Das alles hat grundsätzlich erst einmal wenig bis nichts mit den GZ / PZ der Abteilung oder der NSt. zu tun. Wenn man diese mit einbeziehen möchte ist das zusätzlich, eine weitere Option, darauf gehe ich nicht ein.

Wenn man ermitteln will, ob eine NSt. einer RG einen Anruf entgegennehmen kann, dann ist zu ermitteln ob die NSt. in der 3CX registriert ist (s.o.), die NSt. nicht gerade einen Anruf führt (s.o.) und ob im aktuellen Status der NSt. Anrufe von RG angenommen werden. Für letzteres reicht oft die Abfrage des Status der Nebenstelle, s.o.: Available oder Custom 1. Wenn man es ganz genau machen will, dann fragt man für den akt. Status (egal welcher der fünf es ist) die Option Anrufe von RG annehmen ab. Wenn
member.CurrentProfile.DisableRingGroupCalls == false
dann werden RG Anrufe für den akt. Status angenommen.

Wenn man ermitteln will, ob eine NSt. einer RG einen Anruf entgegennehmen können soll, dann kommt vielleicht noch die GZ / PZ / FT der Abteilung bzw. - wenn aktiviert - der NSt. hinzu. Das ist eine Option, vielleicht deine Option, s.o., ich sehe wenig Sinn darin.

Erst dann kann und evtl. soll es auch von der 3CX aus an der NSt. rufen.

Die letzte Hürde ist immer, ob es ein Endgerät gibt was den Ruf auch signalisiert. Wenn es z.B. nur einen Software Client an der NSt. gibt und der PC heruntergefahren wurde aber an der 3CX nicht abgemeldet wurde, dann verbleibt diese NSt. für aktuell 7 Tage im Status registriert obwohl es nicht rufen kann. Auch das sollte man wissen und bedenken.
 
Hallo,

sorry für Missverständnisse oder Fehler von mir. Ich versuche das ganze korrekt zu verstehen. Tatsächlicheres Weise verstehe ich jetzt auch warum man das so macht. Ich habe auch von 3CX das Basis Wissen konnte nur nicht zuordnen ob das Custom jetzt von der Telefonanlage hergenommen wurde oder im Script als Variable oder sonstiges definieren muss, da die Telefonanlage bei mir vom Status her auch anders aussieht. Ich werde das mal mit paar kleine Verbesserungen wie beschrieben auszuprobieren :D. Ich versuche demnächst auch wenn ich was möchte den vollständigen Code zu senden. Ich bin ja noch Neuling hier im Forum und weiß nicht wie die Wünsche hier sind oder Anforderungen um hier Hilfe überhaupt zu bekommen aber ich versuchs :p.
 

Statistik des Forums

Themen
44.412
Beiträge
232.707
Mitglieder
78.328
Neuestes Mitglied
as7h