[Frage] Asterisk Outbound Notfallrufnummern

teyhouse

Neuer User
Mitglied seit
31 Mai 2010
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo Zusammen,

ich mach es kurz: Mir fehlt bisher noch der große grobe Überblick in Sachen Asterisk. Mein Ziel: In einer bestehenden Konfiguration funktionieren die Notfallrufnummern wie 110/112 nicht. In der Extensions.conf sieht der rausgehende Kontext wie folgt aus:

Code:
;------------------------------------------------------------------------;
;--- Context fuer ausgehende Gespraeche ---------------------------------;
;------------------------------------------------------------------------;
;
[outgoing]
;

exten => _XX.,1,NoOp(___ Ausgehender Anruf: ___)
exten => _XX.,2,NoOp(___ calleridnumstring = ${CALLERID(num)} ___)
exten => _XX.,3,ExecIf($[${FIELDQTY(CALLERID(num),#)} > 1]?Set(CALLERID(num)=${CUT(CALLERID(num),#,1)}))
exten => _XX.,4,NoOp(___System-CID: Name=${CALLERID(name)}, Nr=${CALLERID(num)} an Exten=${EXTEN} ___)
;
exten => _XX.,5,NoOp(Channelcut= ${CHANNEL:4:3} EXTEN=${EXTEN}  CALLERID(num) = ${CALLERID(num)} # CALLERID(name) = ${CALLERID(name)} # CALLERID(all) = ${CALLERID(all)} # CALLERID(dnid) = ${CALLERID(dnid)} # CALLERID(rdnis) = ${CALLERID(rdnis)} # SIPCALLID = ${SIPCALLID} # SIPUSERAGENT = ${SIPUSERAGENT} # DIALEDPEERNAME = ${DIALEDPEERNAME} # DIALEDPEERNUMBER = ${DIALEDPEERNUMBER} # CDR(clid) = ${CDR(clid)} # CDR(src) = ${CDR(src)} # CDR(dst) = ${CDR(dst)})
exten => _XX.,6,NoOp(CALLERID(ani) = ${CALLERID(ani)} # CALLINGANI2 = ${CALLINGANI2} # CALLINGPRES = ${CALLINGPRES} # CALLINGTNS = ${CALLINGTNS} # CALLINGTON = ${CALLINGTON} # TXTCIDNAME = ${TXTCIDNAME} # TXTCIDNAMESTATUS = ${TXTCIDNAMESTATUS} # ANI2 = ${ANI2} # CALLINGSUBADDR = ${CALLINGSUBADDR} # SIPURI = ${SIPURI} #  OSPINHANDLE = ${OSPINHANDLE} # OSPDEST = ${OSPDEST} # OSPCALLING = ${OSPCALLING} # OSPRESULTS = ${OSPRESULTS} # CDR(dstchannel) = ${CDR(dstchannel)} # CDR(uniqueid) = ${CDR(uniqueid)})
;
exten => _XX.,7,Set(CALLERPRES()=allowed)
exten => _XX.,8,GotoIf($[${CALLERID(num)} = ${EXTEN}]?9:10)
exten => _XX.,9,Set(CALLERID(num)=${CHANNEL:6:3})
exten => _XX.,10,GotoIf($[${LEN(${CALLERID(num)})} > 4]?11:12)
exten => _XX.,11,Set(CALLERID(num)=${CALLERID(num):1})
exten => _XX.,12,GotoIf($[${LEN(${CALLERID(num)})} < 4]?13:14)
exten => _XX.,13,Set(CALLERID(num)=0661${MSN}${CALLERID(num)})
;
exten => _XX.,14,NoOp(___Anruf: ${CALLERID(name)}, ${CALLERID(num)} an ${EXTEN} ___)
exten => _XX.,15,Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING}) 
exten => _XX.,16,Hangup() 
exten => _XX.,116,Busy(1) 
exten => _XX.,117,Wait(10)
exten => _XX.,118,Hangup()
;
;
;--- Alte Tests
;exten => _XX.,8,Set(CALLERID(num)=661${MSN}${CALLERID(num)})
;exten => _XX.,9,Goto(14)
;
;exten => _XX.,3,SetCDRUserField(Outgoing)
;exten => _XX.,3,Set(NEWCALLERIDNUM=${CUT(CALLERID(num),#,1)})
;exten => _XX.,4,Set(NEWEXTEN=${CUT(EXTEN,#,2)})
;exten => _XX.,5,NoOp(NEWCALLERIDNUM = ${NEWCALLERIDNUM})
;exten => _XX.,6,NoOp(NEWEXTEN = ${NEWEXTEN})
;
;exten => _XX.,7,SetCDRUserField(Outgoing)    ;--- funktioniert nicht mit Asterisk 1.6 !
;exten => _XX.,8,NoOp(Callerid setzen)
;exten => _XX.,9,Set(CALLERID(num)=661${MSN}${CALLERID(num)})
;exten => _XX.,8,ExecIf($[${CALLERID(num)} = ${EXTEN}]?Set(CALLERID(num)=${CHANNEL:6:3})
;exten => _XX.,9,ExecIf($[${LEN(${CALLERID(num)})} > 4]?Set(CALLERID(num)=${CALLERID(num):1})
;exten => _XX.,10,ExecIf($[${LEN(${CALLERID(num)})} < 4]?Set(CALLERID(num)=661${MSN}${CALLERID(num)})
;


[outgoing-mod]
;
exten => _XX.,1,NoOp(___ Ausgehender Anruf: (MOD)___)
exten => _XX.,2,NoOp(___ calleridnumstring = ${CALLERID(num)} ___)
;exten => _XX.,3,ExecIf($[${FIELDQTY(CALLERID(num),#)} > 1]?Set(CALLERID(num)=${CUT(CALLERID(num),#,1)}))
exten => _XX.,3,GotoIf($["${PID_${CHANNEL:4:3}}" != "${CHANNEL:4:3}"]?4:5)
exten => _XX.,4,Set(CALLERID(num)=${PID_${CHANNEL:4:3}})
exten => _XX.,5,NoOp(___System-CID: Name=${CALLERID(name)}, Nr=${CALLERID(num)} an Exten=${EXTEN} ___)
exten => _XX.,6,NoOp(Channelcut= ${CHANNEL:4:3} EXTEN=${EXTEN}  CALLERID(num) = ${CALLERID(num)} # CALLERID(name) = ${CALLERID(name)})
; - Qstats Info
exten => _XX.,7,Set(QDIALER_QUEUE=q-${CALLERID(num)})
exten => _XX.,8,Set(QDIALER_NUMBER=${EXTEN})
exten => _XX.,9,Set(QDIALER_AGENT=${CHANNEL:4:3})
exten => _XX.,10,Set(QDIALER_CHANNEL=DAHDI/g1/${QDIALER_NUMBER})
exten => _XX.,11,Set(QueueName=${QDIALER_QUEUE})
;exten => _XX.,n,MixMonitor(Q-${QDIALER_QUEUE}-${UNIQUEID}.WAV|b|)
exten => _XX.,12,NoOp(Qstats Outbound Params -> A:${QDIALER_AGENT} N:${QDIALER_NUMBER} Q:${QDIALER_QUEUE} Ch:${QDIALER_CHANNEL})
exten => _XX.,13,Set(ST=${EPOCH})
exten => _XX.,14,Set(GM=QDV-${QDIALER_AGENT})
exten => _XX.,15,Set(GLOBAL(${GM})=U)
exten => _XX.,16,Set(GLOBAL(${GM}ans)=0)
exten => _XX.,17,Macro(queuelog,${ST},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},ENTERQUEUE,-,${QDIALER_NUMBER})
; ----
exten => _XX.,18,Set(CALLERPRES()=allowed)
exten => _XX.,19,GotoIf($[${CALLERID(num)} = ${EXTEN}]?20:21)
exten => _XX.,20,Set(CALLERID(num)=${CHANNEL:6:3})
exten => _XX.,21,GotoIf($[${LEN(${CALLERID(num)})} > 4]?22:23)
exten => _XX.,22,Set(CALLERID(num)=${CALLERID(num):1})
exten => _XX.,23,GotoIf($[${LEN(${CALLERID(num)})} < 4]?24:25)
exten => _XX.,24,Set(CALLERID(num)=0661${MSN}${CALLERID(num)})
exten => _XX.,25,NoOp(___Anruf: ${CALLERID(name)}, ${CALLERID(num)} an ${EXTEN} ___)
;
exten => _XX.,26,Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING}gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}))
exten => _XX.,27,Set(CAUSECOMPLETE=${IF($["${DIALSTATUS}" = "ANSWER"]?C)})
;
exten => _XX.,28,Hangup()
exten => _XX.,129,Busy(1)
exten => _XX.,130,Wait(10)
exten => _XX.,131,Hangup()

; - Qstats Hangup Auswertung
; - Trapping call termination here
exten => h,1,NoOp( "Call exiting: status ${GLOBAL(${GM})} answered at: ${GLOBAL(${GM}ans)} DS: ${DIALSTATUS}"  )
exten => h,n,Goto(case-${GLOBAL(${GM})})
exten => h,n,Hangup()

; - Call unanswered
exten => h,n(case-U),Set(WT=$[${EPOCH} - ${ST}])
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},ABANDON,1,1,${WT})
exten => h,n,Hangup()

; - Call answered: agent/callee hung
exten => h,n(case-A),Set(COMPLETE=${IF($["${CAUSECOMPLETE}" = "C"]?COMPLETECALLER:COMPLETEAGENT)})
exten => h,n,Set(WT=$[${GLOBAL(${GM}ans)} - ${ST}])
exten => h,n,Set(CT=$[${EPOCH} - ${GLOBAL(${GM}ans)}])
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},${COMPLETE},${WT},${CT})
exten => h,n,Hangup()

Meine Idee um die Notfallrufnummern zu ergänzen wäre folgende Änderung ganz am Anfang:
exten => 110,1,Dial(${EXTEN}/110)
exten => 9110,1,Dial(${EXTEN}/110)

Ich bin mir leider nicht sicher, wie ich den Trunk ansprechen muss bzw. wo ich die entsprechende Definition konfiguriert wird. Irgendwelche Ideen? Ich will einfach nur direkt die Wahl von Notfallrufnummern ermöglichen.

Mein Verständnis: ${EXTEN} = Trunk...

Danke!
 
Zuletzt bearbeitet:
So wird das noch nicht passen.
Aber davon abgesehen: Sowohl in [outgoing], wie auch in [outgoing-mod] müsste nach kurzer Durchsicht die Anwahl zu 110 bzw. 112 funktionieren (es sei denn, da gibt es weitere, ungepostetete Anteile, die diese Ziele abfangen.
Am besten wäre es, wenn Du mal einen Testanruf auf eine der Nummern machst (dabei vorher das Dial-Command ändern von
Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING})
in NoOP(Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING}))
bzw. Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING}gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}))
in NoOp(Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING}gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST})))
damit es keinen Ärger wegen Notrufmißbrauchs geben kann, bitte vor Test auf der Asterisk-Console ein core set verbose 5 machen und dann das Ergebnis der CLI-Ausgabe hier posten.
 
