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.

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 four simple verbs:

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:

All three expose the same interface, so switching between them is a single environment variable change.