PIONEERS Lenny Is Back!

ostridge

Guru
Joined
Jan 22, 2015
Messages
1,618
Reaction score
517
Re: kidsrevenge
That would be great!

I just realised that the sixyearold should be at school say weekdays after 09:00 until say 15:20 when lenny could take the strain during the workday, or according to locale. Then there is the school holidays or is that vacation or something (I'm not sure how to code that) but there you go.
 

ostridge

Guru
Joined
Jan 22, 2015
Messages
1,618
Reaction score
517
Please run the commands below to load the latest working release (recording disabled by default):

wget http://pbxinaflash.com/lsupport.tgz

Hi,
I'v just been playing with Lenny.txt as below Here line 13 as original script _ I noticed the message monitored AND recorded needed to be succinct so as not to put off caller, it also needed an early answer from (Lenny01) . So I replace L13 with line L14 to shorten the warning to recorded using 2 existing sounds joined with '&' also joining with Lenny01 to keep interest and distract from the message.
Then instead of L14 I did a cut & paste edit of the en_GB sounds to make 'en_GB/this-call-may-be-recorded' ; Though the existing sounds (en/this-call-may-be&en/recorded ) should be good enough. The full txt file is here plus cred. annotation line1.
So TRY THIS
enjoy.

Code:
;!    from wget http://pbxinaflash.com/lsupport.tgz
;# // BEGIN Lenny Remake
; version 0.3.2 copyright: none claimed. Enjoy!
exten => 53669,1,Answer
exten => 53669,n,Set(TIMEOUT(absolute)=600)
exten => 53669,n,Set(MACHINE=0)
exten => 53669,n,Set(OPTION=5)
exten => 53669,n,Set(TALK_DETECTED=0)
exten => 53669,n,Set(RECORDING=${UNIQUEID})
 
;exten => 53669,n,MixMonitor(/tmp/Lenny/${RECORDING}.wav)
;exten => 53669,n,NoOp(Recording will be available: /tmp/Lenny/${RECORDING}.wav)
;exten => 53669,n,Playback(en/this-call-may-be-monitored-or-recorded); use this orig from lenny.txt # OR next line with existing sounds/ adding "crackle hello this is Lenny...." :-
;exten => 53669,n,Playback(en/this-call-may-be&en/recorded&Lenny01)  ; Enable this to use existing ( joined-up with '&' ) sound files(3):- en/this-call-may-be&en/Recorded&Lenny01}
 
;#Expl-NOTE edit a CUT from en/this-call-may-be-monitored-or-recorded omitting 'monitored-or' # & adding '&Lenny01' (rapid crackle-hello-thisisLenny) to keep interest-distract from recorded msg. .
;exten => 53669,n,Playback(en/this-call-may-be-recorded&lenny/Lenny01)    ; this requires the newly edited sound files this-call-may-be-recorded
       
 
exten => 53669,n,Gosub(playit(Lenny01))
exten => 53669,n,Gosub(playit(Lenny02))
exten => 53669,n,Gosub(playitonce(Lenny03))
exten => 53669,n,Gosub(playitonce(Lenny04))
exten => 53669,n,Gosub(playitonce(Lenny05))
exten => 53669,n,Gosub(playitonce(Lenny06))
exten => 53669,n,Gosub(playitonce(Lenny07))
exten => 53669,n,Gosub(playitonce(Lenny08))
exten => 53669,n,Gosub(playitonce(Lenny09))
exten => 53669,n,Gosub(playitonce(Lenny10))
exten => 53669,n,Gosub(playitonce(Lenny11))
exten => 53669,n,Gosub(playitonce(Lenny12))
exten => 53669,n,Gosub(playitonce(Lenny13))
exten => 53669,n,Gosub(playitonce(Lenny14))
exten => 53669,n,Gosub(playitonce(Lenny15))
exten => 53669,n,Gosub(playitonce(Lenny02))
exten => 53669,n,Gosub(playitonce(Lenny03))
exten => 53669,n,Gosub(playitonce(Lenny06))
exten => 53669,n,Gosub(playitonce(Lenny08))
exten => 53669,n,Gosub(playitonce(Lenny09))
exten => 53669,n,Gosub(playitonce(Lenny10))
exten => 53669,n,Gosub(playitonce(Lenny14))
exten => 53669,n,Playback(en/tt-monkeys)
exten => 53669,n,Hangup
 
exten => 53669,n(playit),NoOp(Lenny speaks and repeats until reponse)
exten => 53669,n,Set(LOCAL(lennyclip)=${ARG1})
exten => 53669,n(oncemo),Set(TALK_DETECTED=0)
exten => 53669,n,Background(lenny/${lennyclip})
exten => 53669,n,AMD(2500,1500,800,5000,100,50,3,256)
exten => 53669,n,NoOp(${AMDCAUSE})
exten => 53669,n,GotoIf($["${AMDCAUSE:0:17}"="INITIALSILENCE-25"]?reststop)
exten => 53669,n(mach),WaitForSilence(700,3)
exten => 53669,n,Goto(humn)
exten => 53669,n(reststop),WaitForSilence(800,2)
exten => 53669,n,Goto(oncemo)
exten => 53669,n(humn),Return
 
exten => 53669,n(playitonce),NoOp(Lenny speaks once)
exten => 53669,n,Set(LOCAL(lennyclip)=${ARG1})
exten => 53669,n(noresponse),Background(lenny/${lennyclip})
exten => 53669,n,AMD(2500,1500,800,5000,100,50,3,256)
exten => 53669,n,NoOp(${AMDCAUSE})
;exten => 53669,n,GotoIf($["${AMDCAUSE}"="INITIALSILENCE-2500-2500"]?noresponse)
;exten => 53669,n,GotoIf($[${AMDSTATUS}=HUMAN]?humn2:mach2)
exten => 53669,n(mach2),WaitForSilence(2000,1)
exten => 53669,n(humn2),Return
 
exten => 536691,1,NoOp(Rerouting inbound call...)
;exten => 536691,n,Flite("After the beep, enter extension or press pound for Lenny.")
;exten => 536691,n,Read(SENDTO,beep,7)
;exten => 536691,n,GotoIf($["foo${SENDTO}" = "foo"]?5:6)
exten => 536691,n,Set(SENDTO=53669)
exten => 536691,n,System(echo "Channel: local/${SENDTO}@from-internal" > /tmp/lenny.call)
exten => 536691,n,System(echo "MaxRetries: 0" >> /tmp/lenny.call)
exten => 536691,n,System(echo "RetryTime: 3" >> /tmp/lenny.call)
exten => 536691,n,System(echo "WaitTime: 30" >> /tmp/lenny.call)
exten => 536691,n,System(echo "Context: bridgit" >> /tmp/lenny.call)
exten => 536691,n,System(echo "Extension: 4" >> /tmp/lenny.call)
exten => 536691,n,System(echo "Priority: 1" >> /tmp/lenny.call)
exten => 536691,n,System(mv /tmp/lenny.call /var/spool/asterisk/outgoing)
;# // END Lenny Remake
 

Pat OBrien

New Member
Joined
May 11, 2015
Messages
19
Reaction score
3
Just installed Incredible PBX 11-12.2 for CentOS 6 today. Thanks to this thread I was able to get Lenny going. I can have a conversation with Lenny at 53669, but I can't figure out how to add him as an incoming route. Since I manually added the configuration to extension_custom.conf, it's out of sync with the IncrediblePBX admin web page.

Any thought on how I can add 53669 as the inbound route?
 

ostridge

Guru
Joined
Jan 22, 2015
Messages
1,618
Reaction score
517
Hi Pat,
Look in the incredible GUI - on the 'Other' tab there should be an entry for 'Lenny Blacklist Mod'
on mine I have Enable redirect: (yes)
and Destination:
Code:
local/53669@from-internal

