From a €5 Charity Shop Find to a Fully Working Phone System (Beginner Guide)

From a €5 Charity Shop Find to a Fully Working Phone System (Beginner Guide)

On the 3CX page, click on your account, and there you will see an option to add an IP Phone.How I built my own PBX using 3CX and Twilio — starting with a second-hand SIP phone, zero VoIP experience, and a lot of trial and error.


The Story — How This All Started

I wasn't planning to build a phone system that afternoon.

I was browsing a local charity shop when I spotted a Yealink T42U , with a €5 price tag. If you've worked in IT or telecoms, you'll immediately know these are serious business phones — the kind that normally costs €80–€150 new. I grabbed it without a second thought.

Now, setting up a PBX system had already been sitting on my project list for a while. I'd been curious about VoIP for ages, but never got around to actually doing it. This €5 phone was the push I needed.

What followed was a genuinely fun — and occasionally head-scratching — journey through VoIP, SIP trunks, outbound rules, dial plans, and number formatting. I hit real problems and fixed them in real time, and in this post, I'm going to walk you through the whole thing from scratch.

No experience with VoIP? Perfect. That's exactly who this is written for.


What Is VoIP — And Why Should You Care?

Before we touch any settings, let's get the basics sorted. I promise to keep this simple.

VoIP (Voice over IP) just means making phone calls over the internet instead of a traditional phone line. When you use WhatsApp or FaceTime to call someone, that's VoIP. We're doing the same thing, but with proper desk phones and a real phone number.

PBX stands for Private Branch Exchange. It's your internal phone system—the "brain" that connects your phones, routes calls, handles voicemail, and bridges your desk phones to the outside world.

Traditional PBX systems are large physical boxes that sit in a comms room or server rack. They cost thousands of euros to install and required telecoms engineers to make even basic changes. If you've worked in a business office, you've probably seen one.

Image of a PBX server

Modern PBX systems like 3CX run entirely in the cloud. You manage everything through a web browser. No hardware, no engineer, no massive bill.

SIP Trunk is the connection between your PBX and the outside telephone world. Think of it as your phone line — except it comes over the internet. Twilio provides ours in this guide.

Here's a simple overview of how it all fits together:

Your Desk Phone → 3CX (PBX) → SIP Trunk (Twilio) → The Internet → Other Phones

What You Need

Here's what I used to build this. The total cost was very low:

Yealink T42U SIP Phone: €5 (charity shop!)
You can also use a App on your phone.

3CX Free Cloud Account: Free

Twilio Account : Pay-as-you-go (Irish number ~$1/month)

Internet connection: Already had it        

That's it. No server. No special hardware. No expensive licences.


Step 1 — Setting Up Your 3CX Free Account

Go to 3cx.com and sign up for an account. For this project, I used the free 3CX SMB (Shared) plan.

What Is the SMB Shared Plan?

It's a fully hosted PBX — meaning 3CX runs it all for you in the cloud. You don't install anything on your own machine. You just sign up and have a working phone system waiting for you immediately.

What you get:

  • Up to 10 users
  • No business verification required
  • Access via a web browser from anywhere
  • Mobile and desktop softphone apps included
  • Completely free

