3cx

My Experience with 3CX
I decided to give myself a side project—setting up my very own phone system entirely in the cloud. I chose 3CX, since it’s what we deploy for clients at work, and they happened to be offering a one-year free trial.
Even though I already had plenty of experience managing phone systems (installing phones, setting up users, ring groups, etc.), I had never set one up entirely from scratch on my own. That made the initial setup both exciting and a little daunting.
Hosting the Phone System
I needed somewhere to host my phone system, so I spun up a free AWS EC2 micro instance (t2 family). It provides more than enough performance since there would only ever be a maximum of two calls at once.
In the future, I may move it to my own Linux server at home—once I make a little more space for hardware!
Installing 3CX
The next step was creating a 3CX account and installing it on my AWS instance. One great feature of 3CX is that you can provide your EC2 keypair, and it will install directly onto your instance for you. After leaving it to run for a few minutes, I had my own personal phone system in the cloud.
Setting Up a SIP Trunk
Of course, having a PBX is pretty pointless if you can’t actually make calls! My next step was setting up a SIP trunk.
My original plan was to use Amazon Chime to buy a number and connect their SIP service, but unfortunately, that option isn’t available in the UK. After some research, I settled on Voip.ms, which struck a good balance for personal use without locking me into a bundled PBX service.
Purchasing a DID from Voip.ms was straightforward, though it took about five days to complete. After verifying my identity and activating the account, I added funds and chose a toll-free local number.
The integration with 3CX was simple—Voip.ms is fully supported. I just needed to enter my account details into the SIP trunk section on the 3CX dashboard… or so I thought.
The Outgoing Call Problem
Incoming calls worked straight away, but outgoing calls were another story. I ran into a range of errors: forbidden, declined, service unavailable, and more.
Eventually, I discovered the issue: Voip.ms is a Canadian provider, so outbound calls from the UK needed to be treated as international. I had to prepend numbers with 011
followed by the country code. To simplify things, I created an outbound rule in 3CX that automatically stripped numbers and added the correct prefix for me. Problem solved!
Handling Incoming Calls
Now came the fun part—deciding how to handle incoming calls. Since the goal was to replace our home phone, I wanted both my girlfriend and me to be able to pick up no matter where we were.
I considered using a digital receptionist, but that felt a bit overkill for personal use. Instead, I set it up so that:
- My extension rings for 8 seconds
- Then both our extensions ring for another 10 seconds
- If unanswered, it goes to my voicemail
Since I didn’t have access to 3CX’s enterprise features, I had to create two separate ring groups instead of using a proper queue, but it worked perfectly.
Final Touches
To finish things off, I added:
- An out of office greeting
- A custom voicemail message
- Some hold music
The last challenge? Convincing my significant other to actually use it!
In short: setting up 3CX from scratch gave me a much deeper understanding of how phone systems work at every level—from hosting and SIP trunks to routing and user experience. It was both a fun challenge and a rewarding project.