TIPS Streaming MOH / MP3 MOH / Listen to Internet radio by Phone: WORKING

Orb

New Member
Joined
Apr 2, 2008
Messages
9
Reaction score
0
When I put someone on hold they hear about 10s from an old stream then it switches to the live stream.

Any ideas?
 

tshif

Guru
Joined
Jan 3, 2008
Messages
1,240
Reaction score
4
As far as I know, all of us are seeing this same behavior. No solution that I have heard of yet. Perhaps one of the command line switches for mpg123 - or another solution will be thought of by one of us. But not yet -
 

kwest

Member
Joined
Jun 28, 2008
Messages
52
Reaction score
0
The B switch is suppose to be the buffer setting but it don't seem to do anything, you would think -b0 means NO buffering
 

rossiv

Guru
Joined
Oct 26, 2008
Messages
2,624
Reaction score
139
It does not work for me. The post by Marv, that is. I have it set up with all the right code, but I just get one of my MOH local files when I choose a number.
Code:
     PBX in a Flash Version 1.3 Daemon Status
********************************************************************
* Asterisk  * ONLINE  * Zaptel    * ONLINE  * MySQL      * ONLINE  *
* SSH       * ONLINE  * Apache    * ONLINE  * Iptables   * ONLINE  *
* Fail2ban  * ONLINE  * IP Connect* ONLINE  * Ip6tables  * ONLINE  *
* BlueTooth * ONLINE  * Hidd      * ONLINE  * NTPD       * ONLINE  *
* Sendmail  * ONLINE  * Samba     * ONLINE  * Webmin     * ONLINE  *
* Ethernet0 * ONLINE  * Ethernet1 *   N/A   * Wlan0      *   N/A   *
********************************************************************
* Running Asterisk Version : Asterisk 1.4.21.2
* Asterisk Source Version  : 1.4.21.2
* Zaptel Source Version    : 1.4.12.1
* Libpri Source Version    : 1.4.7
* Addons Source Version    : 1.4.7
********************************************************************
pbx.local on 192.168.1.24 - eth0
CentOS release 5.2 (Final) :32 Bit Kernel: 2.6.18-92.1.6.el5
 

tshif

Guru
Joined
Jan 3, 2008
Messages
1,240
Reaction score
4
rossiv;
More info please. Marv has posted a few times to this thread - which message do you mean?

Also - an amportal restart or at least a read config in the config edit program would probably help. You would also need to change the music on hold source in the trunk - but again we strongly recommend you consider the legal aspects - you need to pay royalties to use a radio or other common streaming audio source for your public on-hold music. The project was presented so that you could listen to streaming music through your phone while at work on your home systems, etc.

Can we see your dial plan, and your music on hold configurations also - it will make it possible for us to help figure it out.
 

rossiv

Guru
Joined
Oct 26, 2008
Messages
2,624
Reaction score
139
Wow, its been a while. No, I did not get it resolved. Logs:
Code:
    -- Executing [68742@from-internal:1] Answer("SIP/2000-09e61880", "") in new stack
    -- Executing [68742@from-internal:2] Flite("SIP/2000-09e61880", "After the beep press the number of the music channel you wish to listen to. Or 9 for a list of channels.") in new stack
  == Parsing '/etc/asterisk/flite.conf': Found
    -- <SIP/2000-09e61880> Playing '/tmp/flite_buf_HLjFwj' (language 'en')
    -- Executing [68742@from-internal:3] Read("SIP/2000-09e61880", "MusicCode|beep|1") in new stack
    -- Accepting a maximum of 1 digits.
    -- <SIP/2000-09e61880> Playing 'beep' (language 'en')
    -- User entered '4'
    -- Executing [68742@from-internal:4] Goto("SIP/2000-09e61880", "QueueMusic|s|4") in new stack
    -- Goto (QueueMusic,s,4)
    -- Executing [s@QueueMusic:4] MusicOnHold("SIP/2000-09e61880", "Hitz") in new stack
    -- Started music on hold, class 'default', on SIP/2000-09e61880
    -- Stopped music on hold on SIP/2000-09e61880
  == Spawn extension (QueueMusic, s, 4) exited non-zero on 'SIP/2000-09e61880'
