• 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.

Name der eingehenden Regel für CFA / C#

patrickb

Gold Partner
Advanced Certified
Mitglied seit
6. Februar 2021
Beiträge
756
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

  • getinboundrulename.zip
    6,4 KB · Aufrufe: 6
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 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.