[Gelöst] Dialplan - Anpassen an etwas ... "Spezielles"...

Tiieto

Neuer User
Mitglied seit
16 Jan 2021
Beiträge
140
Punkte für Reaktionen
6
Punkte
18
Hallo zusammen...

Ich habe vor ein paar Monaten meine Asterisk Installation mit Hilfe dieses Forums erfolgreich umsetzen können... Vielen Dank hierfür an alle Beteiligten..

Jetzt entsteht allerdings ein "Sonderfall" der mich an meine (Wissens-) Grenzen führt...
Evtl weiß ja jemand rat?

Ich hab im Keller ein SIP Telefon stehen, welches sich zusammen mit den SIP DECT Telefonen eine eingehende Rufnummer Teilen soll...
Das SIP Telefon im Keller hat allerdings auch noch ne eigene eingehende Rufnummer..

Damit das Telefon im Keller nicht klingelt wenn da keiner in der nähe ist (Im Keller ist mein Arbeitszimmer) schalte ich das Telefon beim verlassen des Kellers in den DND (do not desturb) modus, was bewirkt, das in die VoiceMail weitergeleitet wird..
Wie kann ich nun verhindern, das bei nem Anruf über die Rufnummer die mit den DECT Telefonen zusammen hängt, der DND Modus in die Voicemail weiterleitet und somit verhindert das die DECT Telefone Klingeln?

Boah verworren... Hoffentlich einigermaßen verständlich?

Die 1000 ist das Telefon im Arbeitszimmer
1001 & 1002 sind die Mobilteile.

Dialplan (aktuell):
Code:
[von-voip-provider]  ; externe Anrufe verteilen
exten => 4711,1,NoOp(${CALLERID(num)} ruft an (${EXTEN}))
same  => n,Set(DIALGROUP(Main,add)=SIP/1001)    ; Mobilteil 1
same  => n,Set(DIALGROUP(Main,add)=SIP/1002)    ; Mobilteil 2
same  => n,Dial(${DIALGROUP(Main)},30,tT)
same  => n,VoiceMail(3000)

exten => 4712,1,NoOp(${CALLERID(num)} ruft an (${EXTEN}))
same  => n,Dial(SIP/1000,30,tT)             ; Arbeitszimmer
same  => n,VoiceMail(1000)                    ; optionen: s = silent, b = busy, u = unavailable

;die eingehenden Rufnummern sind zensiert & haben real jeweils 7 stellen. (nur falls das wichtig sein sollte)

Die 1000 soll also über die 4711 & 4712 erreichbar sein
Die 1001 & 1002 nur über die 4711
Der DND Modus vom 1000 darf die 1001 & 1002 nicht beeinflussen...

LG Tiieto...
 
Moinsen


Frage: Befindet sich in der AstDB ein Eintrag, wenn DnD aktiv?
Check: asterisk -rx ‘database show’ | grep DND
( Als root in der bash ausführen )
...dann sollte der Dialplan das auch checken können.
Das geht in der Extension mit...
...mit DB_EXISTS() kann auch mittels ExecIF() oder GotoIf() bedingt verzweigt werden.
 
Damit komm ich gerade nicht klar...

Im CLI zeigt er mir bei
database show DND
= 0 results

Ist das das worauf du hinaus willst?

Die gesamte Datenbank sieht so aus (noch recht winzig)

Code:
VoiP-Pi*CLI> database show
/SIP/Registry/1000                                : 192.168.1.243:12590:3600:1000:sip:[email protected]:12590;transport=TLS
/SIP/Registry/1001                                : 192.168.1.241:11927:3600:1001:sip:[email protected]:11927;transport=TLS
/SIP/Registry/1002                                : 192.168.1.241:11927:3600:1002:sip:[email protected]:11927;transport=TLS
/SIP/Registry/2000                                : 192.168.1.244:5060:300:2000:sip:[email protected]:5060
/SIP/Registry/2001                                : 192.168.1.244:5060:300:2001:sip:[email protected]:5060
/dialgroup/Main                                   : SIP/1001&SIP/1002      
/pbx/UUID                                         : <hash>
7 results found.
 
