Before you start
- 3CX system owner or admin role.
- Your 3CX public IP on the CLIRoutes endpoint, or SIP credentials.
- Authorised caller IDs and any DIDs you want to receive on the trunk.
Placeholders in angle brackets, such as <ACCOUNT_ID>, come from your portal. The host shown is a placeholder; use the one listed under Portal → Network.
Set up 3CX
- 01
Add the trunk
Go to Admin → Voice & Chat → Add Trunk. Select your country, choose Generic SIP Trunk as the provider and enter your main number (an authorised caller ID or DID).
- 02
Set registrar and authentication
Fill in the fields below. Number of SIM calls must not exceed the channel limit on your endpoint, or 3CX will attempt calls we reject with
503.Trunk · General Registrar/Server/Gateway .. sip.example-carrier.net Port ...................... 5060 Outbound Proxy ............ (blank) Number of SIM calls ....... <CHANNEL_LIMIT> Type of Authentication .... Register/Account based (or IP based) Authentication ID ......... <ACCOUNT_ID> Password .................. <SIP_PASSWORD> - 03
Configure caller ID
On the Caller ID tab set Outbound Caller ID to an authorised number. Under Options → Outbound Parameters, map *P-Asserted-Identity* to *OutboundCallerId* so we receive the number in the header we validate.
- 04
Choose codecs
On Options → Codec priority, order PCMA, PCMU, then G729. Remove codecs you do not use so negotiation stays predictable.
- 05
Create an outbound rule
Go to Admin → Outbound Rules → Add. Match calls starting with
00, route them via the CLIRoutes trunk and strip two digits so we receive country code plus number. Add a second rule for+if your users dial from contacts.Outbound rule Calls to numbers starting with ... 00 Route 1 ........................... CLIRoutes Strip digits ...................... 2 Prepend ........................... (blank) - 06
Route inbound DIDs and test
For each DID, add it on the trunk DIDs tab and create an inbound rule pointing to an extension, ring group or IVR. Then call a mobile you control from an extension, confirm the caller ID, and call one DID from outside.
Inbound and outbound parameters
3CX reads the called number for inbound calls from a configurable header. We send the DID in the Request-URI and To header in country code plus number format, so set *CalledNum* to *Request Line URI: User Part*. For outbound, the generic template already populates From with the caller ID; adding the PAI mapping above makes validation consistent across all destinations.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
403 Forbidden | Source IP not allow-listed, wrong credentials, or caller ID not authorised | Check Portal → Endpoints and Caller IDs |
484 Address Incomplete | Number sent in national format or with a leftover prefix | Send country code + number, no + or 00 |
| One-way or no audio | NAT not handled or RTP blocked | Set external address, open the RTP range |
| Trunk shows red | Registration failed or firewall check failing | Run Firewall Checker; re-enter credentials |
Last verified by the CLIRoutes routing team. Menus can change between releases; if a field has moved, tell us.