# VoIP e Asterisk/Il dialplan

VoIP e Asterisk
Copertina Tutti i moduli · Sviluppo
* VoIP
** La telefonia tradizionaleVoIP e Asterisk/Telefonia tradizionale
** Transizione verso il VoIPVoIP e Asterisk/Transizione verso il VoIP
** I TelefoniVoIP e Asterisk/I Telefoni
** PBXVoIP e Asterisk/PBX
** Protocolli VoIPVoIP e Asterisk/Protocolli VoIP
** SIPVoIP e Asterisk/SIP
** Interfacciamento tra VoIP e sistemi tradizionaliVoIP e Asterisk/Interfacciamento tra VoIP e sistemi tradizionali
* Asterisk
** Preparazione del sistemaVoIP e Asterisk/Preparazione del sistema
** Setup inizialeVoIP e Asterisk/Setup iniziale
** Canali di comunicazioneVoIP e Asterisk/Canali di comunicazione
** Configurazione utentiVoIP e Asterisk/Configurazione utenti
** AgentiVoIP e Asterisk/Agenti
** Il dialplanVoIP e Asterisk/Il dialplan
** Code di chiamataVoIP e Asterisk/Code di chiamata
** VoicemailVoIP e Asterisk/Voicemail
** TeleconferenzaVoIP e Asterisk/Teleconferenza
** Interconnessione tra server VoIPVoIP e Asterisk/Interconnessione tra server VoIP
** Musica d'attesaVoIP e Asterisk/Musica d'attesa
** IbreveVoIP e Asterisk/Integrazione con sistemi esistenti
** Interactive Voice ResponseVoIP e Asterisk/Interactive Voice Response
** AbreveVoIP e Asterisk/Architettura Real-Time
** Estensioni disponibiliVoIP e Asterisk/Estensioni disponibili
Modifica il sommario
Il Dialplan è il cuore del sistema Asterisk, definisce come vengono gestite le chiamate in ingresso e in uscita dal sistema. Questa gestione è molto potente, nel dialplan è possibile associare a ogni chiamata una serie di istruzioni da eseguire, in modo simile a un linguaggio di scripting.
Questo dialplan è contenuto nel file extensions.conf ed è suddiviso principalmente in quattro parti: contesti, estensioni, priorità e applicazioni. È possibile fare anche dei richiami tra i contesti tramite dei comandi particolari.

## Contesti

I contesti, definiti nel file extensions.conf come [nomecontesto], sono un modo di suddividere i vari insiemi di istruzioni-comportamenti in Asterisk. Asterisk sceglie il contesto in base alla configurazione dei vari utenti o linee tradizionali, ogni chiamata da una particolare utenza verrà gestita dalle istruzioni del relativo contesto.

## Estensioni

Le estensioni non sono nient'altro che le azioni da eseguire in risposta alla chiamata ad un determinato numero composto.
Per la loro definizione si utilizza la keyword “exten”:
A ogni destinazione possibile (o estensione) vengono associate una o più azioni, definite dalle application e dai parametri passati. La priorità serve per stabilire un ordine di esecuzione delle application, anche perché più application possono essere associate a una destinazione.
La destinazione può essere un pattern fisso o un pattern su cui fanno il match una serie di numeri, nel secondo caso è necessario far precedere il numero da un underscore (_). Gli operatori più utili sono “X” che indica un numero da 0 a 9, e “.” che indica 0 o più numeri da 0 a 9.
Esempio:
La destinazione farà il match con l'estensione con il pattern meno generale possibile.
Qua di seguito vi è un file di configurazione di test:
La parte principale di ogni estensione è l'applicazione cioè ciò che deve venire eseguito quando un numero viene digitato. Le applicazioni vengono elencate dando alla CLI il comando “show applications”, mentre una descrizione di ogni applicazione viene ritornata col comando “show application <nome applicazione>”, le più importanti sono elencate nel prossimo paragrafo.
Ecco il risultato del comando “show applications”:
Il comando “show application applicazione” invece funziona così:

## Applicazioni comuni

Chiama la/e risorsa/e specificata/e, in caso di mancata risposta dopo <timeout> secondi prosegue l'esecuzione alla priorità successiva. Nel caso di occupato invece prosegue alla priorità corrente+101. La tupla Technology/Resource serve per identificare univocamente una destinazione verso cui dirottare la chiamata. Technology indica il protocollo da utilizzare, può essere ad esempio, SIP, IAX, Zap, e Resource invece indica l'username nel caso del SIP e IAX mentre per le linee Zap (linee telefoniche tradizionali) indica il numero della linea.
Salta alla priorità specificata (specificando extension e context se differenti dal corrente)
Salta alla priorità n o m al verificarsi o meno della condizione NB: si può omettere una delle due label ma non entrambe
Riproduce il file specificato. Le opzioni possibili sono: skip: riproduce il file solo se la chiamata ha ricevuto risposta noanswer: riproduce il file prima della risposta
Registra nel file specificato nel dato formato. Silence rappresenta il tempo di silenzio dopo il quale la registrazione termina, maxduration è la massima durata della registrazione, le opzioni sono: skip: se non c'è stata risposta non parte la registrazione noanswer: la registrazione parte anche se non c'è stata risposta
Imposta la/e variabile/i name* al/i valore/i value. L'unica opzione possibile è: g: imposta la variabile globalmente anziché per la comunicazione corrente

## Altri comandi a livello di contesto
### include

Include nel contesto corrente tutte le direttive di un altro contesto.
è possibile specificare anche una inclusione condizionale, in base all'orario corrente. Così è possibile, ad esempio, includere in base all'ora un contesto per l'attività di giorno e un altro per la notte.
Esempio: Include il context lavoro tra Lunedi e Venerdi, dalle 8 am alle 5 pm.
Se non è specificata un range di tempo il context viene sempre incluso.

### switch

Costrutto utilizzato per specificare una locazione diversa delle regole del contesto, possono trovarsi ad esempio in un database, il cui accesso avviene tramite l'architettura RealTime, oppure su un altro server Asterisk connesso via IAX.

### ignorepat

Asterisk manterrà il tono di libero anche dopo che il dispositivo ha premuto il pattern specificato.
Esempio:

## Variabili e condizioni espresse nelle extension

Oltre a un numero elevato di application, Asterisk mette a disposizione, come un linguaggio di programmazione, costrutti per dichiarare e utilizzare variabili.
La dichiarazione avviene tramite la application Set già menzionata prima, per il loro utilizzo si usa la sintassi ${VARIABILE}.
Molte variabili sono predefinite da Asterisk e contengono valori utili, sulla base di quali è possibile personalizzare i comportamenti di Asterisk.
Eccone alcune, le più importanti:
Per la loro valutazione sono disponibili molti operatori condizionali, utilizzabili nell'application GotoIf.

## Estensione speciale s

Come estensione speciale è da considerare l'estensione che ha come destinazione la stringa “s”: viene utilizzata in ingresso dalle linee esterne, ad esempio, dalle linee telefoniche tradizionali.
Ecco un esempio un po' articolato, con l'utilizzo di questa estensione: