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

Zugriff Anrufhistorie mit C#

patrickb

Gold Partner
Advanced Certified
Mitglied seit
6. Februar 2021
Beiträge
756
Gibt es eine Möglichkeit via C# und CFA die Anrufliste abzugreifen und die letzten gemachten Calls herauszufinden um darüber eine DB Eintrag zu entfernen?

Ziel:
Kunde ruft an, Kunde spricht auf AB, Nummer wird in DB eingetragen mit Zeitstempel.
Kunde ruft erneut an weil er zu ungeduldig ist, bekommt bei Anruf innerhalb von X Min eine Ansage "Wir haben Ihre Nachricht erhalten, bitte sehen sie von weiteren Anrufen ab, wir melden uns.".
Ein Teammember ruft Kunde zurück. (In dem Moment müsste die Nummer aus der DB gelöscht werden) -> Problem wird geklärt.
Sollte kein Rückruf erfolgen wird die Nummer nach 30 Min automatisch gelöscht bzw. in dem Moment wo NOW() - Timestamp beim Neuanruf der Nummer, größer als 30 Min ist.
Kunde ruft neu an, bekommt wieder die Standardansage - solange bis er auf den AB quatscht und seine Nummer wieder in die DB geschrieben wird.

Gibts da eine Idee einen Ansatz?
 
Gibt es eine Möglichkeit via C# und CFA die Anrufliste abzugreifen und die letzten gemachten Calls herauszufinden um darüber eine DB Eintrag zu entfernen?
Ich würde die Funktionalität über eine REST API bereitstellen.
 
Ich würde die Funktionalität über eine REST API bereitstellen.
genau

Eine 3CX hat das schon - aber im Moment noch wenig konsequent und nicht so offensichtlichtlich dokumentiert, kann ja sein dass sich das noch ändert ;)

Die hier referenzierte Website mit den div. Einblicken ist inzwischen ja vom Netz - warum wohl.

Es geht letztendlich um die REST API der 3CX bei der auch das CallLog abfragbar ist (wobei speziell das Letztere uns bis vor nicht allzu langer Zeit unbekannt war, danke noch einmal an @Patrick_Bitblade ).

Anbei ein CFD Beispiel für den generellen Zugriff auf die 3CX Web API aus einer CFA heraus (das ist nicht die offiziell dokumentierte 3CX Video Conference API mittels API Key) und hier im Speziellen die exemplarische Abfrage des CallLog als Gerüst für eine eigene CFA.

Das Beispielprojekt besteht aus 4 CFD Blöcken:
  • authentifiziere dich bei der 3CX Website und hole dafür ein Cookie
    (GetTCXAuthCookie, ein 'Execute C# Code' CFD Block)
  • setze die URI der Abfrage aus einzelnen Elementen zusammen
    (SetTCXRequestURI, ein 'Assign a Variable' CFD Block)
  • frage die 3CX ab, nutze den Auth Cookie und die Abfrage URI
    (GetJSONData, ein 'Web Service REST' CFD Block)
  • schreibe das Resultat in's CFD Log der 3CX - das würde man durch eine Auswertung der JSON Daten mit CFD Bordmitteln ersetzen
    (Logger1, ein 'Logger' CFD Block)

Anzupassen ist:
  • die globalen Projektvariable 'TCXRequestFQDN' welche den FQDN der 3CX enthält
  • zwei Variablen des ersten CFD Blocks: Login Benutzername und Passwort für die 3CX
  • die vielen Stellen des zweiten CFD Blocks welche die spätere URI und letztendlich die eigentlich handhabbare REST API Abfrage mitttels Variablen darstellt, da darf jeder gern selbst kreativ werden
  • die Verarbeitung des Rückgabewertes im vierten CFD Block, das wird hier exemplarisch nur in's Log geschrieben, Überwachung des CFA Log z.B. mittels tail -f /var/lib/3cxpbx/Instance1/Data/Logs/3CXCallFlow.log auf einer Shell einer Debian 3CX
Das kann man alles auch anders lösen. Das hier ist ein Beispiel, ein Rahmen für individuelle Weiterentwicklungen für wen und was auch immer. Das ist letztendlich der gleiche Zugriff wie hier nur aus einer CFA heraus.

