Costruire un DialPlan con Asterisk - Prima Parte

Versione adatta alla stampaSend to friendPDF version

Forse la parte più “complicata” nella configurazione di Asterisk è il DialPlan. Il DialPlan è la parte centrale del funzionamento di Asterisk. È dove andiamo a configurare tutti i possibili comportamenti del nostro centralino al verificarsi di un evento (chiamata, segreteria telefonica, fax, ecc.). Come molti di voi sanno, il file usato per questa configurazione lo troviamo nella cartella /etc/asterisk e si chiama extensions.conf. Anche questo file di configurazione è composto da tre parti; una parte generale, dove possiamo settare alcuni parametri globali, una parte Globals dove settiamo le variabili globali e la parte dedicata al dialplan vero e proprio.

La prima cosa da imparare sono i contesti (context). I contesti servono per definire chi ha accesso a che cosa e nello stesso tempo per dividere il dialplan in più parti. Faccio un esempio per spiegarmi meglio. Come abbiamo visto al momento della configurazione del sip.conf, per ogni interno/troncale/VoIP Provider abbiamo definito un contesto. Questo contesto lo useremo nel diaplan per definire alcune specifiche azioni. Se voglio che gli interni dal 1000 al 1100 abbiamo solamente la possibilità di chiamarsi tra di loro e non tenere accesso alle chiamate esterne posso configurarli indicando in ognuno il contesto chiuso. Nel contesto interni del dialplan definirò una serie di linee per definire questo tipo di configurazione:

[chiuso]

e sotto questa etichetta scriverò la parte del dialplan dedicata al gruppo chiuso.

Se voglio che gli interni abbiano accesso anche alle chiamate locali potrò definire un altro contesto:

[locali]

scrivere la parte del diaplan relativa a questo contesto e poi indicare che gli interni con contesto "chiuso” hanno accesso a questo contesto nella forma

[chiuso]

include => locali

In questo modo dico a asterisk che tutti gli interni appartenenti al contesto chiuso hanno accesso anche a la parte del dialplan definita dall’etichetta locali.

Seguendo la stessa logica potrò definire tutti i contesti che voglio e inserire gli interni configurati come meglio credo.

Un discorso a parte per le chiamate entranti che gestiremo con altri etichette/contesti. Forse è meglio che ne parliamo in un prossimo articolo.

Una volta definiti i contesti possiamo iniziare a scrivere il nostro dialplan. Prendiamo l’esempio del gruppo chiuso:

[chiuso]

exten => _1[01]XX,1,Dial(SIP/${EXTEN},30,r)

Abbiamo scritto la prima linea del nostro dialplan… complicata? Conosciamo meglio la sintassi:

exten => è la parte fissa e va sempre indicata

_1[01]XX indica che possiamo chiamare solamente i numeri (in questo caso i nostri interni) che sono formati da 4 cifre: la prima deve essere 1, la seconda [01] o 0 o 1 e le ultime due possono essere numeri da 1 a 9. Le due X sono chiamate in asterisk Pattern Matching e si utilizzano al posto dei numeri per indicare che al posto della X ci può essere un numero da 0 a 9.

Questa è la lista dei Pattern Matching che si possono usare in Asterisk

X – un numero da 0 a 9

Z – un numero da 1 a 9

N – un numero da 2 a 9

Il segno _ che abbiamo messo prima dell’uno si mette quando il numero dell’estensione non è preciso… Non so se mi sono spiegato… vediamo

Se scrivo la stessa linea in questa forma:

exten => 1000,1,Dial(SIP/1000,30,r)

non avrò bisogno di mettere prima dell’uno il segno _ perchè il numero dell’interno è indicato completamente.

Andiamo avanti

Asterisk processa il dialplan seguendo l’ordine numerico delle linee. Per questo dopo _1[01]XX, compare il numero 1. Significa che è la prima linea da processare dentro del contesto [chiuso]. Se dopo questa linea ne scriviamo un’altra dovremo mettere:

exten => _1[01]XX,2,ecc

cioè indicare il numero 2

Dial è un’applicazione di asterisk che si usa per fare una chiamata. I comandi che abbiamo a disposizione si dividono in applicazioni e funzioni e ognuno ha una sua sintassi e opzioni disponibili. Per avere una lista completa delle applicazioni disponibili entriamo nella nostra console asterisk

asterisk –rvvvvvvvvvvvvvvv

e digitiamo il comando:

CLI> core show applications

per le applicazioni e

CLI> core show functions

per le funzioni

per avere la sinossi di una particolare funzione/applicazione scriviamo (nel caso di Hangup):

CLI> core show application hangup

  -= Info about application 'Hangup' =-

[Synopsis]
Hang up the calling channel

[Description]
  Hangup([causecode]): This application will hang up the calling channel.
If a causecode is given the channel's hangup cause will be set to the given
value.

Come potete vedere abbiamo una sinossi e una descrizione dell’applicazione (non ho usato Dial perché sono due pagine di spiegazioni).

Nel caso dell’esempio dopo dopo Dial tra parentesi troviamo SIP/${EXTEN},30

SIP significa che la chiamata verrà fatta usando il protocollo SIP

${EXTEN} è una variabile di canale la quale contiene il numero che abbiamo digitato sulla tastiera del nostro telefono (se abbiamo digitato 1012) la variabile ${EXTEN} conterrá il numero 1012 e questo sarà l’interno che verrà chiamato.

30 sono secondi che squillerà il numero chiamato. Se prima dei 30 secondi l’interno non risponde potremo inviare il chiamante da un’altra parte (per esempio la segreteria telefonica).

Per adesso ci fermiamo qui. Questo è solamente un piccolo esempio e in nel prossimo articolo vedremo cosa sono le variabili globali e le variabili di canale e vedremo un piccolo esempio per testare l’audio di un telefono IP Softphone (per evitare problemi di firewall e di altro tipo).

Se mi sono dimenticato qualcosa e non me lo fate notare siete dei malvagi :)

Ciao

 

Etiquetas de Technorati: ,,
Condividi contenuti