Under 'Admin' (tab)/Module Admin
then under 'Admin' heading
should have > Blacklist 12.0.1

under 'Other' heading
should have Lenny Blacklist Mod 0.0.8 Stable POSSA GPLv2+ Enabled; Not available online
so the bblacklist mod is installed yes?????

blacklisted numbers goto Lenny or the destination specified in Lenny blacklist mod 'Destination'; Its not polite to send all callers to the lenny exten 53669 /1, which would need to be a registered Extension/s. at Admin/Custom Extions/Lenny
Custom Extension: 53669

In Add Incoming Route/Set Destination

I think in Miscelaneous Destinations (seems to be a bit of overlap/confusion between Misc Dest and Misc Exten)

Under Admin tab Blacklist enter nuisance callers either one at a time or by a blacklist.csv file import

Im not sure what the description column is for but 1 seems to be the default.
; in blacklist.csv I have amongst my nuisence callers Telemarketers/Telesurvey/DCA's/ Un-friends.

number,description
003282,1
anonymous,1
private,1
restricted,1
unknown,1
 

Pat OBrien

New Member
Joined
May 11, 2015
Messages
19
Reaction score
3
Thanks for the detailed info Ozz. I don't have Lenny loaded in the Other modules tab. I do have 53669 in extensions_custom.conf, so I am able to call Lenny. I may have missed a step somewhere though. I'm going to go back to the beginning and try it again!
 

The Deacon

Guru
Joined
Jan 29, 2008
Messages
296
Reaction score
14
So, I too got Lenny installed and at first blush, it appears to work, but you only hear the first "Hello, this is Lenny..." when it goes back to play it again, you can see it thinks it's playing the Lenny01 file, but nothing is heard. Here is the log:

Code:
Connected to Asterisk 13.6.0 currently running on pbx1 (pid = 2673)
    -- Executing [53669@from-internal:1] Answer("PJSIP/703-00000009", "") in new stack
    -- Executing [53669@from-internal:2] Set("PJSIP/703-00000009", "TIMEOUT(absolute)=600") in new stack
    -- Channel will hangup at 2015-11-13 14:38:27.040 PST.
    -- Executing [53669@from-internal:3] Set("PJSIP/703-00000009", "MACHINE=0") in new stack
    -- Executing [53669@from-internal:4] Set("PJSIP/703-00000009", "OPTION=5") in new stack
    -- Executing [53669@from-internal:5] Set("PJSIP/703-00000009", "TALK_DETECTED=0") in new stack
    -- Executing [53669@from-internal:6] Set("PJSIP/703-00000009", "RECORDING=1447453706.145") in new stack
    -- Executing [53669@from-internal:7] MixMonitor("PJSIP/703-00000009", "/tmp/Lenny/1447453706.145.wav") in new stack
    -- Executing [53669@from-internal:8] NoOp("PJSIP/703-00000009", "Recording will be available: /tmp/Lenny/1447453706.145.wav") in new stack
    -- Executing [53669@from-internal:9] Gosub("PJSIP/703-00000009", "playit(Lenny01)") in new stack
    -- Executing [53669@from-internal:33] NoOp("PJSIP/703-00000009", "Lenny speaks and repeats until reponse") in new stack
    -- Executing [53669@from-internal:34] Set("PJSIP/703-00000009", "LOCAL(lennyclip)=Lenny01") in new stack
    -- Executing [53669@from-internal:35] Set("PJSIP/703-00000009", "TALK_DETECTED=0") in new stack
    -- Executing [53669@from-internal:36] BackGround("PJSIP/703-00000009", "lenny/Lenny01") in new stack
    -- <PJSIP/703-00000009> Playing 'lenny/Lenny01.ulaw' (language 'en')
  == Begin MixMonitor Recording PJSIP/703-00000009
       > 0xb2f60ac0 -- Probation passed - setting RTP source address to 192.168.100.183:14006
    -- Executing [53669@from-internal:37] AMD("PJSIP/703-00000009", "2500,1500,800,5000,100,50,3,256") in new stack
    -- AMD: PJSIP/703-00000009 703 (N/A) (Fmt: ulaw)
    -- AMD: initialSilence [2500] greeting [1500] afterGreetingSilence [800] totalAnalysisTime [5000] minimumWordLength [100] betweenWordsSilence [50] maximumNumberOfWords [3] silenceThreshold [256] maximumWordLength [5000]
    -- AMD: Channel [PJSIP/703-00000009]. Changed state to STATE_IN_SILENCE
    -- AMD: Channel [PJSIP/703-00000009]. Short Word Duration: 40
    -- AMD: Channel [PJSIP/703-00000009]. ANSWERING MACHINE: silenceDuration:2500 initialSilence:2500
    -- Executing [53669@from-internal:38] NoOp("PJSIP/703-00000009", "INITIALSILENCE-2500-2500") in new stack
    -- Executing [53669@from-internal:39] GotoIf("PJSIP/703-00000009", "1?reststop") in new stack
    -- Goto (from-internal,53669,42)
    -- Executing [53669@from-internal:42] WaitForSilence("PJSIP/703-00000009", "800,2") in new stack
    -- Waiting 2 time(s) for 800 ms silence with 0 timeout
    -- Exiting with 800ms silence >= 800ms required
    -- Exiting with 800ms silence >= 800ms required
    -- Executing [53669@from-internal:43] Goto("PJSIP/703-00000009", "oncemo") in new stack
    -- Goto (from-internal,53669,35)
    -- Executing [53669@from-internal:35] Set("PJSIP/703-00000009", "TALK_DETECTED=0") in new stack
    -- Executing [53669@from-internal:36] BackGround("PJSIP/703-00000009", "lenny/Lenny01") in new stack
    -- <PJSIP/703-00000009> Playing 'lenny/Lenny01.ulaw' (language 'en')
  == Spawn extension (from-internal, 53669, 36) exited non-zero on 'PJSIP/703-00000009'
    -- Executing [h@from-internal:1] Hangup("PJSIP/703-00000009", "") in new stack
  == Spawn extension (from-internal, h, 1) exited non-zero on 'PJSIP/703-00000009'
  == MixMonitor close filestream (mixed)
  == End MixMonitor Recording PJSIP/703-00000009
    -- Added contact 'sip:[email protected]:5060' to AOR '703' with expiration of 60 seconds
 Contact 703/3c2f4020394c746df9b113736d6116f8 has been deleted
 Contact 703/3c2f4020394c746df9b113736d6116f8 has been created
 Contact 703/3c2f4020394c746df9b113736d6116f8 is now Reachable.  RTT: 181.500 msec

I checked ownership on all the lenny sound files and they're all asterisk:asterisk with 755 permissions
 

EndeavorPBX

Member
Joined
May 18, 2011
Messages
53
Reaction score
6
Thanks for the detailed info Ozz. I don't have Lenny loaded in the Other modules tab. I do have 53669 in extensions_custom.conf, so I am able to call Lenny. I may have missed a step somewhere though. I'm going to go back to the beginning and try it again!

Pat,

Create a Misc Destination that routes to 53699, and then use that destination as a destination for your inbound route.
 

JustinC

