I just made a free realtime Calls and Contacts Panel (+ contactmanager integration, better callerid and more)

I recently made the switch from 3CX as it lacks basic features for home/small-businesses.

FreePBX shines with customizability but the UI/UX is just awful.
A few things that were missing for me were:

  • the ability to monitor incoming/outgoing calls in realtime
  • a nice call log
  • properly working caller id in case I saved contact numbers without area codes
  • a usable contact manager

So I just build a module that does all this and more. It also integrates with what is already there (contactmanager, calleridlookup, pm2, ami, …). The backend uses node and the frontend is written in React.

You can find it here: https://github.com/adroste/freepbx-realtime-calls-contacts-panel

It’s free and open source (AGPLv3).
I’m happy about feedback and would love to see contributions from the community.
The module wrapper itself (FreePBX PHP module) is a bit hacky as I had practically zero knowledge about the inner workings of FreePBX modules including all the PHP stuff. Anyway, it works.


  • Realtime Call Monitoring
    • View Active Calls (Incoming/Outgoing)
    • View Call Logs
  • Better CallerID Lookup
    • CallerID for Incoming and Outgoing Calls
    • Integrates with CallerID Lookup Module
      • Custom Lookup Rest Endpoint
      • Can match Numbers with and without custom area codes
  • Better Contact Management
    • Integrates with FreePBX ContactManager
    • Create/Update/Delete Contacts with beautiful UI
    • Save unknown Numbers from Call Logs directly as new Contacts
    • Add unknown Numbers from Calls Logs directly to already existing Contacts (via a Search feature)
  • Start Calls directly from the browser from any extension (or ring group) to any number
  • Beautiful UI (React + NodeJS)
  • Multi-Language Support
    • supported Languages (yet): English :us::uk:, German (Deutsch) :de:
    • new languages can be added easily
  • Automatic Phonebook Generation
    • generates IP phone compatible phonebooks (including multiple saved phone numbers per contact)
    • supported manufacturers (yet): yealink, fanvil
  • FreePBX Module Wrapper
    • Easy install via FreePBX Module Admin
    • Uses PM2 Module to run the backend service
    • Administration View in FreePBX to configure the panel


Looks like good stuff here. You need something to prevent installing on versions below 16, something like this in module.xml should do it:


I would love to try it, but it looks like you’re not developing with the FreePBX distro, the nodejs requirement is newer than what comes with SNG7.

1 Like

Honestly, that is more of a problem with the distro. So many things are outdated.


@adro, at first blush it works very well in my deployments.

Excellent work, very pretty, Thanks!


(and as a VM costs less than 1cent per hour to give it a spin, anyone curious could throw a quarter of a buck and an hour or two of time at it perhaps :wink: )

Thanks for the feedback. True, I’m not using the official distro but a RPi 4 installed with the script from RonR ([PBX] FreePBX for the Raspberry Pi - VOIP Tech Chat | DSLReports Forums). I’m currently on FreePBX 16 and Asterisk 19 (+ modified version checks).

The nodejs version requirement is just a blind guess from my side. I developed this using the latest LTS (v16). I actually don’t know which node versions really are supported (as I don’t want to look into repos of the dependencies). I’m sure 16 and 15 work fine. As 14 is the last LTS is should also work. Only the package-locks will be broken as 14->15 changed the locking format. Just remove the engine requirement and try it.

I also thought the supported tag is the same as depends->version, but I’ll add it.

The one thing I have headaches with is the database schema of the contactmanager module. Is there any way to pin the module to the schema version? I’m afraid that a non-major update of the contactmanager will change the schema or field values and silently break compatibility with my module. I mean, I’ll notice it when someday my contacts go crazy, but I don’t want to be responsible for broken database entries.


This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.