3CX Phone System version 20: new features, API support and hosting flexibilities

0.00 avg. rating (0% score) - 0 votes

The last time I worked with 3CX was back in 2018, during a call center deployment where I used the 3CX Call Control API to customize extension-to-extension call behavior and implement per-user call restrictions. That project ultimately failed, mostly due to the closed source nature of 3CX and lack of documentation for the Call Control API, resulting in partially implemented workarounds which later exhibited bugs when enough call traffic was received. In the end, the customer chose to migrate to the fully customizable, open-source Asterisk and FreePBX, leaving my 3CX solution behind. I did not play with 3CX again until earlier this year, assisting a friend with a simple call-forwarding setup, and this article will summarize my (limited) experience with 3CX version 20, the latest version available in 2024.

A lot of things have changed over the years and 3CX is now available in two different editions: hosted, which runs on DigitalOcean, according to this 3CX blog post, and on-premise. I signed up for a two-month free trial of the hosted version, thinking it was all I needed, but I soon realized I was mistaken. Among other things, the hosted version does not allow you to configure a generic VoIP provider where you would only need to provide a valid SIP account to terminate external calls – an account from a supported provider is required. In order to make calls from one of the extensions, you can either use the 3CX mobile app or a supported VoIP phone model, and not just any model. The first phone added to a user must also be a router phone that runs a Session Border Controller (SBC); otherwise SIP calls will not work. I was put off by these limitations of the hosted version (which were non-existent when I last played with 3CX) and decided to choose the on-premise version instead.

The first hurdle was that I simply couldn’t find anywhere to download the on-premise version of 3CX version 20, either for Windows or for Debian, on their website. After researching around, it turned out that you need to purchase a license first. Only then, will you be able to login to 3cx portal and download the installer for the on-premise version. In previous versions I had always been able to download the installers directly from 3CX. Next, purchasing the license online using credit card is not possible – I had to contact a local reseller and made payment via local bank transfer! I eventually was able to get version 20 running, after paying USD 250 for the 3CX Enterprise annual license, supporting a maximum of 4 concurrent calls and 10 users.

Except for some menu restructuring, nothing much has changed on the admin portal. Nevertheless it took me a while to realize that Digital Receptionist (where you create IVR) is now under Call Handling:

Screenshot 2024-10-26 235440

SIP trunks and gateway settings are now located under Voice & Chats:
Screenshot 2024-10-26 235344

Section Reports contains the call history and usage statistics:

Screenshot 2024-10-26 235646

Section Integration is new to me. According to 3CX official documentation, this section facilitates the integration of your 3CX system with your CRM, ERP or accounting system. Common platforms such as Zendesk, Hubspot or Zoho are supported:

Screenshot 2024-10-27 000051

To test this feature out, I requested for a Zendesk trial account, entered the credentials into the above form, and clicked on the Test button. What this button does is to attempt to lookup a phone number on your Zendesk CRM system using the credentials provided. If a match is returned then the provided credentials are correct. If a match is not returned, you can check the CRM log to find out the reason. During my tests, sometimes connection to Zendesk would fail due to SSL errors even with correct credentials:

Screenshot 2024-10-27 000515

If the credentials are correct, the details of the contacting matching the given phone number will be returned. You can then tick Enable Call Journaling and Enable Chat Journing, which will allow 3CX to create a Zendesk ticket for new calls made or or new chats initiated. During my tests, ticker are only created if the called extension’s mobile number can be mapped to a contact on Zendesk’s CRM. If email notifications are enabled on Zendesk, the called contact would receive an email like this from Zendesk:

Screenshot 2024-10-27 000818

If Zendesk tickets are not created despite correct credentials, you might want to take a look at Dashboard > Troubleshooting > Activity logs and also at the Event Log section. In 3CX version 20, a new button called Support Info is added, which will download a ZIP file of all log files on the server. A button called Capture is also added to allow packet capturing, which will require an existing installation of Wireshark. For the log to contain useful info, the logging level should be set to Verbose. If log download doesn’t work, you can find the files manually in the C:\ProgramData\3CX\Instance1\Data\Logs folder.

Screenshot 2024-10-27 001404

The Advanced tab contains more advanced features, some of which were previously hidden deep inside several level of settings. Among these settings, I always review the Network tab, Allowed Country Codes and E164. On several occasions, my Network tab pointed to the wrong network card and incoming calls would not work. I always disable E164 as all it apparently does is converting + to 00, which is not supported by my provider. The list of allowed country codes should also be reviewed:

Screenshot 2024-10-27 002101

Until this day I do not think differentiating the server IP address used for for in-office and out-of-office conditions, depending on the office hours settings, like what is implemented by 3CX, is useful. For this reason, I always turn off Block remote non-tunnel connections – this setting will just block the extension from registering if 3CX thinks (often wrongly) that the registration request is being made from outside the network. The PBX delivers audio seldom has any effects in my experience and I could not find any detailed 3CX documentation on this setting either.

Screenshot 2024-10-27 002642

After the system has been running for a while, the Event Log will contain multiple “Unidentified Incoming Call” entries, most likely from attacking attempts made by hackers:

Screenshot 2024-10-27 003151

3CX has settings such as IP Blacklist and Anti-Hacking which will blacklist a particular IP if there are multiple failed calls or unsuccessful registration attempts. If your event log contains too many “Unidentified Incoming Calls” entries, the default anti-hacking value might need to be tweaked:

Screenshot 2024-10-27 003445

If you system expects incoming DID calls from an external service such as FlyNumber but terminates outgoing calls on a different provider, incoming calls might be rejected as unidentified because 3CX does not recognize the originating IP of the call. To workaround this, add a dummy SIP trunk, setting the DID number as the trunk number and the registrar IP as the originating IP of the call (shown in the Event Log). With this configuration, incoming calls from this DID will be accepted by 3CX and shown in the call history.

To allow SIP registrations and calls as well as mobile app login using the server’s public IP, the following entries must be configured in the firewall (see this article for details)

  • Port 80/443 (TCP) – Web Portal
  • Port 5001 (TCP/UDP) – 3CX Provisioning
  • Port 5060 (TCP/UDP) – SIP (unencrypted)
  • Port 5061 (TCP/UDP) – SIP via TLS
  • Port 5090 (TCP/UDP) – 3CX Tunneling
  • A custom range of UDP ports for RTP audio packets depending on server/phone configuration. On most deployments, I picked 9000-30000 (UDP).

With the above firewall settings, I was able to login to my 3CX server using the 3CX mobile app. Voice and video calls as well as chat works fine.

I also had a brief look at the Call Control API. The new API is more modern, supporting asynchronous requests and transactions, using keywords such as await. The documentation is also provided as HTML instead of CHM (Compiled HTML) format, which is now deprecated. Nevertheless, the architecture remains largely the same and I was able to write a few sample apps with it.

Overall, I find 3CX version 20, especially the on-premise version, more convenient to use compared with earlier versions. Features like CRM integration and the new Call Control API could certainly come in handy, providing users with seamless connectivity and enhanced functionality. Additionally, the cloud version of 3CX offers limited but useful features without the need to deploy on-premises hardware.

References

Updated Call Control API for V20
Hosted with 3CX – Explained
Integrating a CRM using the CRM Integration Wizard

 

 

0.00 avg. rating (0% score) - 0 votes
ToughDev

ToughDev

A tough developer who likes to work on just about anything, from software development to electronics, and share his knowledge with the rest of the world.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>