------

    -- Executing [68742@from-internal:1] Answer("SIP/2000-09f35720", "") in new stack
    -- Executing [68742@from-internal:2] Flite("SIP/2000-09f35720", "After the beep press the number of the music channel you wish to listen to. Or 9 for a list of channels.") in new stack
  == Parsing '/etc/asterisk/flite.conf': Found
    -- <SIP/2000-09f35720> Playing '/tmp/flite_buf_fUifHo' (language 'en')
    -- Executing [68742@from-internal:3] Read("SIP/2000-09f35720", "MusicCode|beep|1") in new stack
    -- Accepting a maximum of 1 digits.
    -- <SIP/2000-09f35720> Playing 'beep' (language 'en')
    -- User entered '2'
    -- Executing [68742@from-internal:4] Goto("SIP/2000-09f35720", "QueueMusic|s|2") in new stack
    -- Goto (QueueMusic,s,2)
    -- Executing [s@QueueMusic:2] MusicOnHold("SIP/2000-09f35720", "Jazz") in new stack
    -- Started music on hold, class 'default', on SIP/2000-09f35720
    -- Stopped music on hold on SIP/2000-09f35720
  == Spawn extension (QueueMusic, s, 2) exited non-zero on 'SIP/2000-09f35720'

exten => 68742,1,Answer
exten => 68742,2,Flite(After the beep press the number of the music channel you wish to listen to. Or 9 for a list of channels.)
exten => 68742,3,Read(MusicCode,beep,1)
exten => 68742,4,GoTo(QueueMusic,s,${MusicCode})
exten => 68742,5,Hangup 

[QueueMusic]
exten => s,1,MusicOnHold(80s)
exten => s,2,MusicOnHold(Jazz)
exten => s,3,MusicOnHold(KickinCountry)
exten => s,4,MusicOnHold(Hitz)
exten => s,5,MusicOnHold(MaxHits)
exten => s,6,MusicOnHold(SwissGroove)
exten => s,7,MusicOnHold(TheEagle-ClassicRock)
exten => s,8,MusicOnHold(Top40-Christmas)
exten => s,9,Flite(Press 1 for eighties. 2 for Jazz. 3 for Kickin Country. 4 for Hitz. 5 for Max Hitz. 6 for Swiss Groove. 7 for The Eagle Clasic Rock. 8 for Top 40 Christmas. 9 to hear this list again.)
exten => s,10,goto(from-internal-custom,68742,2)
exten => s,11,Hangup
This post: http://pbxinaflash.com/forum/showpost.php?p=15697&postcount=3
I was not using it for MOH. I said that when I choose a number, I get MOH music from the local files. I am not using it for MOH.
 

tshif

Guru
Joined
Jan 3, 2008
Messages
1,240
Reaction score
4
Did you CREATE the streams that you are calling for in the MOH section of FreePBX? If they dont exist, you'll get the default MOH. Also, you did NOT provide an example of you MOH configuration for the streams which was asked for. We cant help you without the information we requested -
 

rossiv

Guru
Joined
Oct 26, 2008
Messages
2,624
Reaction score
139
No need to yell. Sorry I left that out, but that was the problem. I forgot to put the info in musiconhold.conf. Thanks.
 

MGD4me

Guru
Joined
Feb 3, 2009
Messages
505
Reaction score
109
Re: I am not using it for MOH.

It doesn't really matter if you are using it for MOH or not, they are still considered MOH files, whether streaming, or pre-stored material. Technically you could use a streaming source for MOH, but licensing and royalties come into play, so be aware.

The 'Marv' link you referenced above shows that he is installing the selection of streaming music into etc/asterisk/musiconhold.com, when I believe it should go into musiconhold_additional.conf instead. First, he erred in showing the .com file extension and second, should you do an update there is a strong likelihood 'musiconhold.conf' would be written over. The '_additional.conf' file is a safer bet.
 

rossiv

