Ausgehende Rufnummer rotieren

Katta Informatik GmbH

Bronze Partner
Mitglied seit
21. Juli 2023
Beiträge
13
Grüezi zusammen,

ein Kunde von mir hat einen 10er Nummernblock und möchte, dass die ausgehende Nummer bei jedem anruf ändert. Laut unserem 3cx-Partner (iWay) geht das nur mittels einem selbsterstellten Script. Ich habe daher im Call Flow Designer ein Script erstellt (hatte leider bisher null Erfahrung mit der Anwendung). Es sieht folgendermassen aus:

Es sind standardmässig zwei Variablen definiert. "callerID" und "rotationCounter". "rotationCounter" hat "InitialValue" 1. "callerID" hat keinen "InitialValue".

Nach dem Start des Scripts gibt es ein "CreateCondition" mit 9 "conditionalComponentBranch"-Elementen. Die Abfrage dort lautet jeweils:

EQUAL(callflow$.rotationCounter,X)

Wobei X eine Zahl zwischen 1 und 9 sein kann (inkl. 1 und 9).

In jedem "conditionalComponentBranch"-Element gibt es nach der Abfrage ein "AssignVariable". Dort steht jeweils folgendes:

Variable Name: callflow$.callerID
Expression: +41xxxxxxxxx (müsste das eventuell in Anführungszeichen sein? es handelt sich jeweils um eine Nummer aus dem 10er Block und die letzte Ziffer entspricht dem Wert der Variable "rotationCounter").

Nach dem "CreateCondition"-Element kommt wieder ein "AssignVariable" mit folgenden Angaben:

Variable Name: callflow$.rotationCounter
Expression: "( callflow$.rotationCounter + 1 ) % 9"

Zum Schluss kommt dann ein "Attach Call Data"-Element, in dem ich die Nummer als Caller-ID übergeben will. Dort habe ich folgenden Daten angegeben:

Name: "callid" (ich habe keine Ahnung, ob das korrekt ist. Ich habe nirgend den korrekten Namen gefunden.)
Value: callflow$.callerID

Das Script funktioniert so leider nicht. Da ich es im 3cx offenbar nicht debuggen kann und von der Anlage auch keinerlei Rückmeldung erhalte, weiss ich leider nicht woran es liegt. Kann mir jemand helfen?
Anbei noch ein evtl hilfreicher Screenshot.
 

Anhänge

  • Screenshot 2025-03-17 114053.png
    Screenshot 2025-03-17 114053.png
    23,9 KB · Aufrufe: 4
Das Script funktioniert so leider nicht.
Was ist eine ziemlich schlechte Fehlerbeschreibung.
Da ich es im 3cx offenbar nicht debuggen kann und von der Anlage auch keinerlei Rückmeldung erhalte, weiss ich leider nicht woran es liegt. Kann mir jemand helfen?
Loglevel Verbose im Activity Log mal aktiviert?
Für weitere Informationen mal Werte in eine Datei geshrieben oder an einen Webservice fürs Debugging geschickt?
 
Wie / wo mache ich das?
3CX / Admin / Systemübersicht / Aktivitätsprotokolle / Optionen / Ausführlich

Dann füllt sich die Log Datei 3CXCallFlow.log ganz erheblich schneller.

An die Datei kommt man über Admin / Systemübersicht / Support-Informationen. Die Datei SupportInfo.zip herunterladen, entpacken und im Verzeichnos Logs findet man die Datei.
Wir haben fast nur Linux 3CX. Überwachung der Datei live:
https://www.3cx.de/forum/threads/call-flow-nutzer-erkennung.121296/post-438003

Was für Werte und welche Webservices gibt es dafür?
s.o., erst einmal lokal nachverfolgen sollte reichen
 
ein Kunde von mir hat einen 10er Nummernblock und möchte, dass die ausgehende Nummer bei jedem anruf ändert.
Grundsätzlich: das funktioniert nicht automatisch. Für jeden ausgehenden Anruf muss entweder die CFD App benutzt werden (was nicht trivial ist und eben nicht automatisch passiert) oder die CFD App muss nach dem Anruf manuell aufgerufen werden damit die Umstellung erfolgt.