Zuletzt bearbeitet:
Bei DnD kommt ein bestimmter SIP-Status zurück (bei jedem Telefon-Gerät anders, aber das Gerät ändert sich ja nicht). Den fängst Du über $HANGUPCAUSE ab und wählst dann erneut über GotoIf nur die DND-freie Extension. So würde ich es auf die Schnelle machen. Übrigens: So kannst Du auch ein Wegdrücken (Abweisen, Englisch: Reject) programmieren – dann kannst Du an einem Gerät wegdrücken, das andere klingelt nicht weiter und das Gespräch landet im richtigen Zustand (Besetzt, Warteschleife, Ansage oder Anrufbeantworter).
Befindet sich in der AstDB ein Eintrag, wenn DnD aktiv?
DnD ist kein Zustand sondern ein Ereignis, welches nur bei einem ankommenden Anruf durch das Telefongerät erzeugt wird. Digium Asterisk weiß also nicht, in welchem Zustand das Telefon ist. Will man das Zustandsbasiert haben, müsste man das aufwendig über Notification/Presence realisieren – wenn das Telefongerät das überhaupt kann.
 
Hallo Zusammen...

Sorry, hab erst jetzt mal die Zeit gefunden daran weiter zu basteln..
Das SIP Telefon, welches sich ab und an im DND zustand befindet ist ein Yealink T57W.

der Herausgefundene Hangupcause bei diesem Telefon im DND zustand ist 19..
so ermittelt:

Code:
exten => 1000,1,NoOp(${CALLERID(num)} calling ${EXTEN})
same  => n,Dial(SIP/${EXTEN}, 30,tT)
same  => n,NoOp(HANGUPCAUSE is ${HANGUPCAUSE})

Ausgabe der CLI:
Code:
-- Executing [1000@from-my-phones:3] NoOp("SIP/1001-0000005f", "HANGUPCAUSE is 19") in new stack

mir ist jetzt noch nicht klar, (knoten im Kopf) wie ich da jetzt ein Gotoif einbauen muss, damit das ganze auch funktioniert...

Ich denke mal ich muss erstmal alle 3 Telefone klingeln lassen, damit das Telefon im DND zustand auflegen kann um so den hangupcause zu ermitteln.
Um dann anschließend mit gotoif($hangupcause = 19) irgendwie die verbleibenden Telefone nochmal bimmeln zu lassen..

soweit die Logik.. Nur die Syntax von gotoif() macht mir noch Kopfschmerzen... Da hängts gerade etwas...

Mein 1. Versuch sieht so aus (ja ich weiß ist noch auskommentiert):
Code:
;same  => n,Dial((SIP/1000&SIP/1001&SIP/1002),30,tT) ;Arbeitszimmer & beide Mobilteile klingeln lassen
;same  => n,GotoIf($[${HANGUPCAUSE} = 19]?true:false) ; DND Zustandsabfrage
;same  => n(true),Dial((SIP/1001&SIP/1002),30,tT) ; DND aktiv => Mobilteile anrufen
;same  => n(false),Dial((SIP/1000&SIP/1001&SIP/1002),30,tT) ; DND inaktiv => alle anrufen

Wobei.. Die letzte Zeile würde ja nie ausgeführt werden.. *grübel*

Anderer Lösungsansatz...

