Skip to content
OPEN SOURCE · SELF-HOSTED

Self-hosted programmable call center

docker compose up and you have a full call center with IVR builder, SIP trunks, live dashboard, and recordings — no Twilio account needed.

docker compose up -d
Asterisk 20 · ARIPostgreSQL 15Redis Pub/SubMIT License

Built different from FreePBX

FreePBX is a PBX admin tool. callytics is a programmable telephony platform for developers.

FreePBXcallytics
Install method: ISO on bare metalInstall method: docker compose up -d
Call logic: Static dialplan filesCall logic: ARI + Stasis, database-driven
Live changes: Reload requiredLive changes: Instant — no restart
Developer API: NoneDeveloper API: REST API + WebSocket events
Outbound dialer: Paid moduleOutbound dialer: Included free
Remote workers: Port forwardingRemote workers: WireGuard VPN, QR code provisioning
SIP firewall: NoneSIP firewall: Built-in, GeoIP blocking

No Twilio

callytics runs a full SIP stack on your own server. No API keys, no per-minute charges, no vendor dependency. Your calls never leave your infrastructure.

Visual IVR Builder

Build call flows on a React Flow canvas. Each node — play audio, collect digits, route to queue, transfer, run a webhook — is wired visually. Flows are stored in PostgreSQL and apply to live calls the moment you publish.

One Command Install

A single docker compose up -d starts Asterisk, the Stasis execution engine, NestJS API, PostgreSQL, Redis, and the React frontend. No ISO installs, no bare metal provisioning.

Everything a call center needs

IVR Flow Builder

Drag and drop nodes onto a canvas to design your call flow. Connect a menu node to business hours logic, fallback to voicemail, or escalate to a live queue. Publish and the change takes effect on the next incoming call.

Queues & Operators

Route inbound calls into named queues. Operators log in and out of queues from the dashboard. The queue engine tracks wait time, abandonment, and live agent state in Redis — no database polling on the hot path.

Outbound Campaigns

Upload a CSV of numbers and launch a campaign. The sliding window dialer controls concurrency — you set how many simultaneous calls to run. Failed calls are retried automatically based on your retry policy.

WireGuard VPN

Remote agents connect their SIP softphone through a WireGuard tunnel. You generate a peer config and QR code from the dashboard. Once connected the softphone registers as if it were on the local network — no port forwarding, no NAT problems.

SIP Firewall

callytics watches SIP REGISTER attempts and blocks IPs that exceed your threshold. Country-based blocking is built in using MaxMind GeoIP. Blocked IPs appear in the dashboard with options to whitelist or permanently ban.

Backup & Restore

Create a snapshot of your PostgreSQL database and recordings volume from the dashboard. Download the archive, store it offsite, and restore it with one click. Useful before upgrades or migrations.

How a call flows through callytics

Every inbound call passes through two planes. The control plane handles configuration, API requests, and database writes. The voice plane handles the real-time call — Asterisk bridges the SIP session, Stasis executes your published flow node by node, and Redis carries live telemetry back to NestJS.

CONTROL PLANEVOICE PLANEBrowserNestJS APIPostgreSQLSIP CallAsteriskStasisRedisNestJSflow eventslive state

callytics — open source call center platform

GitHub · MIT License

Built with Asterisk 20, NestJS, React, PostgreSQL, Redis

Released under the MIT License.