Call Flow Nutzer erkennung

Ben04

3CX MVP
Silver Partner
Mitglied seit
4. August 2023
Beiträge
727
Moin,

Wir haben für eine neue Anlage vor, ein Skript zu bauen, in dem mit einer Authentifizierung gearbeitet wird.

Warum Auth.? In der Anlage sind 2 Standorte zusammen und bekommen Skripte für Rufweiterleitung und IVR-Ansage.

(Statische Umleitung zum anderen Standort, dazu eigen besprechbare Ansage.)

Da das Ganze mit 2 Dummys verschatelt ist, fallen da einige Nebenstellen an.

(12 an der Zahl, da alles doppelt sein muss – für beide Standorte jeweils).



Am besten wäre es, wenn das Skript erkennt, dass es NbST XX oder NbST YY ist. Es geht dabei um den Hintergrund, dass Standort 1 den CallFlow für Standort 2 nicht ändern soll, um einfach Problemen vorbeugen zu können, wenn Standort 1 etwas für Standort 2 ändert, aber Standort 2 unwissend darüber ist. (Kann ja immer mal fix passieren.)



Mit der normalen Auth. via PIN-Code könnte man zwar jeweils die NbST abfragen als PIN, aber dann kann sich immer noch Standort 1 als Standort 2 identifizieren...
 
Habe es hinbekommen.
Ergebnis:
Creat a Condition:

EQUAL(session.ani,"XY")
"XY" ist die Nummer, die erlaubt ist, also z. B. Nebenstelle 33, dann darf nur die Nebenstelle 33 das Menü durchlaufen.
 
  • Like
Reaktionen: fxbastler
Ich benötige nochmal Hilfe, will aber kein extra Thema aufmachen.

Ich möchte im Skript den Status DND auslesen, welches ich via

EQUAL(GetExtensionStatusFrom60.CurrentProfileName,"Do Not Disturb")
machen will.

Jedoch erkennt er es nicht und wechselt dementsprechend immer zu anderen Optionen.

"GetExtensionStatusFrom60.CurrentProfileName" ist als Variable eingestellt (mehrmals geprüft) und mit den Status "Available" und "away" klappt es.
Auch mit "Lunch" für Custom 1, klappt es nicht.
Der Hintergrund ist, dass mit 1 Profil, 2 Weiterleitungen möglich sind und als "Verfügbar", der Standard Call Flow genutzt wird.
 
Wenn man nicht weiter weiß: Log einschalten und überprüfen. Der CFD Baustein Logger (spätestens im Level Error) und ein
tail -f /var/lib/3cxpbx/Instance1/Data/Logs/3CXCallFlow.log in einer 3CX Shell helfen dir das Problem einzukreisen.
 
Als Status bekomme ich Folgendes gesagt: Out of office.
Aber wenn ich es verwende, wird es trotzdem nicht akzeptiert.
Auch nicht wenn ich _ einfüge oder die Leerzeichen weg lassen.

Irgendetwas stimmt da nicht..
Ich habe durch das Skript der Nebenstelle den Status auf DND setzen lassen, via SetExtensionStatus.
Es ist davor und danach "Out of Office"..

Aus dem US Forum, habe ich folgenden Beitrag gefunden:
Dort habe ich mir das "Out of Office" 1 zu 1 herausgekopiert, aber er erkennt es nicht..


Jetzt hat er es geschluckt.. Hat sich beim Experimentieren wieder in einen String verwandelt, statt als Variable zu bleiben.
 
Zuletzt bearbeitet:
Das geht immer noch wie gewünscht, teste es selber, siehe Anhang. Im Beispiel ist die Nummer der CFA 859 und die der NSt. welche geschalten wird ist 200. Kannst du dir selber anpassen. Ausgabe als Logger einmal vor und nach dem Umschalten. Damit du siehst, dass die Erkennung mit EQUAL funktioniert siehe im Create a Condition Block. Da wird auf Grund des vorigen Status zurückgeschalten.

Protokoll von 2 Läufen:
Code:
1. Lauf, 200 ist Verfügbar:
Logger1 - CallFlow.CFD.LoggerComponent 'Logger1' - ** LOGGER1 ExtStatus before is: |Available|
Logger2 - CallFlow.CFD.LoggerComponent 'Logger2' - ** LOGGER2 ExtStatus after set to OoO is: |Out of office|
Logger3 - CallFlow.CFD.LoggerComponent 'Logger3' - ** LOGGER3 ExtStatus after set to Userdef1 is: |Custom 1|
Logger4 - CallFlow.CFD.LoggerComponent 'Logger4' - ** LOGGER4 ExtStatus after reset to original is: |Available|

2. Lauf, 200 ist DND:
Logger1 - CallFlow.CFD.LoggerComponent 'Logger1' - ** LOGGER1 ExtStatus before is: |Out of office|
Logger2 - CallFlow.CFD.LoggerComponent 'Logger2' - ** LOGGER2 ExtStatus after set to OoO is: |Out of office|
Logger3 - CallFlow.CFD.LoggerComponent 'Logger3' - ** LOGGER3 ExtStatus after set to Userdef1 is: |Custom 1|
Logger4 - CallFlow.CFD.LoggerComponent 'Logger4' - ** LOGGER4 ExtStatus after reset to original is: |Out of office|
 

Anhänge

Habe es ja jetzt auch hinbekommen. Irgdwas wollte am Anfang nicht. Aber jetzt läuft es.
Jetzt muss ich nur noch mich mit dem Loop auseinandersetzen und dann ist das Mega-Skript fertig.
 
Loop ist so eine leicht nervige (weil umständliche) Sache.

Wenn gezählt werden soll, dann:
  1. eine globale CFD Projektvariable definieren
  2. die Projektvariable vor der Schleife setzen
  3. am Anfang der Schleife auf diese Projektvariable testen ob die Schleife ausgeführt werden soll
  4. am Ende der Schleife die Projektvariable ändern (zählen oder was auch immer)
Ein Grund komplett auf C# Anrufskripte umzusteigen.
 
Ne, er soll nicht zählen.
Das ist für das ändern der IVR Ansage.
Wenn man die Ansage erneut aufnehmen will, weil das Ergebnis nicht zufriedenstellend ist, soll mit Taste 2 der Prozess erneut beginnen. Dadurch, dass es in einem Untermenü ist, kann ich ihn ja nicht erneut auf die Nebenstelle für das Skript schicken.
 
Loop funktioniert einwandfrei.

Mehrfach-Gegenprüfung bestimmter Nebenstellen funktioniert auch via

OR(EQUAL(session.ani,"25"),EQUAL(session.ani,"12"))

Mega wie das ganze funktioniert.
 
C#:
if( MyCall.Caller.CallerID.Equals("25") || MyCall.Caller.CallerID.Equals("12") )
{
    // blabla
}
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Ben04
Wenn man natürlich Skripten kann, dann geht's auch so, aber für mich reicht es so und kann es so immer nachstellen mit Bordmitteln :)
Viele Wege führen nach Rom :D
 

Statistik des Forums

Themen
44.413
Beiträge
232.713
Mitglieder
78.328
Neuestes Mitglied
as7h