Die Dialplanfuntionen werden ja zum Teil in die DB geschrieben...
So steht zum Beispiel die Dialgroup (aktuell bestehend aus 1001 & 1002) in der Datenbank... (siehe Post #3)
Ist es evtl möglich via Tastendruck am Telefon selbst den Datenbankeintrag der Dialgroup zu ändern?
Also quasi den entsprechenden Teilnehmer neu in die Gruppe einzufügen & zu entfernen?
Dann müsste halt immer nur die entsprechende Dialgroup angerufen werden & nur die Telefone die noch aktiv in der Dialgroup sind klingeln dann auch...

LG
 
Zuletzt bearbeitet:
die Syntax von gotoif() macht mir noch Kopfschmerzen
Dein Problem ist genereller, wie man programmiert. Das können wir hier über einen Internet-Forum nicht leisten. Mein Tipp ist daher ein Buch zu kaufen (oder ein Web-Tutorial zu durchlaufen), dass sich speziell mit dem Asterisk-Dialplan beschäftigt. Wenn Du noch chan_sip verwndest, nimmst Du die vorherige Ausgabe des Buches bzw. einen Kurs für Asterisk 13. Vereinfach gesagt, geht die Logik so: Bekommst Du DnD zurück, dann wählst Du alle anderen außer diesem Yealink. In allen anderen Fällen, legst Du über Hangup auf.
 
Vereinfach gesagt, geht die Logik so: Bekommst Du DnD zurück, dann wählst Du alle anderen außer diesem Yealink. In allen anderen Fällen, legst Du über Hangup auf.
Ist das nicht genau das was ich da schon geschrieben habe?
Soweit ich das verstanden habe, muss ich aber erstmal einen Anruf absetzen um den DND status herauszubekommen, oder seh ich das falsch?
 
Dein Wahlplan sieht auf den ersten Blick doch gut aus.
Also Wahr nach dem ?true und wenn nicht :false

Die Logik von Dial() ist in der nächsten Priorität weiter zu machen, falls es keine h-Extension gibt, die bei jedem Hangup() angesprungen wird.
Eventuell bringt es auch was, wenn du die untereinander machst, frei nach...
Code:
same  => n,Dial(SIP/1000,30,tT) ;Arbeitszimmer versuch
same  => n,Dial(SIP/1001&SIP/1002,30,tT) ; Mobilteile anrufen
 
Hi Koyaanisquatsi..

Das hatte ich auch schon überlegt...
Hat aber den Nachteil das beim vergessen des DND einschalten im Arbeitszimmer erstmal 30 sek lang nur das Telefon im Arbeitszimmer bimmelt bevor es dann auf die Mobilteile weitergeleitet wird...

Der aktuelle Dialplan funktioniert erstmal, zumindest nach Korrektur einer Fehlermeldung in der CLI..

Code:
[von-voip-provider]  ; externe Anrufe verteilen
exten => 4711,1,NoOp(${CALLERID(num)} ruft an (${EXTEN}))
same  => n,Dial(SIP/1000&SIP/1001&SIP/1002, 30,tT)
same  => n,NoOp(HANGUPCAUSE is ${HANGUPCAUSE})
same  => n,GotoIf($[${HANGUPCAUSE} = 19]?true:false)
same  => n(true),Dial(SIP/1001&SIP/1002, 30,tT)
same  => n(false),hangup()

Allerdings zeigt die CLI den NoOp mit Hangupcause nicht an... Kann beim testen der Geschichte das ganze also nicht so wirklich 100%ig nachvollziehen...


LG
 
Ach, hast du auch das Problem, dass Asterisk auf "Teufel komm raus" keine Meldungen mehr ausgibt?
Weder mit: core set verbose 9
...noch mit: core set debug 9
Und auch: sip set debug on
...und: rtp set debug on
...bringen seit Update auf: Asterisk 16.2.1~dfsg-1+deb10u2 built by nobody @ buildd.debian.org on a unknown running Linux on 2020-08-26 22:53:40 UTC
...nichts mehr.

Eine Lösung kenn ich auch nicht :(
Außer, dass der CDR noch was ausgibt, wenn aktiv, beispielhaft...
Code:
"""1002"" <1005>","1005","0","osmc","SIP/1005-00000021","","WaitExten","7200,m","2021-04-30 16:55:17","2021-04-30 16:55:17","2021-04-30 17:01:19","361.194735","361.186671","ANSWERED","DOCUMENTATION","","1619794517.77","",34
 
Och naja...

Die anfänglichen NoOp's mit
Code:
NoOp(${CALLERID(num)} ruft an (${EXTEN}))
schmeisst er noch ganz normal raus...
Aber die zweite Anweisung mit
Code:
same  => n,NoOp(HANGUPCAUSE is ${HANGUPCAUSE})
zumindest im aktuellen Fall eben nicht...

Ich starte die Asterisk CLI auch >>immer<< mit
Code:
 asterisk -rvvvvvvvvv

allerdings meine ich mich zu erinnern in irgendeiner Config Datei ein paar Sachen zusätzlich eingeschaltet zu haben...
Vielleicht beeinflusst das die Ausgabe aktuell nicht... Ich muss da nochmal schauen was ich da wo gemacht habe..
Ist n paar tage her...
 
Ich starte asterisk' Konsole mit 9d's und 9v's trotzdem kommt nichts mehr :(
Mit core show settings seh ich das auch...
Code:
...
  Root console verbosity:      3
  Current console verbosity:   9
  Debug level:                 9
...
 
Habs gefunden...

die /etc/asterisk/logger.conf war es...

da hab ich unter [logfiles] die Zeilen modifiziert...

Code:
console => notice,warning,error,verbose(7),fax,security
messages => notice,warning,error,verbose(7),fax,security

vielleicht isses das schon?

Änderungen nicht vergessen mit logger reload im CLI neu zu laden...

Ich bin im aktuellen fall erstmal davon ausgegangen, das ich da noch n Fehler drin habe und deswegen die zweite NoOp nicht durchkommt...
Da meine Asterisk skills aber gerade mal an der Oberfläche kratzen, kann ich das jetzt weder bestätigen noch dementieren...
 
Zuletzt bearbeitet:
  • Like
Reaktionen: koyaanisqatsi
Supperklasse! - Hat funktioniert!

Jetzt kann ich auch wieder besseren Support leisten, mit den Ausgaben vor den Augen.

Tipp: Wenn du fehlerverdächtige Extensions im Visier hast, teste die auch mal mit: dialplan show extension@context
Beispielhaft:
Code:
osmc*CLI> dialplan show 100@osmc
[ Context 'osmc' created by 'pbx_config' ]
  '100' (CID match '_100[0-9]') =>  1. answer(250)                                [extensions.conf:58]
                    2. Set(CALLERID(name)=${SIP_HEADER(P-Preferred-Identity):5:4}) [extensions.conf:59]
                    3. sayunixtime(,CET,akM,j)                   [extensions.conf:60]
                    4. goto(2)                                    [extensions.conf:61]

-= 1 extension (4 priorities) in 1 context. =-
...sind alle Prioritäten vorhanden? - Wenn nicht, wurden/werden fehlerhafte Prioritäten nach "dialplan reload" entfernt/ignoriert.

Apropos, zum Testen der 1000 auf DnD kannste im Dial das Timeout verwenden...
Rich (BBCode):
exten => 4711,1,NoOp(${CALLERID(num)} ruft an (${EXTEN}))
same  => n,Dial(SIP/1000,2,tT)
same  => n,NoOp(HANGUPCAUSE is ${HANGUPCAUSE})
same  => n,GotoIf($[${HANGUPCAUSE} = 19]?true:false)
same  => n(true),Dial(SIP/1001&SIP/1002, 30,tT)
same =>  n(exit),Hangup()
same  => n(false),Dial(SIP/1000&SIP/1001&SIP/1002, 30,tT)

Übrigens, statt NoOp() benutze ich lieber Verbose(), da auch angegeben werden kann bei welchen Verboselevel die Ausgabe erfolgt...
Code:
Verbose(1, Alles wird gut)
...feuert ab/bei: core set verbose 1
 
Zuletzt bearbeitet:
Hmm...
Dialplan Show sieht ganz gut aus..

Code:
VoiP-Pi*CLI> dialplan show 4711@von-voip-provider
[ Context 'von-voip-provider' created by 'pbx_config' ]
  '4711' =>         1. NoOp(${CALLERID(num)} ruft an (${EXTEN}))  [extensions.conf:41]
                    2. Dial(SIP/1000&SIP/1001&SIP/1002, 30,tT)    [extensions.conf:48]
                    3. NoOp(HANGUPCAUSE is ${HANGUPCAUSE})        [extensions.conf:49]
                    4. GotoIf($[${HANGUPCAUSE} = 19]?true:false)  [extensions.conf:50]
     [true]         5. Dial(SIP/1001&SIP/1002, 30,tT)             [extensions.conf:51]
     [false]        6. hangup()                                   [extensions.conf:52]

-= 1 extension (6 priorities) in 1 context. =-

Scheint alles da zu sein..

Dein Vorschlag klappt aber auch hervorragend... Sogar inclusive Ausgabe der Hangupcause was bei meiner Variante nicht so toll geklappt hat...

Hier mal die komplette Ausgabe (von >dialplan show< & 2 Testanrufen) der CLI einmal mit & einmal ohne DND am entsprechenden Telefon...
Sieht hervorragend aus... ;)

Das ganze hat jetzt natürlich den Nachteil das im Arbeitszimmertelefon (SIP/1000) die Anrufliste "vollgespamt" wird...

Code:
VoiP-Pi*CLI> dialplan show 4711@von-voip-provider
[ Context 'von-voip-provider' created by 'pbx_config' ]
  '4711' =>         1. NoOp(${CALLERID(num)} ruft an (${EXTEN}))  [extensions.conf:41]
                    2. Dial(SIP/1000, 2,tT)                       [extensions.conf:48]
                    3. NoOp(HANGUPCAUSE is ${HANGUPCAUSE})        [extensions.conf:49]
                    4. GotoIf($[${HANGUPCAUSE} = 19]?true:false)  [extensions.conf:50]
     [true]         5. Dial(SIP/1001&SIP/1002, 30,tT)             [extensions.conf:51]
     [exit]         6. hangup()                                   [extensions.conf:52]
     [false]        7. Dial(SIP/1000&SIP/1001&SIP/1002, 30,tT)    [extensions.conf:53]

-= 1 extension (7 priorities) in 1 context. =-
  == Using SIP RTP CoS mark 5
       > 0x73a0d420 -- Strict RTP learning after remote address set to: 192.168.1.1:7080
[May  4 09:29:22] SECURITY[629]: res_security_log.c:114 security_event_stasis_cb: SecurityEvent="SuccessfulAuth",EventTV="2021-05-04T09:29:22.712+0200",Severity="Informational",Service="SIP",EventVersion="1",AccountID="4711",SessionID="0x73a05a08",LocalAddress="IPV4/UDP/192.168.1.240/5060",RemoteAddress="IPV4/UDP/192.168.1.1/5060",UsingPassword="1"
    -- Executing [4711@von-voip-provider:1] NoOp("SIP/4711-0000002d", "017xxxxxxxx ruft an (4711)") in new stack
    -- Executing [4711@von-voip-provider:2] Dial("SIP/4711-0000002d", "SIP/1000, 2,tT") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/1000
  == Extension Changed 1000[intern-device-hints] new state Ringing for Notify User 1000
    -- SIP/1000-0000002e redirecting info has changed, passing it to SIP/4711-0000002d
    -- SIP/1000-0000002e is busy
  == Extension Changed 1000[intern-device-hints] new state Idle for Notify User 1000
  == Everyone is busy/congested at this time (1:1/0/0)
    -- Executing [4711@von-voip-provider:3] NoOp("SIP/4711-0000002d", "HANGUPCAUSE is 19") in new stack
    -- Executing [4711@von-voip-provider:4] GotoIf("SIP/4711-0000002d", "1?true:false") in new stack
    -- Goto (von-voip-provider,4711,5)
    -- Executing [4711@von-voip-provider:5] Dial("SIP/4711-0000002d", "SIP/1001&SIP/1002, 30,tT") in new stack
  == Using SIP RTP CoS mark 5
  == Using SIP RTP CoS mark 5
    -- Called SIP/1001
  == Extension Changed 1001[intern-device-hints] new state Ringing for Notify User 1000
    -- Called SIP/1002
    -- SIP/1002-00000030 connected line has changed. Saving it until answer for SIP/4711-0000002d
  == Extension Changed 1002[intern-device-hints] new state Ringing for Notify User 1000
    -- SIP/1001-0000002f connected line has changed. Saving it until answer for SIP/4711-0000002d
    -- SIP/1001-0000002f is ringing
  == Extension Changed 1001[intern-device-hints] new state Ringing for Notify User 1000
    -- SIP/1002-00000030 is ringing
  == Extension Changed 1002[intern-device-hints] new state Ringing for Notify User 1000
  == Extension Changed 1001[intern-device-hints] new state Idle for Notify User 1000
  == Spawn extension (von-voip-provider, 4711, 5) exited non-zero on 'SIP/4711-0000002d'
  == Extension Changed 1002[intern-device-hints] new state Idle for Notify User 1000
  == Using SIP RTP CoS mark 5
       > 0x73a0d420 -- Strict RTP learning after remote address set to: 192.168.1.1:7082
[May  4 09:30:57] SECURITY[629]: res_security_log.c:114 security_event_stasis_cb: SecurityEvent="SuccessfulAuth",EventTV="2021-05-04T09:30:57.967+0200",Severity="Informational",Service="SIP",EventVersion="1",AccountID="4711",SessionID="0x73a05a08",LocalAddress="IPV4/UDP/192.168.1.240/5060",RemoteAddress="IPV4/UDP/192.168.1.1/5060",UsingPassword="1"
    -- Executing [4711@von-voip-provider:1] NoOp("SIP/4711-00000031", "017xxxxxxxx ruft an (4711)") in new stack
    -- Executing [4711@von-voip-provider:2] Dial("SIP/4711-00000031", "SIP/1000, 2,tT") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/1000
  == Extension Changed 1000[intern-device-hints] new state Ringing for Notify User 1000
    -- SIP/1000-00000032 is ringing
  == Extension Changed 1000[intern-device-hints] new state Ringing for Notify User 1000
    -- Nobody picked up in 2000 ms
  == Extension Changed 1000[intern-device-hints] new state Idle for Notify User 1000
    -- Executing [4711@von-voip-provider:3] NoOp("SIP/4711-00000031", "HANGUPCAUSE is 0") in new stack
    -- Executing [4711@von-voip-provider:4] GotoIf("SIP/4711-00000031", "0?true:false") in new stack
    -- Goto (von-voip-provider,4711,7)
    -- Executing [4711@von-voip-provider:7] Dial("SIP/4711-00000031", "SIP/1000&SIP/1001&SIP/1002, 30,tT") in new stack
  == Using SIP RTP CoS mark 5
  == Using SIP RTP CoS mark 5
  == Using SIP RTP CoS mark 5
    -- Called SIP/1000
    -- Called SIP/1001
  == Extension Changed 1000[intern-device-hints] new state Ringing for Notify User 1000
    -- Called SIP/1002
    -- SIP/1002-00000035 connected line has changed. Saving it until answer for SIP/4711-00000031
    -- SIP/1001-00000034 connected line has changed. Saving it until answer for SIP/4711-00000031
    -- SIP/1000-00000033 connected line has changed. Saving it until answer for SIP/4711-00000031
  == Extension Changed 1001[intern-device-hints] new state Ringing for Notify User 1000
  == Extension Changed 1002[intern-device-hints] new state Ringing for Notify User 1000
    -- SIP/1001-00000034 is ringing
  == Extension Changed 1001[intern-device-hints] new state Ringing for Notify User 1000
    -- SIP/1000-00000033 is ringing
  == Extension Changed 1000[intern-device-hints] new state Ringing for Notify User 1000
    -- SIP/1002-00000035 is ringing
  == Extension Changed 1002[intern-device-hints] new state Ringing for Notify User 1000
  == Extension Changed 1000[intern-device-hints] new state Idle for Notify User 1000
  == Extension Changed 1001[intern-device-hints] new state Idle for Notify User 1000
  == Spawn extension (von-voip-provider, 4711, 7) exited non-zero on 'SIP/4711-00000031'
  == Extension Changed 1002[intern-device-hints] new state Idle for Notify User 1000
 
Zuletzt bearbeitet:
Okay, die unerwünschten verpassten Anrufe werden normalerweise nicht mehr angezeigt/geloggt, wenn dem Phone noch ein SIP mit...
Rich (BBCode):
Reason: SIP;cause=200;text="Call completed elsewhere"
...untergeschoben bekommt.
Vielleicht weiss @sonyKatze wie das geht?
 
  • Like
Reaktionen: sonyKatze
Das wäre wirklich nice to know...
Da hier ja immer 2 Mobilteile klingeln, hat das Mobilteil welches den Anruf nicht angenommen hat auch immer die Verpassten Anrufe drin...
Wär schön wenn das durch sowas ausbleiben könnte...

LG
 
Zuletzt bearbeitet:
Keine Fullquotes hier im IPPF, denn ick wees doch was ick nur ein Post vorher geschrieben hab ;)
...sonst wischt hier noch ein Moderator durch.

Vielleich meldet sich sonyKatze mit seinem Wissen, denn mit @ vor seinen Namen bekommt er auch eine Info, das er erwähnt/zitiert wurde.
So wie @Tiieto jetzt ;)
 
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.