Das funktioniert von überall da aus, von wo auch auf das 3CX Dashboard zugegriffen werden kann. Also Vorsicht beim Speichern und Verteilen der Zugangsdaten! Das Beispiel ist in C#, das läuft auch (evtl. mit geringen Anpassungen) von sämtlichen anderen von C# unterstützten Plattformen aus. Alternativ kann man eine Dummy NSt. / Anmeldung mit spezielleren (eingeschränkten) Berechtigungen benutzen - das haben wir aber noch nicht probiert.

Suchstichworte: Call Flow Designer Schnipsel REST Beispiel Programm Website
 

Anhänge

  • GetCDRData.zip
    7,5 KB · Aufrufe: 43
Zuletzt bearbeitet:
Wie genau würdest du da vorgehen? Mit der API habe ich tatsächlich fast noch 0 Kontaktpunkte gehabt :D
@mbehrens meint vmtl. damit: deine eigene API, die du irgendwo selber bauen darfst. Einen SQL Server, den dazugehörigen Webserver und das kleine Etwas an API Programmierung (in der Programmiersprache deiner Wahl) ringsrum zum geordneten Zugriff darauf </ironie>.
 
Zuletzt bearbeitet:
Ich muss mir das alles mal zu gemüte führen. Die referenzierte Website aus dem Beitrag ist die, in der jetzt nur noch die Video API ist? Weil evtl. bekommt man da nen Einblick zurück mit https://archive.org/web/

@fxbastler
 
Die referenzierte Website aus dem Beitrag ist die, in der jetzt nur noch die Video API ist?
nein
Wenn die Website aktuell aufgerufen wird, dann sieht man nur noch das Angebot die Site zu kaufen (Quellcode, Kunden, den FQDN). Die bisherige Doku ist dort verschwunden. Aber ich habe noch einen 'Ausdruck'.

Weil evtl. bekommt man da nen Einblick zurück mit https://archive.org/web/
Nein, dafür war die zu kurz online. Es gibt einen Snapshot vom 23.11.2021, da stand aber quasi noch nichts drin.
 
nein
Wenn die Website aktuell aufgerufen wird, dann sieht man nur noch das Angebot die Site zu kaufen (Quellcode, Kunden, den FQDN). Die bisherige Doku ist dort verschwunden. Aber ich habe noch einen 'Ausdruck'.


Nein, dafür war die zu kurz online. Es gibt einen Snapshot vom 23.11.2021, da stand aber quasi noch nichts drin.
Schade
 
@mbehrens meint vmtl. damit: deine eigene API, die du irgendwo selber bauen darfst. Einen SQL Server, den dazugehörigen Webserver und das kleine Etwas an API Programmierung (in der Programmiersprache deiner Wahl) ringsrum zum geordneten Zugriff darauf </ironie>.
In der Tat. Mit dem jetzigen Dokumentationsstand bleibt meiner Meinung nur das. ;)
 
@patrickb
Ich habe es mir zerschossen.. Meine Rückruffunktion funktioniert nur noch hin und wieder :(
 
Meine Rückruffunktion funktioniert nur noch hin und wieder :(
Dem sollte man beikommen können. Die API funktioniert noch so wie zuvor. Entweder der Cookie ist mal weg oder zu alt (ich weiß ja nicht wie ihr das handhabt) oder die Abfrage der 3CX ist nicht korrekt / liefert mehrere bzw. falsche Ergebnisse weil die URL nicht richtig zusammengebaut wurde / das Ergebnis nicht fehlertolerant genug interpretiert wird. Alles andere ist 'Hausmannskost' mit Bordmitteln. Error Logger benutzen und mit tail -f beobachten ...
 
Dem sollte man beikommen können. Die API funktioniert noch so wie zuvor. Entweder der Cookie ist mal weg oder zu alt (ich weiß ja nicht wie ihr das handhabt) oder die Abfrage der 3CX ist nicht korrekt / liefert mehrere bzw. falsche Ergebnisse weil die URL nicht richtig zusammengebaut wurde / das Ergebnis nicht fehlertolerant genug interpretiert wird. Alles andere ist 'Hausmannskost' mit Bordmitteln. Error Logger benutzen und mit tail -f beobachten ...
----|Inf(00)| Date: 22.08.2022 01:02:12
2022/08/22 01:02:12.863|3606|0007|Err|CallPair._hwtcallflow_v18_21082022.Main_12.Main.2226.[C:576.2]-From script: HWTcallflow_v18_21082022 - CallID 00000182C2A46E97_576 - CallFlow.CFD.LoggerComponent 'loggerComponent2' - Wfwdprofile.160: Available() - Available - Timeout=10 BusyDetectio=:UsePBXStatus RingMyMobile:False
2022/08/22 15:28:18.053|3606|0059|Err|CallPair._hwtv3_gesperrt_test.Main_13.Main.2405.[C:664.2]-From script: HWTv3_gesperrt_test - CallID 00000182C5BD5BF7_664 - Callflow - Error executing last component: MySqlConnector.MySqlException (0x80004005): Access denied for user 'dedihxbb_1'@'45.83.105.252' (using password: YES)
at MySqlConnector.Core.ServerSession.ReceiveReplyAsyncAwaited(ValueTask`1 task) in /_/src/MySqlConnector/Core/ServerSession.cs:line 890
at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, Int32 startTickCount, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 498
at MySqlConnector.Core.ConnectionPool.ConnectSessionAsync(String logMessage, Int32 startTickCount, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ConnectionPool.cs:line 435
at MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, Int32 startTickCount, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ConnectionPool.cs:line 139
at MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, Int32 startTickCount, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ConnectionPool.cs:line 139
at MySqlConnector.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Int32 startTickCount, Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlConnection.cs:line 902
at MySqlConnector.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlConnection.cs:line 435
at CallFlow.CFD.DatabaseAccessComponent.PrepareCommandAsync(DbConnection conn)
at CallFlow.CFD.DatabaseAccessComponent.ExecuteScalarAsync(DbConnection conn)
at CallFlow.CFD.DatabaseAccessComponent.ExecuteStatement(DbConnection conn)
at CallFlow.CFD.DatabaseAccessComponent.ExecuteStart()
at CallFlow.CFD.DatabaseAccessComponent.Start(TimerManager timerManager, Dictionary`2 variableMap, TempWavFileManager tempWavFileManager, PromptQueue promptQueue)
at _hwtv3_gesperrt_test.Main_13.Main.ProcessStart()
 
user 'dedihxbb_ sagt mir gar nichts
 
user 'dedihxbb_ sagt mir gar nichts
Wenn der Quellcode der CFA in der 3CX Konsole mittels Strg+F nach dedih erfolglos abgesucht wurde, dann würde ich mir ernsthaft Gedanken über den Zugang zur 3CX (und zum mySQL Server) machen. Die Adresse ist einem Bereich von netcup. Läuft da die Technik?
 
Wenn der Quellcode der CFA in der 3CX Konsole mittels Strg+F nach dedih erfolglos abgesucht wurde, dann würde ich mir ernsthaft Gedanken über den Zugang zur 3CX (und zum mySQL Server) machen. Die Adresse ist einem Bereich von netcup. Läuft da die Technik?
Ja dedih finde ich im Quellcode nicht nicht.
Ja da läuft die Technik.
Die Rückruffunktion funktioniert seit v 18 nicht mehr zuverlässig bis gar nicht.
 
Ja dedih finde ich im Quellcode nicht nicht.
Das ist schwer zu verstehen, da ja das oben gepostete Log wohl von der 3CX kommt (vmtl. das /var/lib/3cxpbx/Instance1/Data/Logs/3CXCallFlow.log).

Ich würde sicherheitshalber den MySQL (vmtl. wohl eher MariaDB) Server Zugang überprüfen und abdichten. Ebenso auch die Zugriffe auf die 3CX (Audit-Log). Dann ein MySQL SQL Log laufen lassen und das anschauen. Prinzipiell sollte es an dieser Stelle keinen Unterschied machen, ob eine v16 oder eine v18 Verwendung findet.
 
Nach dem Update auf v18 kam es zu Problemen mit der Rückruffunktion.
Die Formatierung der Zeit wurde durch 3cx geändert- So wurden Zeiten falsch ausgelesen und Anrufe fälschlicherweise als Rückruf bearbeitet.
Also im CFD die Zeit-Formatierung anpassen- und alles ist supi
 
  • Like
Reaktionen: MarcosV_ 3CX
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.