3cx Call Flow Designer - Condition session.ani

Suboptimal

Forum User
Mitglied seit
18. September 2023
Beiträge
45
Hallo,

bin gerade dabei mich in den Call Flow Designer einzuarbeiten, aber irgendwie scheitere ich am Verständnis über die Funktionsweise der Conditions. Im Grunde genommen ziemliches simples Gerüst:

DID wird angerufen, anhand der CallerID und enthaltener Vorwahl wird entschieden in welche Warteschlange der Anrufer eingeordnet wird.

So sieht es im Designer aus:

Screenshot 2024-07-31 155533.png
Mit dem Expression-Editor habe ich mir die Conditions zusammengebastelt. Anfangs noch mit EQUAL, später mit CONTAIN:

Code:
EQUAL(LEFT(session.ani,"6"),"+49351")

Code:
CONTAINS(session.ani,"+49351")

Beides schlägt fehl. Sofort nach Freizeichen kommt Besetzt.

Im Log steht:

Code:
|Erro| CallPair._areacodeforward_5.Main.1866.[C:605.3]-From script: AreaCodeForward - CallID adf1fa0891010000_605 - Callflow - Error executing last component: System.FormatException: String '+4935XXXXXXXX' was not recognized as a valid Boolean.
   at System.String.System.IConvertible.ToBoolean(IFormatProvider provider)
   at _areacodeforward_5.Main.<InitializeComponents>b__20_5()
   at CallFlow.CFD.ConditionalComponent.SelectBranch()
   at CallFlow.CFD.ConditionalComponent.Start(TimerManager timerManager, Dictionary`2 variableMap, TempWavFileManager tempWavFileManager, PromptQueue promptQueue)
   at _areacodeforward_5.Main.ProcessStart()

Er soll Session.ain vergleichen und wenn es stimmt diese Option wählen. Irgendwas scheine ich aber nicht verstanden zu haben.

Kann jemand helfen?

Güße
 
Kann jemand helfen?
Bei mir funktioniert das, sofort. Wenn ich eine unserer DID mit
+49351<unserehiergeheimgehaltenefirmentelefonnummer> anrufe, dann springt die CFA an, verarbeitet das korrekt und zweigt in der Condition richtig und ohne Fehler ab.

Ich verwende allerdings
CONTAINS(session.did,"+49351") (die angerufene DID) und nicht
session.ani (die anrufende Nummer).

Grüße aus der DD Zentrale.
 
Ich verwende allerdings
CONTAINS(session.did,"+49351") (die angerufene DID) und nicht
session.ani (die anrufende Nummer).
Genau das ist aber das Ziel, da ich ja vom Anrufer wissen will, was er für eine Vorwahl hat. Damit ich das gleich an die richtige Abteilung geben kann.

Wenn ich anrufe, höre ich kurz ein Freizeichen, danach Besetzt. Geht auch so aus dem Log hervor, das die 3cx dann den Call beendet. Er muniert das er die Nummer als String nicht als validen Boolean akzeptiert. Was per se klar ist, also scheint er dort einen anderen Aufbau zu erwarten. Die Frage ist: Wie soll der aussehen?
 
Komisch. Habe es herausgefunden. Wenn ich bei der Condition das "+" in der Überprüfung weg lasse, dann funktioniert es. Verstehe ich zwar nicht, weil eigentlich ein String jedes beliebige Zeit enthalten darf, aber so geht es. Im Endeffekt nicht tragisch, man muss nur erstmal drauf kommen.

Code:
CONTAINS(session.ani,"49351")

Ich würde das aber dennoch mit einem LEFT kombinieren, nicht das irgendjemand im Nutzeranteil genau jene Kombination hat und dann mit falscher Vorwahl geroutet wird.
 
Genau das ist aber das Ziel, da ich ja vom Anrufer wissen will, was er für eine Vorwahl hat. Damit ich das gleich an die richtige Abteilung geben kann.
Richtig, ich habe das nur in meinem Beispiel verwendet.

Wenn ich bei der Condition das "+" in der Überprüfung weg lasse, dann funktioniert es.
Dann evtl. CONTAINS(REPLACE_REG_EXP(session.ani,"+49","0049"),"0049351") (<- von mir ungetestet) als Condition verwenden.
 
  • Like
Reaktionen: Suboptimal

Statistik des Forums

Themen
44.413
Beiträge
232.713
Mitglieder
78.328
Neuestes Mitglied
as7h