What it does
A real phone system, not a demo.
The things an office phone system has to do, done from one program. Routing is data, not code: a prefix, a trunk, a priority. There is no dial-plan language to learn.
Calls
- Extension to extension, with caller display
- Hold with music, blind and attended transfer
- Call parking and call pickup
- Busy-lamp keys on desk phones
- HD voice (G.722) where both ends have it
- Emergency numbers that no limit may refuse
Outside lines
- SIP trunks, by registration or by IP
- Routing rules by prefix, with failover
- Inbound numbers to any extension
- Toll-fraud limits: call caps, duration, prefixes
- Behind NAT, each peer is told the address it can reach
The office
- Ring and hunt groups
- Call queues with agents, and a wallboard
- Voicemail with message-waiting lamps and email
- Menus, defined as data
- Business hours, with public holidays
- Call recording, by user, trunk or queue
Phones and clients
- UDP, TCP, TLS, WebSocket
- Browser softphones over WebRTC
- Yealink desk phones that configure themselves
- A shared phonebook the phones fetch
- Prompts spoken from text, voicemail written down, by a speech server of your own
No restarts
Change it while it runs.
Add a provider, a route or an extension and it is live before you have finished reading the answer. Nothing reloads. Calls in progress are never disturbed, including when you replace a TLS certificate. Configuration is an immutable snapshot swapped atomically; every new call reads the current one.
# a provider, and a route that sends numbers starting with 0 to it $ curl -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \ -d '{"name":"provider","type":"register","host":"sip.provider.example", "username":"acct","password":"secret"}' \ http://127.0.0.1:8080/v1/trunks $ curl -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \ -d '{"name":"national","prefix":"0","strip":1,"prepend":"+44","trunk_ids":[1]}' \ http://127.0.0.1:8080/v1/routes # the next call out uses it; no restart, nothing reloaded
What it is not
It exists because the others do too much.
Configuration languages, dozens of modules, external databases, reload cycles: that is what the big servers cost, and what most offices never use. So these are out, on purpose:
- Carrier-scale clustering
- A scripting language, or any dial plan
- A call-centre suite
- Video
- Conferencing
- Fax
- Presence and instant messaging
- Multi-tenancy