Name der eingehenden Regel für CFA / C#

patrickb

Platinum Partner
Advanced Certified
Mitglied seit
6. Februar 2021
Beiträge
928
Hat jemand eine Ahnung, wie ich es hinbekomme den Namen der eingehenden Regel in einer CFA zu verarbeiten. Sprich anhand der DID den Namen der Regel auszulesen um ihn dann in eine Variable zu speichern und z.B. via Mail Komponente ausgeben zu können?

Aktuell habe ich eine Lösung mit einem Mehrdimensionalen Array in Verwendung der aus einem Global Property ausgelesen und erstellt wird. Sollte kein Treffer vorliegen wird einfach "Zentrale" ausgegeben.

C#:
string EINGABESTRING = "12345,Leitung 1;34567,Leitung 2;98765,Leitung 3;";
string DIDTOSEARCH = "34567";

string[] zeilen = EINGABESTRING.Split(';');
string[][] spalten = new string[zeilen.Length][];

 for (int i = 0; i < zeilen.Length; i++)
{
    spalten[i] = zeilen[i].Split(',');
}

 for (int i = 0; i < spalten.Length; i++)
{
    if (spalten[i].Length == 2 && spalten[i][0] == DIDTOSEARCH)
    {
        return spalten[i][1];
    }
}

return "Zentrale";

Die Variante stört mich aber ein wenig, da ich erstens den String immer pflegen muss und zweitens das Ganze dadurch auch unübersichtlich wird. Cooler wäre es, wenn er halt direkt den Namen der passenden DID auslesen könnte und verarbeiten würde.

@fxbastler Hast du da was?

Danke im Voraus.
 
Zuletzt bearbeitet:
Hallo @patrickb

ja, ich habe da etwas. Ich gebe zu, ich musste ein klein wenig suchen. Du hast aber auch Wünsche ...

Der gesuchte Name der benutzten eingehenden Regel (und noch mehr) ist in den dem Anruf angehängten Daten. Die bekommt man nicht ganz so einfach wie sonst. Die Vorgehensweise ist:
  1. durchsuche alle aktiven Verbindungen der 3CX (ActiveConnections, pro Gespräch glaub immer zwei), das sind ID
  2. hole für jede Verbindung die Daten der Verbindung, hier speziell die Daten der ersten Verbindung eines Gespräches (des Starts), hole speziell nur alle angehängten Daten
  3. überprüfe, ob in den angehängten Daten der Verbindung die CallID dieselbe ist wie die welche die CFA beim Aufruf bekommen hat (als Parameter übergebene Variable callid, das ist die session.callid der CFA): dann ist es diese Verbindung welche gerade mit der CFA läuft, nur diese und nur deren Start interessiert dich
  4. hole die gewünschten angehängten Daten - hier den Namen der eingehenden Regel in inbound_did_rule (wenn es solche Daten gibt, man kann die CFA ja auch direkt anrufen, dann gibt es nichts) - und gib die zurück; wenn die Regel keinen Namen hat dann kommt da auch nichts, dann könnte man das über die Abfrage der Daten von inbound_did sehen wie der Anruf einging
C#:
string retval="";
foreach (var c in PhoneSystem.Root.GetActiveConnectionsByCallID()) {    // sind die einzelnen lfd. Gespraeche
    var ad=PhoneSystem.Root.GetByID<ActiveConnection>(c.Value.OrderBy(x => x.ID).First().ID).AttachedData;
    if( ad.Where(x => (x.Key == "chid") && (x.Value == callid)).Count() == 1 ) {
//        retval=string.Join("\n    ", ad.Select(x => x.Key + "=" + x.Value).ToArray());
        retval=ad.Where(x => x.Key == "inbound_did_rule").Select(x => x.Value).First();
        break;
    }
}
return retval;

Anbei eine CFA komplett als Beispiel.

Vielleicht geht das auch irgendwie anders und kürzer, ich weiss es nicht besser.

Wenn du wissen willst, was sonst noch an Daten der Verbindung anhängt, dann wechsle den Rückgabewert in dem C# Schnipsel: entferne den Kommentar in der einen Zeile (vor dem retval=), setze den eine Zeile darunter und schau in das Log. Das wird dir sicher gefallen. Vielleicht fällt dir noch etwas anderes dazu ein.

Suchstichwort: CFA CallFlowApp CFD CallFlow Designer C# Schnipsel Inbound Rule Name

PS: Über den verschachtelten Aufbau deiner Strings, füllen und suchen müssen wir nochmal reden. Alles entbehrlich.
 

Anhänge

Zuletzt bearbeitet:
'Jahre später' kommt mir das wieder unter und ja: es geht einfacher. Sogar viel einfacher und auch schneller, in einem CFD mit einem C# Schnipsel in einer Zeile, get inbound rule name:
C#:
return myCall.Caller.AttachedData["inbound_did_rule"];
 

Statistik des Forums

Themen
44.411
Beiträge
232.704
Mitglieder
78.328
Neuestes Mitglied
as7h