Dashboard
System overview
Live state of the switch — active calls and trunk channels in use refresh every 10 seconds; the rest reload with the page.
Live calls
0 active| From | To | Duration | |
|---|---|---|---|
| Loading… | |||
Call volume
last 12 hoursTrunk health
Host resources
Security events
Extensions
Loading…
Bulk import extensions
CSV with an extNumber,displayName header row (column order doesn't matter) — department and email are optional extra columns. Each row is created the same way as a single "New extension" would be; a bad row is reported back, not left unclear which one, and doesn't stop the rest of the file from importing.
| Context | Codecs | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
Trunks
SIP carriers and their registration state. Select one to inspect its configuration.
—
—Inbound routes
Loading…
| DID | Description | Trunk | Destination | |
|---|---|---|---|---|
| Loading… | ||||
Call menus
Set up what callers hear and where their key presses send them.
New call menu
Outbound routes
Decide which outside line carries a call, and who's allowed to dial what. Routes are tried in order — the first match wins.
| Priority | Route | When someone dials… | Line(s) | |
|---|---|---|---|---|
| Loading… | ||||
Call logs
Loading…
| Time | From | To | Duration | Outcome | Recording |
|---|---|---|---|---|---|
| Loading… | |||||
Phones
Loading…
New phone
| MAC address | Vendor | Model | Extension | Sidecar | Config | ||
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
API keys
Programmatic access for scripts and integrations that can't sign in interactively.
New API key
| Name | Key | Access | Created by | Last used | Status | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Fraud detection
Watches live call activity for toll-fraud call-rate spikes, domestic traffic pumping, and destinations you've flagged.
Thresholds
Flagged destination prefixes
Recent alerts
| Time | Type | Trunk | Extension | Destination | Count | Auto-suspended |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Network / NAT
Whether this box sits on a public IP directly, or behind NAT — gets the SIP/RTP addressing right either way.
Keepalive & timeouts
Queues
Group calls that ring several agents at once, and hold callers fairly in line when everyone's busy.
—
New queue
Ring groups
Ring several phones for one call — no waiting line, no agents logging in or out, just "everyone's phone rings."
—
New ring group
Recordings
Loading…
Recording policy
| Time | Extension | Size | |
|---|---|---|---|
| Loading… | |||
Voicemail
Every mailbox that has voicemail turned on, in one place. Reset a PIN, change where messages get emailed, or just find one below.
—
—| From | Received | Duration | |
|---|---|---|---|
| Loading… | |||
Utilities
Backups, packet capture, and other day-to-day admin tools that don't fit anywhere else.
Named, independently-scheduled backup jobs — each picks what to back up (database, generated config, voicemail, recordings, hold music, uploaded audio, branding — or all of it) and which destinations to sync to. Every archive lands on local disk first (a configurable path below); download, restore, or delete any copy in the history below. Restoring overwrites live data immediately, so it's a real, deliberate, type-to-confirm action, not a casual one.
Backup jobs
| Name | Schedule | Scope | Destinations | Last run | |
|---|---|---|---|---|---|
| Loading… | |||||
Add backup job
Backup history
Have a backup from another Switchboard box, or one pulled from cold storage? Upload it here — it's validated and added below, then restores/downloads/deletes like any other.
| Date | Job | Size | |
|---|---|---|---|
| Loading… | |||
Settings
SIP signaling only — never captures RTP/call audio. Filter by extension, by IP, or just a port; watch it live, download the PCAP for Wireshark, or view a SIP call-flow ladder right here.
Continuous capture
New capture
| Started | Filter | Duration | Status | Size | Packets | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Where each backup gets copied for redundancy, beyond the local disk copies on the Backups tab — S3-compatible cloud storage or another server over SFTP. Every enabled destination is independent; one failing never affects the others or the local backup itself.
Backup destinations
Every enabled destination gets a real copy of each backup, independently — for redundancy, not a fallback chain. Browse a destination to pull a copy back down (e.g. if the local copies on the Backups tab are gone) — once pulled, it restores/downloads/deletes like any local backup.
| Name | Type | Provider | Last sync | Status | |
|---|---|---|---|---|---|
| Loading… | |||||
Add backup destination
Email the call-volume/answer-rate summary and/or queue performance report on a recurring schedule — daily, weekly, or monthly — to whoever needs it, without them having to open Switchboard. Uses the SMTP relay configured under Settings → Email delivery.
Report schedules
| Name | Report | Cadence | Recipients | Last sent | |
|---|---|---|---|---|---|
| Loading… | |||||
Add schedule
How long call detail records and call recordings are kept before they're automatically deleted. Off by default — nothing is purged until a retention period is set below.
Retention
—
Migrate extensions, trunks, inbound/outbound routes, ring groups, and queues from a real FreePBX "Backup and Restore" archive (.tar.gz). Nothing is written until you review the preview and confirm — every record is created through this app's own real API, with the same validation a manual entry gets. Imported trunks are created disabled and imported outbound routes have no trunk attached, so nothing can route real calls until you review and enable them.
1. Choose a backup file
Up to 250MB. SIP passwords/trunk secrets are never shown on screen.
2. Choose what to import
Everything is checked by default. Uncheck anything you don't want created — e.g. a trunk you don't recognize, or a route that conflicts with something already configured.
3. Results
High availability
Active/standby clustering across two Switchboard nodes sharing a floating IP — automatic failover if the active node goes down. A call in progress at the moment of failover drops (mid-call state isn't preserved); everything else — config, registrations, the database — recovers on the standby.
Enable HA on this node
Turns this node into the FIRST node of a pair — it claims the floating IP alone (no peer yet). Do this on one node, then either generate a join token below for a second node, or — if you're setting up the second node — paste a token generated on the first one.
Pair a second node
Generate a one-time token here, then paste it into the second node's own HA page (under "Join an existing pair"). Expires in 15 minutes, one use only.
Join an existing pair
Paste a join token generated on the FIRST node's HA page. This will overwrite this node's local database and secrets to match the pair — only do this on a fresh node, not one already holding real data.
Manage this pair
Failover is automatic (keepalived watches this node's own Asterisk reachability). Manual override below is for planned maintenance — e.g. taking the active node down for an OS update without waiting on a health-check timeout.
Security
Who's trying to get in, and who's been blocked. Backed by real fail2ban jails watching SIP registration and admin panel logins — bans are real UFW firewall rules, not just a database flag.
Currently blocked
—| IP address | Reason | |
|---|---|---|
| Loading… | ||
Ban settings
Call security
Firewall
Real UFW status — the actual rules currently enforcing on this box, plus trusted sources: known carrier trunks and paired systems get scoped firewall access and are excluded from fail2ban's auto-ban, so they're never caught by the same dynamic banning that protects everything else.
Rules
| Action | Protocol | Port | Source | Comment |
|---|---|---|---|---|
| Loading… | ||||
New trusted source
Trusted sources
| Source | Type | Host | Resolved IP | Port | Status | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Settings
Company details, who can sign in, and the system underneath it all.
General
New user
Users
| Name | Role | Last sign-in | |
|---|---|---|---|
| Loading… | |||
Single sign-on (SSO)
Uses YOUR OWN Google Workspace or Microsoft 365 app registration — Switchboard doesn't ship with either provider pre-configured. SSO only signs in an email that already has a Switchboard user account; it never creates one.
Notifications
Email delivery
Not configuredSystem
SSL/TLS
—About
Time conditions
Route calls differently depending on the day and time — one time window per condition, with a destination for inside it and a destination for outside it.
—
New time condition
Call flows
A manual override switch between two destinations — dial the control number from any phone to flip it (day/night, open/closed), or flip it here. Point an inbound route, IVR option, time condition, or feature code at a call flow the same way you'd point it at an extension.
—
—New call flow
Conference rooms
Shared dial-in bridges anyone can join with a PIN — no per-call scheduling needed.
—
New conference room
Call parking
Put a call on hold in a shared slot so anyone can pick it up from a different phone. Asterisk's own built-in default lot (dial 700, slots 701-720) always exists — the lots below are additional ones you manage.
—
| Space | Status | Caller | Parked for | Rings back in |
|---|---|---|---|---|
| Loading… | ||||
New parking lot
Patches
Pending updates for Asterisk, PJSIP, and the rest of this system's real stack — read directly from apt's local package cache, refreshed by the OS's normal automatic update timer.
Available updates
| Package | Installed | Available | Source | |
|---|---|---|---|---|
| Loading… | ||||
Audio library
Upload once, use anywhere — an IVR greeting, a queue's hold music, or a mailbox's voicemail greeting. Anything you upload is converted to the format Asterisk actually plays.
System default hold music
Upload audio
| Name | Type | Duration | Used by | ||
|---|---|---|---|---|---|
| Loading… | |||||
Reports
How your phone system is performing over time — call volume, queue performance, and where calls actually go.
Call volume
last 30 daysQueue performance
last 30 days| Queue | Name | Offered | Answered | Abandoned | Avg wait | SLA % |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Busiest times
Extension activity
| Ext | Name | Calls | Avg talk | Missed |
|---|---|---|---|---|
| Loading… | ||||
Ring group performance
| Group | Name | Calls | Answered | Abandoned | Avg talk | Avg ring |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Softphones
Email anyone a QR code to install and sign into the mobile or desktop app — nothing for them to type, no password to hand over.
| Ext | Name | Status | Device | ||
|---|---|---|---|---|---|
| 101 | Amara Reyes | Active | Amara's iPhone · connected 2 days ago | ||
| 102 | Jae-won Kim | Not set up | — | ||
| 103 | Priya Nandakumar | Active | Zoiper · Android · connected 5 days ago | ||
| 104 | Tomás Ferreira | Not set up | — | ||
| 105 | Nadia Osman | Awaiting scan | Emailed today 09:14 · expires in 6 days | ||
| 108 | Marcus Idowu | Not set up | — | ||
| 112 | Elena Vasquez | Active | Browser · Chrome — no app installed | ||
| 121 | Overnight desk | Not set up | — | ||
| 122 | Devon Cole | Awaiting scan | Emailed 2 days ago · expires in 5 days |
Messages
Real text messages over SIP (RFC 3428 MESSAGE) through your trunks — no separate carrier API or webhook, the same connection that carries your calls. Your trunk provider needs to actually support SMS-over-SIP for delivery to work; this sends/receives whatever the trunk is willing to carry.
Conversations
Paired systems
Real inter-PBX SIP trunking — dial a prefix + their extension to reach another Switchboard install directly. Same PJSIP building blocks as Trunks, verified end-to-end (a real call round-trip through the peer and back) before this page was built. Manual mutual setup for now: enter the same shared secret on both systems — no invite-code exchange yet.
—
Phone models
Turn on the vendors and models you actually use — enabled models show up in Phones → Add a phone. Auto-provisioning config is only generated for Yealink and Grandstream right now; Cisco and Poly can be tracked here but won't get a config file yet.
New phone model
Programmable keys
| Vendor | Model | Type | Status | |
|---|---|---|---|---|
| Loading… | ||||
New sidecar model
Sidecar / expansion modules
| Vendor | Model | Keys | Status | |
|---|---|---|---|---|
| Loading… | ||||
Provisioning
Global settings for auto-provisioning phones — TFTP and HTTPS both serve from the same generated files. Per-model key templates live in Phone models → Keys; this page is everything that applies fleet-wide instead.
Server info for DHCP / manual setup
Global provisioning settings
Feature codes
Star codes any phone can dial — no extra setup on the phone itself needed. Turn any of these off if you'd rather that code stay free for something else, and change the code itself if it collides with a carrier feature code you already use.
| Code | Feature | On |
|---|---|---|
| Loading… | ||
Custom feature codes
| Code | Name | Destination | Status | |
|---|---|---|---|---|
| Loading… | ||||