Guru
Joined
Oct 26, 2008
Messages
2,624
Reaction score
139
Right, I saw that and looked in both files. It works in musiconhold.conf and I will move it to _additional. I got it working. Thanks
 

tshif

Guru
Joined
Jan 3, 2008
Messages
1,240
Reaction score
4
Ross - you should use the FreePBX interface to create the streams. That way you don't have to worry about which conf file to put it into. It's most likely to work, safest, and least likely to cause confusion if you need support in the future.

I never really considered capitalizing one word as yelling, but more like emphasis. It seems sometimes you might be in a hurry when you read or respond to threads here - and sometimes that may cause you to miss various important details. In any case - complete information is the root source of finding solutions. Just wanting to make sure we can give the best advice possible - so as to waste as little of your time on the "pursuit of untamed ornithoids". Ok?
 

wa4zlw

Member
Joined
Feb 14, 2008
Messages
845
Reaction score
22
Streaming MOH worked and then stopped

Hi Folks...I followed all the instructions here and it was working great. Then weeks later I decided to upgrade PIAF et al and then when I tried it again all I get is the "default". THe logs show the correct stream being selected but the class of default always seems to play. Anyone have any ideas?

I'm posting some logs here--


-- Added extension '*293' priority 1 to app-recordings
-- Added extension '*293' priority 2 to app-recordings
-- Added extension '*293' priority 3 to app-recordings
-- Registered IAX2 to '64.2.142.116', who sees us as 24.115.160.130:4569 with no messages waiting

-- Executing [69@from-internal:1] Answer("SIP/600-09b6f338", "") in new stack
-- Executing [69@from-internal:2] MusicOnHold("SIP/600-09b6f338", "Olam-Radio") in new stack
-- Started music on hold, class 'default', on SIP/600-09b6f338
-- Stopped music on hold on SIP/600-09b6f338
== Spawn extension (from-internal, 69, 2) exited non-zero on 'SIP/600-09b6f338'
-- Executing [h@from-internal:1] Macro("SIP/600-09b6f338", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] ResetCDR("SIP/600-09b6f338", "vw") in new stack
-- Executing [s@macro-hangupcall:2] NoCDR("SIP/600-09b6f338", "") in new stack
-- Executing [s@macro-hangupcall:3] GotoIf("SIP/600-09b6f338", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,6)
-- Executing [s@macro-hangupcall:6] GotoIf("SIP/600-09b6f338", "1?skipblkvm") in new stack
-- Goto (macro-hangupcall,s,9)
-- Executing [s@macro-hangupcall:9] GotoIf("SIP/600-09b6f338", "1?theend") in new stack
-- Goto (macro-hangupcall,s,11)
-- Executing [s@macro-hangupcall:11] Hangup("SIP/600-09b6f338", "") in new stack
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/600-09b6f338' in macro 'hangupcall'
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/600-09b6f338'
-- Executing [68742@from-internal:1] NoOp("SIP/600-09b6f338", "Running miscapp 2: Telephone Music") in new stack
-- Executing [68742@from-internal:2] Goto("SIP/600-09b6f338", "music|s|1") in new stack
-- Goto (music,s,1)
-- Executing [s@music:1] Answer("SIP/600-09b6f338", "") in new stack
-- Executing [s@music:2] Flite("SIP/600-09b6f338", ""After the beep press the number of the broadcast channel you wish to listen to or press 9 for a list of channels."") in new stack
== Parsing '/etc/asterisk/flite.conf': Found
-- <SIP/600-09b6f338> Playing '/tmp/flite_buf_80bxKK' (language 'en')
-- Executing [s@music:3] WaitExten("SIP/600-09b6f338", "|") in new stack
== CDR updated on SIP/600-09b6f338
-- Executing [3@music:1] MusicOnHold("SIP/600-09b6f338", "Shmais-Radio") in new stack
-- Started music on hold, class 'default', on SIP/600-09b6f338
-- Stopped music on hold on SIP/600-09b6f338
== Spawn extension (music, 3, 1) exited non-zero on 'SIP/600-09b6f338'