Danke für fixe Rückmeldung - Glücklicherweise haben wir Verbose Levle 9 auf Log-Ebene noch aufgehoben - wir mal der Auszug aus dem Gesprächsaufbau:
Code:
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal-mod:1] NoOp("SIP/120-00023437", "___ Call Preparation, checking fields... (MOD)___") in new stack
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal-mod:2] NoOp("SIP/120-00023437", "___ EXTENstring = 112 ___") in new stack
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal-mod:3] NoOp("SIP/120-00023437", "___ CIDNUMstring = 120 ___") in new stack
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal-mod:4] ExecIf("SIP/120-00023437", "0?Set(NEWEXTEN=112)") in new stack
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal-mod:5] ExecIf("SIP/120-00023437", "0?Set(PID_120=112)") in new stack
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal-mod:6] GotoIf("SIP/120-00023437", "0?7:8") in new stack
VERBOSE[3975] pbx.c:     -- Goto (from-internal-mod,112,8)
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal-mod:8] Goto("SIP/120-00023437", "from-internal,112,1") in new stack
VERBOSE[3975] pbx.c:     -- Goto (from-internal,112,1)
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal:1] GotoIf("SIP/120-00023437", "1?5:2") in new stack
VERBOSE[3975] pbx.c:     -- Goto (from-internal,112,5)
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal:5] SIPAddHeader("SIP/120-00023437", ""Alert-Info:<http://>;info=Internal\"") in new stack
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal:6] Dial("SIP/120-00023437", "SIP/112,,otTgwW") in new stack
WARNING[3975] chan_sip.c: Purely numeric hostname (112), and not a peer--rejecting!
WARNING[3975] app_dial.c: Unable to create channel of type 'SIP' (cause 20 - Unknown)
VERBOSE[3975] app_dial.c:   == Everyone is busy/congested at this time (1:0/0/1)
VERBOSE[3975] pbx.c:     -- Executing [112@from-internal:7] Hangup("SIP/120-00023437", "") in new stack

