Features
Everything you need to build programmable voice applications.
Programmable Call Routing
Define call flows through CallScripts — JSON arrays of verbs returned by your HTTP endpoints. Change routing logic without touching the PBX.
Call Forking
Ring multiple destinations in parallel. The first to answer wins and all other attempts are automatically cancelled.
Media Playback
Play audio announcements to callers as early media or during connected calls. Supports wav files from the local filesystem.
Codec Transcoding
RTPEngine handles codec negotiation and transcoding between endpoints. Supports G722, PCMA, PCMU, GSM, and AMR out of the box.
SIP Trunking
Connect to external SIP providers with inbound IP-based identification, outbound authentication, and automatic registration refresh.
Client Registration
SIP endpoints register to the system with digest authentication. A RegHook lets your application control authentication and assign dialplans per-client.
Multi-Domain
Run multiple SIP domains on a single instance. Each domain has its own clients, trunks, and dialplans — fully isolated.
Call Transfers
Handles SIP REFER for call transfers. When a connected party initiates a transfer, Dragon PBX sets up the new call leg automatically.
Call Recording
Fork call audio to any SIPREC-compatible recording server (RFC 7865/7866). Recording is best-effort — if the recorder is unavailable the call continues unaffected.
Call Pickup
Answer a colleague's ringing phone — or grab a call they're already on — from your own extension. Point pickup at a single extension or a whole group and it takes the first matching call.
Status Webhooks
Receive real-time status updates for every call event — ringing, answered, hangup, transfer, and more — via HTTP POST to your StatusHook.
Retry Logic
If a call isn't answered or rejected after a CallScript completes, the system automatically retries up to 3 times with an incremented counter, letting your CallHook return different logic each time.
Call Script Verbs
Call routing is expressed through a set of simple verbs:
connect— Connect the call to one or more destinations (clients, trunks, or SIP URIs). Supports parallel ringing with configurable timeouts.announce— Play an audio file to the caller. Works as early media before answer or during a connected call.response— Send a SIP response code (3xx–6xx) to reject or redirect the call. Terminates processing.pause— Delay processing for a number of seconds.record— Fork call audio to a SIPREC recording server. Arm it before aconnectand recording begins when the call answers.pickup— Answer a call ringing at (or connected to) another extension and bridge it to the caller. Accepts a list of extensions for pickup groups.
These verbs compose into a sequence. For example: play a greeting, ring the user for 30 seconds, then if no answer, play a voicemail prompt.
Configuration Backends
Dragon PBX supports three pluggable backends for storing domain, client, and trunk configuration:
- JSON file — Simple and self-contained. Good for development and small deployments.
- HTTP API — Fetch configuration from your own API with token authentication and configurable cache TTL.
- PostgreSQL — For production deployments that need a persistent, queryable configuration store.
All three expose the same interface, so switching between them is a single environment variable change.