dialparties.agi: Starting New Dialparties.agi
== Parsing '/etc/asterisk/manager.conf': Found
== Parsing '/etc/asterisk/manager_additional.conf': Found
== Parsing '/etc/asterisk/manager_custom.conf': Found
== Manager 'admin' logged on from 127.0.0.1
dialparties.agi: Caller ID name is 'Rabbi Lipsker' number is '600'
dialparties.agi: Methodology of ring is 'ringallv2'
-- dialparties.agi: Added extension 610 to extension map
-- dialparties.agi: Extension 610 cf is disabled
-- dialparties.agi: Extension 610 do not disturb is disabled
-- dialparties.agi: dbset CALLTRACE/610 to 600
-- dialparties.agi: Filtered ARG3: 610
== Manager 'admin' logged off from 127.0.0.1
-- AGI Script dialparties.agi completed, returning 0
-- Executing [s@macro-dial:7] Dial("SIP/600-b7d01ec0", "SIP/610|22|m(JewishBroadcast)tM(auto-blkvm)") in new stack
-- Called 610
-- Started music on hold, class 'default', on SIP/600-b7d01ec0
-- SIP/610-08faa700 is ringing
-- Stopped music on hold on SIP/600-b7d01ec0
== Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/600-b7d01ec0' in macro 'dial'
== Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/600-b7d01ec0'
-- Executing [h@macro-dial:1] Macro("SIP/600-b7d01ec0", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] ResetCDR("SIP/600-b7d01ec0", "vw") in new stack
-- Executing [s@macro-hangupcall:2] NoCDR("SIP/600-b7d01ec0", "") in new stack
-- Executing [s@macro-hangupcall:3] GotoIf("SIP/600-b7d01ec0", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,6)
-- Executing [s@macro-hangupcall:6] GotoIf("SIP/600-b7d01ec0", "0?skipblkvm") in new stack
-- Executing [s@macro-hangupcall:7] NoOp("SIP/600-b7d01ec0", "Cleaning Up Block VM Flag: BLKVM/610/SIP/600-b7d01ec0") in new stack
-- Executing [s@macro-hangupcall:8] DBdel("SIP/600-b7d01ec0", "BLKVM/610/SIP/600-b7d01ec0") in new stack
-- DBdel: family=BLKVM, key=610/SIP/600-b7d01ec0
-- Executing [s@macro-hangupcall:9] GotoIf("SIP/600-b7d01ec0", "1?theend") in new stack
-- Goto (macro-hangupcall,s,11)
-- Executing [s@macro-hangupcall:11] Hangup("SIP/600-b7d01ec0", "") in new stack
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/600-b7d01ec0' in macro 'hangupcall'
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/600-b7d01ec0'

------------------------------

Here is extensions_override_ppbx.conf:

;placeholder for future expansion PIAF Dev Team

[music]
; dial 68742 (music) from extension gets to pick streamed MOH
;Background(custom/telephonemusic)
exten => s,1,Answer
exten => s,2,Flite("After the beep press the number of the broadcast channel you wish to listen to or press 9 for a list of channels.")
exten => s,3,WaitExten(,)
exten => s,4,NoOp()
; dial users
exten => 1,1,MusicOnHold(JewishBroadcast)
exten => 2,1,MusicOnHold(Olam-Radio)
exten => 3,1,MusicOnHold(Shmais-Radio)
exten => 8,1,MusicOnHold(default)
exten => 9,1,Flite("Press 1 for Jewish Broadcast dot com. 2 for O L A M Radio. 3 for Shmais Radio. 8 for PBX default. Press 9 to hear this list again.")
exten => 9,2,WaitExten()
exten => 9,3,Goto(music,4)
exten => t,n,Hangup

;exten => s,2,Flite("After the beep press the number of the broadcast channel you wish to listen to or press 9 for a list of channels.")
;exten => s,3,Read(MusicCode),beep,1)
;exten => s,4,GoTo(QueueMusic,s,${MusicCode})
;exten => s,5,Hangup


----------------------------------------

