New in FS PBX — AI-Powered Call Transcriptions & Summaries (AssemblyAI + OpenAI)

pbxgeek

Active Member
Jan 19, 2021
564
163
43
38
Hey everyone,

We’ve just released a new Call Transcriptions module in FS PBX, bringing AI-powered transcription and summarization directly into your PBX — no external scripts, no manual uploads, no patchwork integrations.

Here’s what this release includes


AI Voice Transcriptions (AssemblyAI)​


Inside the CDR page, you can now click on any recorded call and instantly generate a high-accuracy transcript. Auto transcriptions are also available for all new calls
FS PBX uses AssemblyAI for transcriptions — and here’s why we chose them:

Why AssemblyAI?​

During development, we tested multiple leading providers:

OpenAI

We love OpenAI (and FS PBX integrates tightly with them), but when we began this project, they didn’t support speaker diarization. They later added it, so we gave them another shot — but in our testing, the transcription accuracy still wasn’t close to AssemblyAI’s output.
They also don’t accept URL-based audio, which means recordings would need to be uploaded — not ideal for privacy or compliance.
We still use them for summaries (see below).

Google Gemini

Gemini had diarization, but accuracy wasn’t strong and processing times were inconsistent and slow.

AssemblyAI

AssemblyAI consistently delivered the:
✔️ Best transcription accuracy
✔️ Most reliable speaker diarization
✔️ Fastest processing times
✔️ HIPAA compliance out of the box
✔️ PII redaction built-in
✔️ Ability to send just a URL link instead of uploading call recordings
✔️ Webhook notifications, so FS PBX receives a completion event instantly (no polling, no wasted resources)


The privacy aspect was a major factor:
Because AssemblyAI accepts secure recording URLs, we avoid uploading sensitive audio files to third-party servers altogether. They also let us ensure transcripts are deleted on their side after processing, and PII redaction helps keep everything compliant.

Given all of this, AssemblyAI was the clear choice for launch. We will continue to monitor other LLMs, and as they become more mature, we will add them too.



Smart AI Summaries (OpenAI)​

Call summaries, on the other hand, were best handled by the cheapest OpenAI model, so we decided to use them in this case. Once a transcription completes, FS PBX automatically sends it to OpenAI for summarization.
You’ll get:
  • Key Points
  • Action Items
  • Sentiment

Perfect for quick reviews, QA, training, and follow-up workflows.

Video Walkthrough​

We also published a complete video demo showing everything — recordings → transcription → summary → setup:

 
Last edited:
I want to highlight an important aspect of any PBX: we optimize server resource usage. Every stage of call transcription is managed through our scalable queuing system, which leverages Laravel queues, Redis, and Horizon. This setup ensures there are no noticeable spikes in CPU or memory consumption, allowing your servers to focus on their primary task—handling phone calls efficiently.
 
ASSEMBLYAI_API_KEY=
ASSEMBLYAI_REGION=US
ASSEMBLYAI_WEBHOOK_HEADER=
ASSEMBLYAI_WEBHOOK_SECRET=

I was not able to decipher what to put in for: ASSEMBLYAI_WEBHOOK_HEADER= ?
 
this is awesome, I spun up my first test box of fs pbx today to test this, install was a piece of cake, nice work

I setup the transcription, had to buy API credits with open AI. My transcriptions are sitting in queued , and I wonder, I have the server running in Azure and the firewall is set to only allow my IP traffic, does this require the pbx is externally accessible to work ?
 
Last edited:
this is awesome, I spun up my first test box of fs pbx today to test this, install was a piece of cake, nice work

I setup the transcription, had to buy API credits with open AI. My transcriptions are sitting in queued , and I wonder, I have the server running in Azure and the firewall is set to only allow my IP traffic, does this require the pbx is externally accessible to work ?
Please run these two commands. It should fix it

cd /var/www/fspbx
php artisan app:update
sudo supervisorctl restart all
 
And yes you need AasemblyAI to be able to reach your external URL and download the file for transcription. Only a link is sent to them instead of the actual file.
 
thanks, yeah i did the artisan update and server reboot already, but I think the issue is the firewall, I have just allowed HTTP&HTTPS and will wait and see, i guess my setup is a little uniqie as im just testing everything right now so the box is locked down
 
When transcriptions work they don’t take more than 3-5 minutes.

Those commands have to be run second time on some new installs. There was a lot going into getting the transcription configured and not everything starts up on a first try. We’ll optimize this in the future updates.

Make sure you followed all the steps in the video and selected AssemblyAi provider for transcriptions as well as added all API keys.

You can also check if there are any errors in the log just in case something is not right.

 
found the issue in assembly ai logs, its not downloading the file, i dont have an SSL cert on the box, but I also see its referencing the external IP of the box and not the domain i have setup for testing, so even if I put an SSL on that domain it wont help?

1763675889979.png
 
In that case it’s the settings in your .env file. You need to adjust everything to point to your domain. Then a proper URL will be created.

Follow this article. It references all setting you need to adjust.

 
In that case it’s the settings in your .env file. You need to adjust everything to point to your domain. Then a proper URL will be created.

Follow this article. It references all setting you need to adjust.

ah ok, is it a hard requirement to use a dns domain?, right now its just the external IP HTTP for app url & session domain & stateful

nevermind, its working, had to app update, Dex this is very cool
 
Last edited:
Let me get back to you on this. I’m testing something today for someone else that may help here as well. I’ll get back to you soon.