Sprich Nebenstelle 120 versucht die 112 anzurufen. 110 sieht identisch aus. NoOp = No Operation richtig? Wenn du daraus nicht schlau willst schaue ich sonst ggf. nochmal näher oder sag mir sonst was du sehen müsstest im Fehlerfall.

Danke vorab!
 
Ok, da liegt der Hund begraben: Der Anruf an die 110 (bzw. 112) landet im Kontext from-internal-mod und wird dort abschließend behandelt, weil der Asterisk "glaubt", dass es sich um eine interne Nebenstelle handelt. Damit landet das Gespräch nicht in dem Kontext, in den es gehört. Damit das Problem gelöst werden kann, muss man sich nun eben des Kontextes from-internal-mod annehmen und diesen korrigieren. Wenn Du ihn hier posten magst, sollten wir das noch auf Forum-Basis schnell hinbekommen können ...
 
Was das Thema Notrufe angeht bin ich vielleicht beruflich bedingt seeeehr sensibel. Leider vergessen das viele bei der Planung einer Telefonanlage.

Meine Idee um die Notfallrufnummern zu ergänzen wäre folgende Änderung ganz am Anfang:
exten => 110,1,Dial(${EXTEN}/110)
exten => 9110,1,Dial(${EXTEN}/110)

Ich persönlich finde das die bessere Variante, die Notrufnummern direkt zu definieren und auch getrennt zu behandeln. Das Kommando wäre dann vergleichbar mit dem "normalen" rauswählen
exten => 112,1,Dial(DAHDI/g1/${EXTEN})