Here is extensions_custom.conf:


; Extensions in AMP have access to the 'from-internal' context.
; The context 'from-internal-custom' is included in 'from-internal' by default

[from-internal-custom]

; dial 947 for weather by zipcode courtesy of nerdvittles.com
exten => 947,1,Answer
exten => 947,2,Wait(1)
;exten => 947,3,DigitTimeout(7)
;exten => 947,4,ResponseTimeout(10)
exten => 947,3,Set(TIMEOUT(digit)=7)
exten => 947,4,Set(TIMEOUT(response)=10)
exten => 947,5,Flite("At the beep enter the five digit zip code for the weather report you wish to retrieve.")
exten => 947,6,Read(ZIPCODE,beep,5)
exten => 947,7,Flite("Please hold a moment while we contact the National Weather Service for your report.")
exten => 947,8,AGI(nv-weather-zip.php|${ZIPCODE})
exten => 947,9,NoOp(Wave file: ${TMPWAVE})
exten => 947,10,Playback(${TMPWAVE})
exten => 947,11,Hangup

; demo dial 1234
exten => 1234,1,Playback(demo-congrats) ; extensions can dial 1234
exten => 1234,2,Hangup()
exten => h,1,Hangup()

; dial 69 from extension gets streamed MOH
exten => 69,1,Answer
;exten => 69,2,MusicOnHold(JewishBroadcast)
exten => 69,2,MusicOnHold(Olam-Radio)
exten => 69,3,Hangup

include => custom-recordme

; custom-count2four,s,1 can be used as a custom target for
; a Digital Receptionist menu or a Ring Group
[custom-count2four]
exten => s,1,SayDigits(1234)
exten => s,2,Hangup

[QueueMusic]
exten => s,1,MusicOnHold(JewishBroadcast)
exten => s,2,MusicOnHold(Olam-Radio)
exten => s,3,MusicOnHold(Shmais-Radio)
exten => s,4,Flite("Press 1 for Jewish Broadcast dot com. 2 for Olam Radio. 3 for Shmais Radio. Press 9 to hear this list again.")
exten => s,5,goto(from-internal-custom,68742,2)
exten => s,6,Hangup

; extensions can also dial 5678
; custom-recordme,5678,1 can be used as a custom target for
; a Digital Receptionist menu or a Ring Group
[custom-recordme]
exten => 5678,1,Wait(2)
exten => 5678,2,Record(/tmp/asterisk-recording:gsm)
exten => 5678,3,Wait(2)
exten => 5678,4,Playback(/tmp/asterisk-recording)
exten => 5678,5,Wait(2)
exten => 5678,6,Hangup

[traffic]
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,Playback(pls-wait-connect-call&digits/2&traffic&information)
exten => s,n,Dial(SIP/TollFreeGateway/18666987232)
exten => s,n,Hangup()
exten => s,t,Congestion()

#include extensions_a2billing.conf
#include custom_weatherzip.conf


[mm-announce]
exten => s,1,Set(CALLERID(name)=MMGETOUT)
exten => s,n,Answer
exten => s,n,Playback(conf-will-end-in)
exten => s,n,Playback(digits/5)
exten => s,n,Playback(minutes)
exten => s,n,Hangup

[mm-end]
;Used by cbEnd script to play end of conference warning
exten => _mmplay.,1,Answer
exten => _mmplay.,2,MeetMe(|dq)
exten => _mmplay.,3,Hangup

[custom-meetme3]
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,CBMysql()
exten => s,n,Hangup

-----------------------------

Looking forward to hearing from y'all

thanks leon
 

wa4zlw

Member
Joined
Feb 14, 2008
Messages
845
Reaction score
22
THis is when an extension is dialed and followme has the MOH set; note it still plays the wrong one:

