Documentation
Technical reference for configuring and integrating with Dragon PBX.
Getting started
Dragon PBX requires three external services: a Drachtio SIP server, RTPEngine for media, and Redis for state. Configuration is done through environment variables and a config file or API.
# Core dependencies
DRACHTIO_HOST=localhost
DRACHTIO_PORT=9022
RTPENGINE_HOST=localhost
RTPENGINE_PORT=2223
# Choose a configuration backend
DATA_SOURCE=json # or: api, pg
Configuration
Domains
The top-level grouping. Each domain is identified by its FQDN and contains its own clients and trunks.
Clients
SIP endpoints that register to the system. Defined by a username pattern — 1??? matches any 4-digit extension starting with 1, * matches everything.
Each client has a RegHook URL for authentication or can use a static password and dialplan for simpler setups.
Trunks
SIP connections to external providers. Inbound traffic is matched by source IP (CIDR notation). Outbound calls are sent to a configured host with optional authentication.
Trunks with outbound credentials will automatically maintain SIP registrations with the provider.
Dialplans
A mapping of dialled number patterns to CallHook URLs. Patterns support ? for a single digit and * for multiple digits.
{
"1???": "https://example.com/internal",
"0*": "https://example.com/external",
"9": "https://example.com/operator"
}
Webhook reference
RegHook
Request: POST with SIP digest auth fields, source IP/port, and requested expiry.
Response: Return {"status": "ok"} with a dialplan and optional codecs to accept the registration, or a non-200 status to reject.
CallHook
Request: POST with domain, from, to, callId, sourceAddress, source (client or trunk), refer flag, and count.
Response: A JSON array of CallScript verbs.
StatusHook
Receives: POST notifications with callId, event, and optional label. Events include connect:trying, connect:answered, connect:hangup, playback:start, playback:complete, and others.
Verb reference
announce
Play audio to the caller.
| Param | Type | Description |
|---|---|---|
url |
string | file:// path to a wav file |
connect
Connect the call to one or more destinations.
| Param | Type | Description |
|---|---|---|
dest |
array | Destinations to ring in parallel |
dest[].type |
string | client, trunk, or sip |
dest[].address |
string | Extension number, SIP URI, or trunk number |
dest[].timeout |
int | Ring timeout in seconds |
dest[].trunk_id |
int | Trunk ID (for type=trunk) |
dest[].trunk_name |
string | Trunk name (for type=trunk) |
reconnect |
bool | Re-offer to new destinations if already connected |
statusLabel |
string/bool | Label for status events, or false to suppress |
response
Send a SIP response code to end the call.
| Param | Type | Description |
|---|---|---|
code |
int | SIP response code (3xx–6xx) |
headers |
object | Additional SIP headers |
pause
Delay processing.
| Param | Type | Description |
|---|---|---|
duration |
int | Seconds to wait |
Environment variables
Full list of configuration options:
| Variable | Default | Description |
|---|---|---|
DRACHTIO_HOST |
localhost |
Drachtio SIP server host |
DRACHTIO_PORT |
9022 |
Drachtio connection port |
DRACHTIO_SECRET |
cymru |
Drachtio shared secret |
RTPENGINE_HOST |
same as Drachtio | RTPEngine host |
RTPENGINE_PORT |
2223 |
RTPEngine control port |
DATA_SOURCE |
api |
Config backend: json, api, or pg |
CONFIG_URL |
— | URL for API backend |
CONFIG_TOKEN |
— | Bearer token for API backend |
CONFIG_TTL |
60 |
API config cache TTL (seconds) |
DEFAULT_CODECS |
G722, PCMA, PCMU |
Default codec list |
DEFAULT_RINGTONE |
file:/uk.wav |
Default ringback tone |
LOGLEVEL |
debug |
Log level |
WEBPORT |
2999 |
HTTP API port |
REGISTRATION_MIN_SECS |
30 |
Minimum registration expiry |
REGISTRATION_MAX_SECS |
3600 |
Maximum registration expiry |
Source code
Dragon PBX is available on GitHub.