Getrennt behandeln deshalb, damit auch Nebenstellen ohne externe Wahlberechtigung Notrufe tätigen können und, was imho das wichtigste ist, dass ein Notruf auf jeden Fall eine Amtsleitung bekommt. Entweder sollten Notrufe gleich über eine dafür reservierte Leitung gehen, oder wenn alle Leitungen belegt sind eine dafür freigeschaufelt werden. Bei uns im Hauptbetrieb ist das ihmo eine absolute Katastrophe, 40 Nebenstellen und 2 ISDN Anschlüsse. Wenn 4 Leute extern telefonieren, was ziemlich häufig passiert, kann man keinen Notruf mehr absetzen.
 
@rentier-s:
D'accord. Letztlich würde man immer die Notrufnummern priorisiert in den Kontext einbinden, den die Telefone intern verwenden. Beim OP ist hier aktuell das Problem, dass Notrufe wie intrne Nebenstellen behandelt werden, die dann naturgemäß nicht existieren ...
Zum Thema "Leitung reservieren": Bei einer ISDN-Anbindung (ohne weiteren Fallback) kann man höchstens dafür sorgen, dass bei n Nutzkanälen immer maximal n-1 belegt sind und nur der Notruf das Recht hat, den n-ten Kanal zu nutzen. Dazu muss man die Kanalüberwachung aber beidseitig (also In- und Outbound) implementieren, da sonst ein von intern freigehaltener Kanal ggf. von einem einkommenden Anruf belegt wird. Bei 4 Kanälen ist das dann schon schwierig, wenn man entsprechend viele Leute hat, die externe Gespräche führen ...
 