New Member
Joined
Mar 23, 2016
Messages
8
Reaction score
2
I followed the instructions here (http://nerdvittles.com/?p=6762) however the sound file portion isn't extracting. Is it the script instructions or the file download?



There is a problem with the Lenny.tgz in the script.
wget http://pbxinaflash.com/Lenny.tgz
Grabs 45K file


:/var/lib/asterisk/sounds/lenny $ tar zxvf Lenny.tgz

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
WARNING: Always run Incredible PBX behind a secure hardware-based firewall.


I also did a
$ mv Lenny.tgz Lenny.tar
WARNING: Always run Incredible PBX behind a secure hardware-based firewall.

Then
:/var/lib/asterisk/sounds/lenny $ tar xvf Lenny.tar
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
 

JustinC

New Member
Joined
Mar 23, 2016
Messages
8
Reaction score
2
I downloaded them all to the lenny folder. When I call the extension and watch asterisk -rvvvvv it seems to work however I get a horrible static squeal the entire call. I can call other extensions and the auto attendant and they are crystal clear so I'm certain its the files not playing correctly. Ever heard of such a thing?
 

Matty

New Member
Joined
Aug 2, 2016
Messages
1
Reaction score
3
I know it has been a couple of months since the last post on here, but I had the same problem as Justin C, and just solved it, so I thought I'd post my experience in case it's helpful for anyone - I was using wget to do the equivalent of downloading the files from github, but it turned out that I wasn't actually downloading the ulaw files, but rather a webpage containing a link to the files... and playing the webpages gave me the static sound that Justin described.

Here's the full script I used to download the files and set it up - it's an amalgamation of what has been put on here before so credit to everyone who has contributed to this - hope this is useful in the future to someone (running pipbx on a Raspberry Pi here, but assume this will work fine on any FreePBX install?)

mkdir /var/lib/asterisk/sounds/lenny
chown asterisk:asterisk /var/lib/asterisk/sounds/lenny
cd /var/lib/asterisk/sounds/lenny
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/3.gsm
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny01.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny02.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny03.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny04.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny05.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny06.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny07.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny08.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny09.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny10.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny11.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny12.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny13.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny14.ulaw
wget https://github.com/lgaetz/freepbx-Its_Lenny/raw/master/sounds/lenny/Lenny15.ulaw

chown asterisk:asterisk *
chmod a+rwx *

cd /tmp
wget http://pbxinaflash.com/lsupport.tgz
tar zxvf lsupport.tgz
rm lsupport.tgz
rm 3.gsm
sed -i '\:// BEGIN Lenny Remake:,\:// END Lenny Remake:d' /etc/asterisk/extensions_custom.conf
sed -i '/\[from-internal-custom\]/r /tmp/lenny.txt' /etc/asterisk/extensions_custom.conf
rm lenny.txt

echo " " >> /etc/asterisk/extensions_custom.conf
echo "[bridgit]" >> /etc/asterisk/extensions_custom.conf
echo "exten => 4,1,Pickup(701@from-internal)" >> /etc/asterisk/extensions_custom.conf
echo "exten => 4,2,Pickup(777@from-internal)" >> /etc/asterisk/extensions_custom.conf
echo " " >> /etc/asterisk/extensions_custom.conf

asterisk -rx "dialplan reload"
echo "Try it out by dialing 53669 from any extension on your PBX."
 

leons

New Member
Joined
Feb 22, 2017
Messages
3
Reaction score
3
Necro'ing a dead thread?

Please can sommeone help, I am trying to get Lenny to say 'Hello are you there' and, and mutter 'must be my damn hearing aid' etc when the line goes quiet, as savey marketers get suspicious and go quiet when they think he is a bot.

Here is the code I am using Lenny with:

[Lenny]
exten => Lenny,1,Answer()
same => n,Ringing()
same => n,Wait(8)
same => n,Set(i=0)
same => n,MixMonitor(recordings/Lenny/${UNIQUEID}.wav)
same => n,Goto(Lenny,talk, 1)
exten => talk,1,Set(i=${IF($["0${i}"="016"]?5:$[0${i}+1])})
same => n,ExecIf($[${i}=1]?MixMonitor(${UNIQUEID}.wav))
same => n,Playback(Lenny/Lenny${i})
same => n,BackgroundDetect(Lenny/backgroundnoise,1400)

That works great, but if the line goes quiet for too long it would be cool to get lenny to ask if they are still there - do you know what kind of code would drive that on * please?
 

epiclulz666

New Member
Joined
Jul 16, 2015
Messages
1
Reaction score
0
I downloaded them all to the lenny folder. When I call the extension and watch asterisk -rvvvvv it seems to work however I get a horrible static squeal the entire call. I can call other extensions and the auto attendant and they are crystal clear so I'm certain its the files not playing correctly. Ever heard of such a thing?

i had the same issue turns out when i was using wget it was not getting the files as it should i was able to obtain them else where,

i now have the 16 ulaw files i believe 16 is the ducks. i want to just make the telemarketer go around and around in circles without hanging up and no monkey sounds what do i need to change to the original code to make it repeat it self after lenny16.ulaw ?
 
Last edited:

leons

New Member
Joined
Feb 22, 2017
Messages
3
Reaction score
3
this loops well:
[Lenny]
exten => Lenny,1,Answer()
same => n,Ringing()
same => n,Wait(8)
same => n,Set(i=0)
same => n,MixMonitor(recordings/Lenny/${UNIQUEID}.wav)
same => n,Goto(Lenny,talk, 1)
exten => talk,1,Set(i=${IF($["0${i}"="016"]?5:$[0${i}+1])})
same => n,ExecIf($[${i}=1]?MixMonitor(${UNIQUEID}.wav))
same => n,Playback(Lenny/Lenny${i})
same => n,BackgroundDetect(Lenny/backgroundnoise,1400)

and of course if we was going to record it and email it, we probably (though I wouldn't know as I don't do this) would use mutt and lame with this:

exten => h,1,Set(chan=${CUT(CHANNEL,,1)} )
exten => h,n,NoOp(** Lenny Call via ${CHANNEL} or "${chan}" - ${CDR(duration)} seconds - from ${CALLERID(all)} ${SIPDOMAIN}. )
exten => h,n,NoOp(** Recording at recordings/Lenny/${UNIQUEID}.wav )
exten => h,n,ExecIf($[${CDR(duration)} > 25]?Macro(mail-recording))

[macro-mail-recording]
exten => s,1,Set(recfile=/var/spool/asterisk/monitor/${UNIQUEID})
exten => s,n,Exec(System(echo 'Lenny had a ${CDR(duration)} second call via "${CHANNEL}" from ${CALLERID(all)}. SIP Domain: ${SIPDOMAIN}' >${recfile}.txt) )
exten => s,n,Exec(System(lame -V6 ${recfile}.wav ${recfile}.mp3 ) )
exten => s,n,Exec(System(echo '.'| /usr/bin/mutt <your email addy here> -s 'Lenny ${chan} ${CALLERID(all)} ${CDR(duration)} seconds' -a ${recfile}.mp3 -i ${recfile}.txt) )
exten => s,n,Exec(System(echo '.'| /usr/bin/mutt <alt email addy here> -s 'Lenny ${chan} ${CALLERID(all)} ${CDR(duration)} seconds' -a ${recfile}.mp3 -i ${recfile}.txt) )
exten => s,n,Noop(Done with mail recording macro.)

I have the audio files too, but only upto number 15, 15 contains the ducks for me, but I keep losing callers when they go silent for a longer time. I've heard youtube recordings where lenny starts saying ... hello...<then a different 'hello>.. are you there? .... must be my hearing aid again ... but I can't find these audio files - or how to put them into the script or activation when, after 17 mins or so the user suspects and goes silent; lenny stays silent too, then they hangup after a painful 20 seconds of silence, and I know they are good for more. He runs a raspberry pi 5v 1amps :) so lives behind the tv on a free-for-incoming-calls sip line. Not laughed so much in many years.
 
Last edited:

weenus500

Member
Joined
Dec 28, 2014
Messages
38
Reaction score
1
i have Lenny all up and running. I'd like to know how to insert a "press 1" in Lenny's dial plan, because I have a robo caller that requires a press 1 to get a human on the line.
 

leons

New Member
Joined
Feb 22, 2017
Messages
3
Reaction score
3
Sounds like you just need to play a DTMF tone at the appropriate timing. Find a .wav, convert it to ulaw and increment all the other after recordings by one after the DTMF beeps.probalby fit in well after 2, beep on 3 and you loop on 4??
 
Get 3CX - Absolutely Free!

Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.
Top