Unabhängig davon: die CFD App Variablen werden mit jedem Aufruf neu initialisiert. Die CFD App muss entweder eine globale 3CX Variable benutzen, um zu wissen welche Nummer aktuell verwendet wird, diese Variable verwenden und immer wieder neu schreiben. Oder die CFD App muss bei jedem Aufruf einer Nebenstelle ermitteln welche Nummer aktuell verwendet wird, diese hochzählen und neu schreiben.
 
@fxbastler wie ruft man die CFD App denn genau auf?
Ich denke, das mit der globalen 3cx-Variablen würde ich hinkriegen, aber insgesamt sieht das für meinen Kunden nicht wirklich sinnvoll nutzbar aus.
 
wie ruft man die CFD App denn genau auf?
Aktuell gibt es nur wenige unterstützte Möglichkeiten wie eine 3CX CFD App startet:
  1. durch Anruf an die CFD App direkt, entweder deren Wählcode oder deren Namen (ja, auch das geht)
  2. eingehend beim Anruf auf einem SIP Trunk
  3. eingehend beim Anruf an eine DID
  4. man benutzt die Call Control API einer 3CX ENT und steuert 'Dinge' per xapi, das braucht einen zweiten Computer
  5. man benutzt Werkzeuge von Fremdanbietern, z.B. voiptools u.a., das braucht i.d.R. auch einen zweiten Computer oder eine Cloud irgendwas Anbindung
Den Aufruf einer CFD App / eines Anrufskriptes bei einem ausgehenden Anruf steht schon seit längerem auf der Wunschliste und wird vielleicht mal irgendwann von 3CX realisiert - vielleicht. Es wurde schon angesprochen und zur Kenntnis genommen ;)

Man kann auch Programme bauen die dann wirklich auf der 3CX selber als Dienst oder Daemon laufen. Diese Programme werden abseits des CFD und auch der 3CX Anrufskripte gebaut. Die können dann noch einiges mehr, z.B. eben auch sich in die laufende 3CX einklinken, gewisse Dinge überwachen und dann 'beliebige' Aktionen bei Events auslösen. So unter anderem auch das was du wünschst. Es gibt Beispiele dafür:
https://www.3cx.com/docs/call-api-linux/
Lies dir aber auch bitte das direkt hinter IMPORTANT durch.

Die Frage ist: wieviele Nebenstellen betrifft das gewünschte Szenario mit den sich ständig wechselnden ausgehenden Nummern?

Einige Dinge kann man im kleinen Rahmen mit gewissen Kunstgriffen im grauen Bereich handhaben.
 
@fxbastler vielen Dank für deine ausführliche Antwort, jetzt weiss ich einiges mehr.
Das Szenario würde aktuell nur zwei Nebenstellen betreffend. Längerfristig werden es evtl. zwei bis drei Nebenstellen mehr.
 
  1. Ist das eine Debian oder eine Windows 3CX?
  2. Hast du (unbegrenzt) Zugang zum Betriebssystem (einer shell)?

Edit:
Wenn 2 ja, dann könnte man Powershell auf der 3CX ansetzen. Damit geht das. Das ist auf einer Debian 3CX eine Grauzone. Das machen wir bei Bedarf. Ich würde da nicht erst mit einer kompletten C# Entwicklungsumgebung starten wollen (wie es der o.g. Link mit den 3CX Beispielen zeigt). Das machen wir schon länger nicht mehr. Davon wird auf einem Produktivsystem auch abgeraten.

Wenn 2 nein, dann geht das nur im CFD mit einem Power Dialer. Das wird voll und ganz unterstützt, hat aber so seine Tücken.

Die Option mit der 3CX Call Control API ist der saubere und voll unterstützte Weg. Das erfordert eine 3CX ENT Lizenz, einen zweiten Computer und einiges mehr an Aufwand ringsrum.
 
Zuletzt bearbeitet:

Statistik des Forums

Themen
44.750
Beiträge
233.641
Mitglieder
78.492
Neuestes Mitglied
dirk.kuttler