# Asterisk PBX

Asterisk è un'implementazione software di un sistema PBX. È un software libero che permette di gestire una rete telefonica privata e di connetterla a servizi di telefonia PSTN o VoIP.
La prima stesura venne realizzata da Mark Spencer, un ingegnere informatico statunitense che, attorno all'anno 2000, aveva creato una società che sviluppava schede d'interfaccia FXS ed FXO. Per facilitarne la diffusione Spencer creò Asterisk e, permettendone la libera distribuzione, provocò l'interesse di una rete di sviluppatori e professionisti di tutto il mondo.
Oggi il prodotto ha un importante ruolo nel settore della telefonia in applicazioni come ad esempio la mediazione RTG/IP (centralini telefonici in grado cioè di utilizzare sia le linee telefoniche tradizionali sia i canali IP) e sistemi Centrex (PBX "virtuali" e centralizzati), applicazioni per la gestione di Call Center ed altro ancora.

## Caratteristiche

Il software Asterisk include molte funzionalità disponibili nei sistemi PBX commerciali e proprietari: segreteria telefonica, conferenze telefoniche, risposta vocale interattiva (menu telefonici) e distribuzione automatica delle chiamate. Gli utenti possono creare nuove funzionalità scrivendo script di piani di composizione in diversi linguaggi di estensione di Asterisk, aggiungendo moduli caricabili personalizzati scritti in PHP o C o implementando programmi Asterisk Gateway Interface (AGI) utilizzando qualsiasi linguaggio di programmazione in grado di comunicare tramite il sistema di flussi standard (stdin e stdout) o tramite socket TCP di rete.
Asterisk supporta diversi protocolli VoIP standard, tra cui il Session Initiation Protocol (SIP), il Media Gateway Control Protocol (MGCP) e H.323. Asterisk supporta la maggior parte dei telefoni SIP, fungendo sia da registrar che da user agent back-to-back. Può fungere da gateway tra telefoni IP e PSTN tramite interfacce T o E-carrier o schede FXO analogiche. Il protocollo Inter-Asterisk eXchange (IAX), RFC 5456, nativo di Asterisk, fornisce un'efficace trunking delle chiamate tra sistemi PBX Asterisk oltre a distribuire alcune logiche di configurazione. Molti fornitori di servizi VoIP lo supportano per il completamento delle chiamate nella PSTN, spesso perché hanno implementato Asterisk o lo offrono come applicazione ospitata. Alcuni telefoni supportano anche il protocollo IAX.
Supportando una varietà di servizi telefonici tradizionali e VoIP, Asterisk consente ai deployer di creare sistemi telefonici o di migrare sistemi esistenti verso nuove tecnologie. Alcuni siti stanno utilizzando Asterisk per sostituire PBX proprietari, altri forniscono funzionalità aggiuntive, come segreteria telefonica o menu di risposta vocale, o call shop virtuali, o per ridurre i costi effettuando sia chiamate locali che interurbane su Internet.
Oltre ai protocolli VoIP, Asterisk supporta protocolli di commutazione di circuito tradizionali come ISDN e SS7. Ciò richiede l'installazione di schede di interfaccia hardware, commercializzate da fornitori terzi. Ogni protocollo richiede l'installazione di moduli software. Nella versione 14 di Asterisk è supportato il codec audio Opus.

## Configurazione generale
### I moduli: modules.conf

Asterisk, al suo avvio, carica un gruppo di moduli che permettono di utilizzare differenti applicazioni. Si può scegliere quali moduli devono essere caricati con il file modules.conf.

### I canali

Un'interfaccia ISDN ha due canali, una PRI può averne 30. Asterisk identifica i tipi d'interfaccia sui quali si può telefonare con il termine canal, canale. Un canale può essere, per esempio, l'interfaccia ISDN (che si chiama canale CAPI) o l'interfaccia Ethernet per il VoIP. Ogni protocollo VoIP ha un canale diverso, quindi se si vuole telefonare con SIP o H.323, bisogna configurare un canale SIP o un canale H.323. La configurazione dei canali è fatta con dei file di configurazione *.conf, che si trovano nella directory /etc/asterisk.

## Il Dialplan

Il dialplan (ovvero "piano di chiamata") è la parte più interessante della configurazione di Asterisk, ed anche quella che richiede più tempo. Nel dialplan si definisce cosa deve fare il PBX quando riceve una chiamata, oppure quando un utente compone un numero.

### Formato del dialplan

Il file /etc/asterisk/extensions.conf contiene il dialplan di Asterisk, cioè un flusso di esecuzione per tutte le sue operazioni. Il dialplan controlla come le chiamate entranti e uscenti sono trattate e instradate: è qui che si configura il comportamento di tutte le connessioni che attraversano il PBX.
Il contenuto del file extensions.conf è organizzato in sezioni, che possono essere usate per delle configurazioni statiche e per delle definizioni, o per delle componenti eseguibili del dialplan, che si chiamano contesti o contexts. Le sezioni general e globals e i nomi dei contesti sono interamente definiti dall'amministratore di sistema. Un tipo speciale di contesti sono le macro, che sono delle procedure o insiemi di istruzioni riutilizzabili in fase di esecuzione, costruite in maniera simile ad linguaggio di programmazione.

#### Sezione general

In questa sezione si può definire qualche opzione generale che concerne l'uso della funzione save dialplan, che serve a salvare il dialplan se quest'ultimo è modificato in fase d'esecuzione da comandi di Asterisk.

#### Sezione globals

Nella sezione globals si definiscono le variabili globali per il dialplan. In pratica, le variabili globali di Asterisk non sono impiegate come variabili, ma come costanti. Abitualmente sono impiegate per avere un solo posto nel dialplan dove si possono indicare i valori che si potrebbero voler cambiare per cambiare delle configurazioni del PBX.

#### Contexts ed extensions

La parte principale e più interessante del dialplan è costituita dai contexts. I contexts sono degli insiemi di extensions (estensioni). Ogni estensione può essere costituita da più linee di istruzione, che Asterisk eseguirà se una certa condizione è soddisfatta.

#### Come si usa un context

Ogni chiamata che giunge ad Asterisk è attribuita ad un context. L'appartenenza di una chiamata ad un contesto può dipendere dal canale dal quale arriva, dall'ora, dal numero chiamante ed altre differenti possibilità.

#### IAX

Il file iax.conf permette la configurazione del protocollo di comunicazione IAX. Si tratta di un protocollo specifico per Asterisk che permette l'implementazione di trunk (collegamento) tra diverse centraline con localizzazioni geografiche differenti. IAX permette di raggruppare un flusso di chiamate telefoniche ottimizzando la segnalazione e quindi riducendo significativamente l'overhead di banda. È un'alternativa al protocollo RTP. Nel file iax.conf è possibile creare delle entry provviste di autenticazione per dei PABX Asterisk esterni.
IAX è configurabile in modalità trunk o modalità no-trunk. Nel primo caso ottimizza la segnalazione riducendo significativamente l'overhead, inserendo in un unico pacchetto IP la segnalazione e il flusso media di più canali fonia. Nel secondo caso riduce la banda rispetto RTP, avendo 4byte di overhead invece di 12byte, ma in modo meno significativo in quanto ogni differente chiamata utilizza un differente pacchetto IP/UDP. Anche se non pensato per questa finalità è possibile utilizzare anche degli UAC SIP IAX, come telefoni hardware/software.