Danke für deine Rückmeldung. Hier der fehlende Kontext:

Code:
;------------------------------------------------------------------------;
;--- Context f. SIP-Phones ----------------------------------------------;
;------------------------------------------------------------------------;
;
[from-internal-mod]
;
exten => _XX.,1,NoOp(___ Call Preparation, checking fields... (MOD)___)
exten => _XX.,2,NoOp(___ EXTENstring = ${EXTEN} ___)
exten => _XX.,3,NoOp(___ CIDNUMstring = ${CALLERID(num)} ___)
exten => _XX.,4,ExecIf($[${FIELDQTY(EXTEN,#)} > 1]?Set(NEWEXTEN=${CUT(EXTEN,#,${FIELDQTY(EXTEN,#)})}))
;exten => _XX.,5,ExecIf($[${FIELDQTY(CALLERID(num),#)} > 1]?Set(PID_${CHANNEL:4:3}=${CUT(CALLERID(num),#,1)}))
exten => _XX.,5,ExecIf($[${FIELDQTY(EXTEN,#)} > 1]?Set(PID_${CHANNEL:4:3}=${CUT(EXTEN,#,1)}))
;?
;exten => _XX.,6,ExecIf($[${FIELDQTY(EXTEN,#)} = 0]?Set(PID_${CHANNEL:4:3}=${CHANNEL:4:3}))
;?
exten => _XX.,6,GotoIf($["${NEWEXTEN}" != ""]?7:8)
;
exten => _XX.,7,Goto(from-internal,${NEWEXTEN},1)
;exten => _XX.,7,Goto(outgoing-mod,${NEWEXTEN},1)
;
exten => _XX.,8,Goto(from-internal,${EXTEN},1)
;exten => _XX.,8,Goto(outgoing-mod,${EXTEN},1)
;
include => custom
include => intern
;include => outgoing-mod
include => outgoing
include => parkedcalls
include => fax
;
 
Folgen wir mal dem Hinweis von rentier-s. Dann hat man - basierend auf dem Kontext from-internal-mod mehrere Möglichkeiten:

Entweder, man fügt eine Spezialregel direkt in den Kontext ein, also etwa so (irgendwelche Sonderbehandlungen habe ich jetzt mal weggelassen):

Code:
[from-internal-mod]
;
exten => _11[02],1,NoOp(Notrufe)
exten => _11[02],n,Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING}) 

exten => _XX.,1,NoOp(___ Call Preparation, checking fields... (MOD)___)
exten => _XX.,2,NoOp(___ EXTENstring = ${EXTEN} ___)
exten => _XX.,3,NoOp(___ CIDNUMstring = ${CALLERID(num)} ___)
exten => _XX.,4,ExecIf($[${FIELDQTY(EXTEN,#)} > 1]?Set(NEWEXTEN=${CUT(EXTEN,#,${FIELDQTY(EXTEN,#)})} ))
;exten => _XX.,5,ExecIf($[${FIELDQTY(CALLERID(num),#)} > 1]?Set(PID_${CHANNEL:4:3}=${CUT(CALLERID(num),#,1)}) )
exten => _XX.,5,ExecIf($[${FIELDQTY(EXTEN,#)} > 1]?Set(PID_${CHANNEL:4:3}=${CUT(EXTEN,#,1)}))
;?
;exten => _XX.,6,ExecIf($[${FIELDQTY(EXTEN,#)} = 0]?Set(PID_${CHANNEL:4:3}=${CHANNEL:4:3}))
;?
exten => _XX.,6,GotoIf($["${NEWEXTEN}" != ""]?7:
;
exten => _XX.,7,Goto(from-internal,${NEWEXTEN},1)
;exten => _XX.,7,Goto(outgoing-mod,${NEWEXTEN},1)
;
exten => _XX.,8,Goto(from-internal,${EXTEN},1)
;exten => _XX.,8,Goto(outgoing-mod,${EXTEN},1)
;
include => custom
include => intern
;include => outgoing-mod
include => outgoing
include => parkedcalls
include => fax
;

oder aber man fängt die 11[02] im Kontext from-internal ab (an den ja in Prio 7 bzw. 8 verzweigt wird), diesen Kontext hast Du uns ja nicht gepostet.

Alternativ läßt sich das Ganze auch in einen eigenen Kontext packen, den man hier in from-internal-mod inkludiert.

Allerdings ist bei dem geposteten Aufbau und dem verwendeten Pattern _XX. schon fraglich, ob und wann die inkludierten Kontexte überhaupt greifen. Das sieht für meine Augen im Moment alles nach einem "sehr gewachsenen" Dialplan aus, bei dem allenfalls für einzelne Fragestellungen der Überblick schweierig (geworden) ist ...
 
Danke für deine Rückmeldung. Du hast die Sache mit der Komplexität schon richtig erkannt: Der Dialplan bzw. die ganze Extension als solche ist extrem speziell und leider auch nicht von mir Konzipiert. Größere Änderungen werden da nicht mehr erfolgen, das Teil muss noch 1-2 Jahre halten und dann wird vermutlich sowieso auf eine 3CX umgestellt (wo ich mich dann auch wieder auskenne).

Hier noch der fehlende Kontext:
[from-internal]
;
include => custom
include => intern
include => outgoing-mod
include => parkedcalls
;

Der Einfachheit halber würde ich mich jetzt fast für deinen Vorschlag zum Kontext from-internal-mod entscheiden. Mir fehlt leider die Zeit um mich entsprechend ausführlich mit Asterisk zu beschäftigen, wie ich es vielleicht gerne würde. Ich lasse die Erweiterung mal testen.

Frage dazu:
exten => _11[02],1, NoOp(Notrufe)
exten => _11[02],n,Dial(DAHDI/g1/${EXTEN},,${RINGOPTIONS_OUTGOING})

Sind die von dir vorgeschlagenen Änderungen. NoOp führt doch aber zu keiner Funktion oder? Ich würde die Sache gerne final scharf schalten, so dass die wichtigen Notrufnummern 110, 112 usw. funktionieren.

Gruß
Teyhouse
 
Das NoOp hab' ich nur der Übersicht halber reingetan, das kann man auch weglassen ...
 
Alles klar, verstanden. Dann müssen wir den Notruf jetzt mal produktiv testen. Mit dem schnellen Hinweis "DAS IST KEIN NOTFALL" sollte das ja kein Problem sein, hoffen ich zumindest. Wie dem auch sei: Ich teste und gebe nochmal Rückmeldung.

//Edit: Ist gelöst. Vielen Dank!
 
Zuletzt bearbeitet:

Statistik des Forums

Themen
246,206
Beiträge
2,248,023
Mitglieder
373,770
Neuestes Mitglied
TomTom55
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
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.