Limitations to be aware of:

  • It's a shared instance, so you don't control the underlying server
  • Works best with the 3CX apps (we'll get around this with our Yealink phone, but it takes a bit of extra work)
  • Limited customisation compared to a self-hosted install

For learning and home lab purposes, it's absolutely ideal. You're up and running in minutes.

Once you've signed up, log in to your 3CX Admin Console. This is where all the configuration happens.


Step 2 — Setting Up Your SIP Trunk (Twilio)

A SIP trunk connects you to real phone numbers and the public telephone network. I went with Twilio for this project for a few reasons:

  • They support Irish phone numbers
  • They have a clean setup process
  • Their pricing is pay-as-you-go with no monthly contract
  • They integrate well with 3CX

Setting Up Twilio

  1. Go to twilio.com and create an account

2. Purchase an Irish phone number (costs around $1/month)

  1. Navigate to the Phone Numbers section, and click on Manage and then Buy New Number. Here you can choose your location, in my case, Ireland. I then had to provide some proof of address information, and wait a few days for the confirmation.

When you have your account verified you can go back to "Buy a Number" section on Twillo and purchase a number.
You can then add it to your "Account info" section below the Account SID and Auth Token.
You will need this on the 3CX site to connect your accounts later.



Adding the Trunk in 3CX

In your 3CX Admin Console:

  1. Go to Voice & Chat → SIP Trunks
  2. Click Add Trunk
  3. Select your country (Ireland) and choose Twilio as the provider. This will allow you to "Auto Setup" your account,
  4. Enter your Twilio SIP server, Account SID and your Auth Token from the Twilio admin page,
  5. Add your Twilio phone number as the Main Trunk Number

When configured correctly, the top of the trunk page will show a green Registered status. That means 3CX has successfully connected to Twilio, and you're ready to go.


Step 3 — Setting Up Inbound Calls

Getting calls to come in is actually the more straightforward part.
Since we used the Auto setup, you will now see that you have a Trunk setup and you will be able to make calls to the number you bought.

In practice, this means:

Someone dials your number
→ Twilio receives the call
→ 3CX matches it to your DID
→ Routes to your extension
→ Your desk phone rings

How to Verify It's Working

Go to Dashboard → Event Log in 3CX. When a call comes in you should see something like:

Incoming call from +3538XXXXXXX to +353412140951
Matched DID rule
Routing to Extension 100

If you're not seeing that, check that the DID number format in 3CX matches exactly what Twilio is sending. This is one of the most common issues — more on troubleshooting later.


This is where the Yealink T42U comes in. 3CX has a feature called Auto Provisioning that automatically pushes all phone configuration — extension number, SIP credentials, display name — directly to the phone. You don't need to manually configure anything on the phone itself.
I did have some issues with this, as the phone did not have the correct Firmware to work with 3CX. It wasn't that bad to get it up to date.
When the phone is connected to your network, you can browse to its IP address and see the phone's administration page.
I downloaded the required firmware updates from the Yealink website and pushed them to the phone.

By now, you should have your account set up, but you can also set up additional accounts. For this tutorial, I am just going to add the Desk Phone to my account.
On the 3CX page, click on your account, and there you will see an option to add an IP Phone.

You can then choose your phone from the options,

Then add the MAC address of your Phone, and click Next.

3CX will automatically push the configuration to the phone. Within a minute or two, the phone's screen should show your extension number and display name, and the line indicator should be solid green.


Step 5 — Setting Up Outbound Calls (Where Things Got Interesting)

This is where my real learning happened. Once the phone was registered and inbound calls were working, I picked up the Yealink, dialled a number, and got:

"3CX cannot reach the number you called."

This is actually one of the most common issues with 3CX setups, and it almost always comes down to one of three things:

  1. No outbound rule matches the number you dialled
  2. The wrong trunk is being selected
  3. The number format is not what the provider expects

Let me explain how I worked through all three.

Understanding Outbound Rules

Think of Outbound Rules as the traffic management system for your calls. When you dial a number, 3CX checks its rules from top to bottom and asks: "Does this number match one of my rules?" If it finds a match, it knows which trunk to send the call out on and how to format the number.

If nothing matches, you get that error message.

The Number Format Problem

This was my first issue. I was dialling:

0831234567

But Twilio (like most modern SIP providers) expects numbers in E.164 international format:

+353831234567

E.164 is the international standard for phone numbers. It's basically: + then the country code, then the number without the leading zero.

So for Irish numbers:

  • You dial: 083 123 4567
  • Provider expects: +353831234567

Creating the Outbound Rules

Go to Voice & Chat → Outbound Rules and create the following rules.


Rule 1 — Irish National Calls

Setting Value
Rule Name Ireland National
Prefix 01,02,03,04,05,06,07,08,09
Strip Digits 1
Prepend +353
Route 1 Your Twilio trunk

Why this works:

When you dial 0834743838, 3CX:

  1. Matches the prefix 08
  2. Strips the leading 0
  3. Adds +353
  4. Sends +353831234567 to Twilio

✅ Twilio accepts it, and the call goes through.

Important note: I originally set the prefix to just 0 Instead of listing all the digits. This caused a major problem with international calls, which I'll explain next.


Rule 2 — International Calls

Setting Value
Rule Name International
Prefix 00
Strip Digits 2
Prepend +
Route 1 Your Twilio trunk

Why this works:

When you dial `00442812345678 (a UK number in international dialling format):

  1. 3CX matches the 00 prefix
  2. Strips the 00
  3. Adds +
  4. Sends `+442812345678 to Twilio

✅ Correct international format.


Rule 3 — Emergency Numbers

Setting Value
Rule Name Emergency
Prefix 112,999
Strip Digits 0
Prepend (leave blank)
Route 1 Your Twilio trunk

Critical: Make sure this routes to your trunk, not to "Blocked". In a real-world setup, blocking 112 or 999 is dangerous. Don't skip this.


The Rule Order Problem (The Biggest Gotcha)

This one caught me out and is worth explaining in detail, because it's the kind of thing that seems obvious in hindsight but is really easy to miss.

After setting up my outbound rules, I tried calling a UK number and it still failed. Looking at the call logs, I could see 3CX was sending this to Twilio:

+3530442812345678

That's clearly wrong. What happened?

The problem was rule orderthe order of the rules. 3CX processes rules from top to bottom and stops at the first match. My rules were ordered like this:

  1. Ireland National (prefix: 0)
  2. International (prefix: 00)
  3. Emergency

Because my Ireland rule used the prefix 0 and 00 starts with 0, the Ireland rule was catching international calls first — before the international rule even got a look in.

So `00442812345678 was being processed like this:

The fix was simple: Change the Irish national prefix from 0 to 01,02,03,04,05,06,07,08,09.

This makes the Ireland rule specific enough that it won't accidentally match 00. The international rule can then catch 00 properly.

With that change, the call flow becomes:

Dial: 00442812345678
→ Rule 1 (Ireland): doesn't match (doesn't start with 01–09)
→ Rule 2 (International): matches 00 ✅
→ Strip 00, add +
→ Sends: +442812345678
→ Call connects

Troubleshooting — What to Check When Things Go Wrong

Here's a quick reference based on the issues I actually ran into.

"3CX cannot reach the number you called"

This means no outbound rule matched. Check:

  • That you have an outbound rule with the right prefix for the number you dialled
  • The rule is assigned to your trunk
  • That the trunk shows as Registered

Call connects to trunk but fails immediately

This usually means a number format issue. Go to Reports → Outbound Calls and check the Callee column — this shows the actual number 3CX sent to your provider. If it looks wrong, fix your Strip Digits and Prepend settings.

Inbound calls are not ringing

Check that:

  • The DID in your SIP Trunk settings matches exactly what Twilio sends
  • Go to Dashboard → Event Log when a call comes in, and look for what DID number is appearing

Rule matches the wrong calls

Check your rule order. Rules are processed top to bottom. More specific rules (like 00) need to be above more general ones (like 0).


My Final Outbound Rule Setup

After working through all of this, here's the clean setup I ended up with:

Priority Rule Name Prefix Strip Prepend Purpose
1 Emergency 112,999 0 Emergency services
2 International 00 2 + International calls
3 Ireland National 01,02,03,04,05,06,07,08,09 1 +353 All Irish numbers

This setup will handle:

  • ✅ Irish mobile numbers (083, 085, 086, 087, 089)
  • ✅ Irish landlines (01, 021, 061, etc.)
  • ✅ UK and international numbers (0044, 0049, etc.)
  • ✅ Emergency services (112, 999)

The Final Result

After all of that:

  • ✅ Inbound calls working — phone rings when someone calls my number
  • ✅ Outbound Irish calls working — national and mobile
  • ✅ Outbound international calls working — UK and beyond
  • ✅ Phone auto-provisioned via 3CX — no manual configuration needed
  • ✅ Total hardware cost: €5

What's Next?

If you want to take this further, 3CX supports a lot of additional features:

  • Mobile apps — use 3CX on your iPhone or Android as a softphone
  • Voicemail — set up per-user voicemail with email notifications
  • Digital Receptionist / IVR — "Press 1 for sales, press 2 for support"
  • Ring Groups — ring multiple phones simultaneously
  • Call Queues — for handling multiple incoming calls
  • Multiple extensions — add more users and phones

Final Thoughts

What started as a random €5 find turned into a genuinely fun learning project. VoIP and PBX systems can seem intimidating at first — lots of jargon, lots of settings — but once you understand the basics, it all clicks into place fairly quickly.

The biggest lesson I took from this: the dial plan is everything. Get the number formatting right and almost everything else falls into place. Get it wrong, and you'll spend a lot of time staring at call logs, wondering why your calls are failing.

If you're into IT, networking, or just like building things, I'd highly recommend giving this a go. The free 3CX account and Twilio's pay-as-you-go pricing mean you can set up a working phone system for almost nothing.

And if you find a SIP phone in a charity shop... you know what to do.


If you found this helpful, I'll be posting more home lab and real-world IT projects on jimgogarty.com. Feel free to reach out if you get stuck — these things always look easier in a tutorial than they are in real life.