Visual call flows
Plan out what happens to a call on a canvas: greetings, business hours, menus, ring groups, voicemail and forwarding. AsterFi writes the dialplan for you.
AsterFi gives Asterisk, the proven open-source PBX, a clean modern web interface. Set up extensions, desk phones, call flows, queues and voicemail from your browser, on hardware you control.
BUILT ON PROVEN OPEN-SOURCE PARTS
Asterisk handles the calls. AsterFi handles the setup, so you rarely need to open a config file.
Plan out what happens to a call on a canvas: greetings, business hours, menus, ring groups, voicemail and forwarding. AsterFi writes the dialplan for you.
Ring a team together, or line callers up with hold messages. A waiting caller can press 1 to leave a message or 2 to ask for a callback.
New voicemail and missed calls arrive by email with a Listen button. You can also play messages from the web inbox.
Find phones on the network and adopt them, connect any SIP device, or make and take calls in the browser.
Write a prompt, pick a voice and hear it right away. Text-to-speech runs on your own server, so no cloud service is involved.
See every call live, then look back at each step it took: which phones rang, who answered and where it ended.
Send signed call, voicemail and phone events to your CRM in real time. A read-only API serves users, call history and voicemail.
Connect your SIP carrier, watch its registration status, and set dial patterns, digit rules and outbound caller ID for each route.
Admins and users each see their own view. Presence, do-not-disturb and forwarding are built in, and a shared contact list syncs to desk phones.
Each phone number points to a flow. Connect blocks on the canvas, save, and the change is live. You never have to touch the dialplan.
Assign a phone to a user and it picks up that user's extension. Each person can use one phone or several.
AsterFi scans your network for UniFi Talk phones, adopts them and sends each one its settings. A phone registers to Asterisk like any other extension.
Connect a desk phone, softphone or door intercom from any brand that speaks standard SIP. Desk phones can load the shared contact list as a remote phonebook.
Turn on the built-in web phone and the AsterFi tab becomes a softphone, with a dial pad, hold, mute and incoming-call alerts. There's nothing to install.
AsterFi POSTs events to your URL as calls happen. Every delivery is signed with HMAC-SHA256, and failed deliveries are retried. Ringing, answered, queued, missed, ended, new voicemail and phone status are all available.
call.inbound arrives.POST /hooks/asterfi X-AsterFi-Event: call.answered X-AsterFi-Signature: t=1761676543,v1=5f2a…c9 { "id": "4812", "event": "call.answered", "timestamp": "2026-10-28T18:35:43.477Z", "data": { "id": "1761676521.42", "direction": "inbound", "from": "8605550142", "to": "8605550100", "answeredBy": "104", "state": "talking" } }
import crypto from 'node:crypto'; function verifyAsterFi(rawBody, header, secret) { const p = Object.fromEntries( header.split(',').map((x) => x.split('='))); const t = Number(p.t); // reject anything older than 5 minutes if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false; const want = crypto.createHmac('sha256', secret) .update(`${t}.${rawBody}`).digest('hex'); const a = Buffer.from(want), b = Buffer.from(p.v1 || ''); return a.length === b.length && crypto.timingSafeEqual(a, b); }
function verify_asterfi(string $raw, string $header, string $secret): bool { parse_str(str_replace(',', '&', $header), $p); $t = (int)($p['t'] ?? 0); if (!$t || abs(time() - $t) > 300) return false; return hash_equals( hash_hmac('sha256', "$t.$raw", $secret), $p['v1'] ?? '' ); }
# Every call with one customer, newest first curl -H "Authorization: Bearer $ASTERFI_KEY" \ "https://pbx.yourcompany.com/api/v1/calls?number=8605550142" # Who's on the phone right now curl -H "Authorization: Bearer $ASTERFI_KEY" \ "https://pbx.yourcompany.com/api/v1/calls/active"
AsterFi runs on your own Linux server, so your call records, recordings and voicemail stay there.
Calls, prompts and voicemail are all handled on your server. The only outside connection is your SIP carrier.
Greetings are generated by a speech model that runs on the server's CPU. No GPU and no API key needed.
Each night, the database, Asterisk config, prompts and voicemail are saved to one archive.
HTTPS works from the first install with a self-signed certificate. Replace it with your own whenever you like.
The repository includes setup and deploy scripts that build the whole stack.
Start with a Debian or Ubuntu machine on your network that has Asterisk, PostgreSQL, Node.js and nginx installed.
deploy/setup.sh creates the database, secrets, Asterisk config, TLS certificate, speech engine and services. It's safe to run again.
Build the web app and run deploy/deploy.sh. Then open the server in your browser and create your admin account.
git clone https://github.com/dking484/asterfi.git
AsterFi is a management service and web app that runs alongside Asterisk. It keeps your users, phones, numbers and call flows in a database, generates the Asterisk configuration from them, and shows live call activity in the browser.
No. Any standard SIP phone works, and so does the built-in web phone. If you have UniFi Talk desk phones, AsterFi can adopt and set them up for you.
Any SIP trunk provider. Add the trunk under Trunks & Routes, using a registration or IP-based trust, then point your numbers at call flows.
The source code is on GitHub and runs on your own hardware, so there are no per-seat fees. Your SIP carrier still charges for phone numbers and minutes.
Yes. Use webhooks for real-time events like screen pops and call logging, and the read-only REST API to look up call history and voicemail. The integration guide walks through both.
Open an issue on GitHub.
Clone the repository, read the code and set it up on your own server today.