Asterisk

Asterisk is an open-source framework for building communication-based applications.
Historically, Asterisk is an alternative to most proprietary Private Branch eXchange (PBX) systems, dealing with voice communications, conference calling IVR or voicemails.

Quite modular, Asterisk is shipped with several audio codecs (g711a, g711u, g722, gsm), handles standard protocols (SIP, IAX), and could be used virtually anywhere from multi-tenants providers, to end-user setups.

There’s a lot of Asterisk-based distributions, starting with FreePBX, and derivatives such as AsteriskNow, Elastix, or alternatives such as PBXinaflash.
The purpose of these systems is to provide end-users with a clear web interface managing their setup.
This is usually a good way to manage your setup. Although, when dealing with several servers, all with their local dialplans, configuring trunks, routes, user extensions, … and guaranteeing all your users are offered with the very same service, you will spend quite a lot of time doing repetitive checks, and sporadically fixing typos and unexpected configurations.

Before leaving Smile, I worked on a puppet class that could deploy asterisk and configure everything from hiera arrays. No frontend, except for some nginx distributing phone configurations. Minimalistic setup, based on Elastix/ASTDB-based generated contexts and embedded applications.
I didn’t have the time, nor the guts to finish it. Today, I have a working PoC, involving my Freephonie SIP account, a couples softwares and hardware phones, voicemails, DND, CFW, …
And last but not least: hardware phones default configuration locks them to a private context. Users may dial their extension number and authenticate themselves using a PIN number to get their phone re-configured with their extension.

Most of the work is publicly available on my gitlab.