dialparties.agi: Starting New Dialparties.agi
== Parsing '/etc/asterisk/manager.conf': Found
== Parsing '/etc/asterisk/manager_additional.conf': Found
== Parsing '/etc/asterisk/manager_custom.conf': Found
== Manager 'admin' logged on from 127.0.0.1
dialparties.agi: Caller ID name is 'Reading, PA Cell Phone' number is '6102238642'
dialparties.agi: Methodology of ring is 'ringallv2'
-- dialparties.agi: Added extension 610 to extension map
-- dialparties.agi: Extension 610 cf is disabled
-- dialparties.agi: Extension 610 do not disturb is disabled
-- dialparties.agi: dbset CALLTRACE/610 to 6102238642
-- dialparties.agi: Filtered ARG3: 610
== Manager 'admin' logged off from 127.0.0.1
-- AGI Script dialparties.agi completed, returning 0
-- Executing [s@macro-dial:7] Dial("SIP/64.2.142.116-b7d01ec0", "SIP/610|22|m(JewishBroadcast)tM(auto-blkvm)") in new stack
-- Called 610
-- Started music on hold, class 'default', on SIP/64.2.142.116-b7d01ec0
-- SIP/610-08fb8ff8 is ringing
-- Stopped music on hold on SIP/64.2.142.116-b7d01ec0
== Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/64.2.142.116-b7d01ec0' in macro 'dial'
== Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/64.2.142.116-b7d01ec0'
-- Executing [h@macro-dial:1] Macro("SIP/64.2.142.116-b7d01ec0", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] ResetCDR("SIP/64.2.142.116-b7d01ec0", "vw") in new stack
-- Executing [s@macro-hangupcall:2] NoCDR("SIP/64.2.142.116-b7d01ec0", "") in new stack
-- Executing [s@macro-hangupcall:3] GotoIf("SIP/64.2.142.116-b7d01ec0", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,6)
-- Executing [s@macro-hangupcall:6] GotoIf("SIP/64.2.142.116-b7d01ec0", "0?skipblkvm") in new stack
-- Executing [s@macro-hangupcall:7] NoOp("SIP/64.2.142.116-b7d01ec0", "Cleaning Up Block VM Flag: BLKVM/610/SIP/64.2.142.116-b7d01ec0") in new stack
-- Executing [s@macro-hangupcall:8] DBdel("SIP/64.2.142.116-b7d01ec0", "BLKVM/610/SIP/64.2.142.116-b7d01ec0") in new stack
-- DBdel: family=BLKVM, key=610/SIP/64.2.142.116-b7d01ec0
-- Executing [s@macro-hangupcall:9] GotoIf("SIP/64.2.142.116-b7d01ec0", "1?theend") in new stack
-- Goto (macro-hangupcall,s,11)
-- Executing [s@macro-hangupcall:11] Hangup("SIP/64.2.142.116-b7d01ec0", "") in new stack
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/64.2.142.116-b7d01ec0' in macro 'hangupcall'
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/64.2.142.116-b7d01ec0'
pbx*CLI>
 

tshif

Guru
Joined
Jan 3, 2008
Messages
1,240
Reaction score
4
Try going into FreePBX and re-saving your stream definitions. (Where you defined the audio streams).
 

wa4zlw

Member
Joined
Feb 14, 2008
Messages
845
Reaction score
22
Hi there...sorry took a few days to get back to you. This DID work :smile5: THANKS!

Now why? Is there anyway to avoid this in the future?

Leon
 

tshif

Guru
Joined
Jan 3, 2008
Messages
1,240
Reaction score
4
Ive seen weird failures like this before - usually associated with a backup restore that otherwise seemingly went just fine.

I don't know how to avoid it, or exactly what triggers it - I just thought this situation sounded similar enough to try the fix.

-tshif
 

Hat

Guru
Joined
Dec 18, 2007
Messages
88
Reaction score
0
I had the same problem. Mine was caused by the latest FreePBX module update. Fixed it by re-saving. This has happened on the last two module updates.
 

wa4zlw

Member
Joined
Feb 14, 2008
Messages
845
Reaction score
22
GLad it wasn't me :smile5:
Thanks
on another note, where does one find how to program the pbx with all the function calls etc>?
 

Members online

Forum statistics

Threads
25,811
Messages
167,759
Members
19,240
Latest member
nikko
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