Dialplan con Asterisk - Terza Parte - File Extensions.conf

Versione adatta alla stampaSend to friendPDF version

Penso che sia giunto il momento di mettere mano al file di configurazione extension.conf dove si costruisce il dialplan di Asterisk. Come sempre analizzeremo i vari parametri presenti e cercheremo di capire come funziona il tutto. Cominciamo:

nano /etc/asterisk/extensions.conf

[general] parte generale del dialplan

statis=yes

writeprotect=no ; se static è settato a yes e writeprotect a no tutte le modifiche fatte dalla console di asterisk, potremo salvarle con il comando dialplan save

autofallthrough=yes ; se un’estensione esce per qualche motivo dalla serie di comandi che le appartengono, verrà terminata da asterisk, se impostato a no, asterisk aspetterá che venga chiamata un’altra estensione.

extenpatternmatchnew=yes ; usa un nuovo algoritmo (in teoria molto più veloce) per processare il dialplan. Consigliato per grandi volumi di chiamate e per contesti che contengono più di 50 estensioni ognuno.

priorityjumping=yes ; Alcune applicazioni e funzioni di asterisk in particolare condizioni o nel caso si presentino determinati eventi possono saltare dalla priorità in cui si trovano (vedremo fra poco che cosa significa priorità) alla priorità n+101. Può essere molto utile impostare questo parametro a yes per poter usare questa funzionalità

clearglobalvars=no ; se impostato a no le variabili globali che configuriamo verranno cancellate e riassegnate ogni volta che ricaricheremo il dialplan. Meglio lasciarlo a no

Fatto questo inizia il secondo blocco con le variabili locali:

[globals]

luigi=SIP/1000

marco=SIP/1001

come vedete abbiamo assegnato al nome di due nostri amici l’interno con cui sono registrati. Questo ci permetterà nel dialplan di scrivere direttamente i loro nomi invece di indicare la tecnologia (SIP) e il numero di interno per chiamarli. Nel caso di interni con più di quattro cifre o semplicità di memorizzazione può essere utile usare questo tipo di variabili globali.

Finita questa seconda parte possiamo iniziare con la costruzione del dialplan vero e proprio. In Asterisk il dialplan è composto da contesti, estensioni e prioritá. Cominciamo a vedere come funzionano:

[locale] ; nome del contesto

exten => 100,1, Answer()

exten => 100,2, Playback(demo-echotest)

exten => 100,3, Echo

exten => 100,4, Playback(demo-echodone)

exten => 100,5, Hangup

Abbiamo scritto le nostre prime linee di dialplan. Abbiamo definito un contesto (locale) e poi abbiamo inserito dentro questo contesto una serie di istruzioni. Come potete vedere ogni linea ha un numero di estensione e una priorità. Il numero di estensione è 100 e la priorità aumenta di uno in uno e definisce l’ordine con cui le istruzioni presenti vanno processate (prima la linea con il numero 1, poi quella con il numero 2, ecc.). Come lo uso? Da un telefono registrato a Asterisk (con accesso al contesto locale) chiamo il numero 100 e avverranno le seguenti cose:

la chiamata sarà risposta (Aswer), si ascolterà un messaggio in inglese che ci spiegherà a cosa serve il test dell’eco e poi potremo parlare ricevendo la nostra voce di ritorno. Quando abbiamo finito possiamo premere il tasto cancelletto (#). A questo punto ascolteremo una voce che ci dirà che il test dell’eco è stato completato e la chiamata verrá terminata (Hangup). Le voci (i prompts) sono presenti nella cartella /var/lib/asterisk/sounds e le ascolteremo nella lingua configurata per ogni singolo interno sempre e quando le abbiamo installate.

I vari comandi presenti (answer, playback,echo,hangup) vengono divisi in asterisk in due grandi gruppi:

  • Applicazioni
  • Funzioni

Come facciamo a sapere quali e quante sono?

Dalla console di Asterisk possiamo scrivere questi due comandi:

asterisk –rvvvvvvvvvvvv

CLI> core show applications

apparirà una lista delle applicazioni utilizzabili

CLI> core show functions

apparirà una lista delle funzioni presenti

Se vogliamo vedere la sintassi di una particolare applicazione scriviamo:

CLI> core show application answer

riceveremo:

  -= Info about application 'Answer' =-

[Synopsis]
Answer a channel if ringing

[Description]
  Answer([delay]): If the call has not been answered, this application will
answer it. Otherwise, it has no effect on the call. If a delay is specified,
Asterisk will wait this number of milliseconds before returning to
the dialplan after answering the call.

Continuiamo con il nostro dialplan:

Sempre nel nostro contesto locale scriviamo:

exten => 97,1,Answer(2)
exten => 97,n,VoiceMail
exten => 97,n,Hangup()

Con queste tre linee entriamo nel menu della segreteria telefonica. Possiamo fare più cose: inviare un messaggio ad un altro interno o inserire il numero del nostro interno e la password associata per vedere se abbiamo dei nuovi messaggi.

Come potete vedere nella seconda e terza linea invece di indicare rispettivamente il numero due e il numero tre come priorità, è presente la lettera n. Questo ci permette di non numerare sequenzialmente le linee in quanto n significa next cioè il numero successivo a quello presente nella linea che lo precede. Questo tipo di soluzione è molto comoda nel caso dobbiamo inserire una nuova linea tra quelle presenti. Invece di dover rinumerare tutte le linee basta che indichiamo la prima e poi usiamo la lettera n.

Continuiamo.

Adesso vogliamo creare un contesto per le chiamate a fissi italiani.

[fisso]

exten => _00390.,1,Dial(SIP/provider1/${EXTEN},45)

exten => _00390.,n,Hangup

 

Con la prima linea indichiamo a Asterisk che per tutti i numeri che iniziano per 00390 e sono seguiti per qualsiasi numero di cifre (il punto) chiamiamo il numero (applicazione Dial, attraverso il nostro provider VoIP chiamato provider1. La variabile ${EXTEN} contiene il numero che abbiamo chiamato e 45 sono i secondi che durerà il tentativo di chiamata. Se dopo 45 secondi nessuno risponde, la chiamata verrà terminata (hangup).

Possiamo fare la stessa cosa per i cellulari:

[cellulare]

exten => _00393.,1,Dial(SIP/provider2/${EXTEN},45)

exten => _00393.,n,Hangup

In questo caso abbiamo cambiato il numero 00390 con 00393 (visto che tutti i numeri di cellulare iniziano per 3) e il nostro provider (provider2)

Adesso possiamo definire chi ha accesso a che cosa.

Se vi ricordate quando abbiamo configurato il sip.conf per ogni singolo interno abbiamo definito un contesto.

Riprendiamo l’esempio con due interni:

[1000]
accountcode=1000
language=it
type=friendsecret=password
mailbox=1000@default
host=dynamic
dtmfmode=rfc2833
dial=SIP/1000
context=gruppoa
canreinvite=no
nat=yes
callerid=Interno <1000>
disallow=all
allow=gsm
allow=ulaw

[1001]
accountcode=1001
language=it
type=friendsecret=password
mailbox=1001@default
host=dynamic
dtmfmode=rfc2833
dial=SIP/1001
context=gruppob
canreinvite=no
nat=yes
callerid=Interno <1001>
disallow=all
allow=gsm
allow=ulaw

Come potete vedere l’interno 1000 appartiene al contesto gruppoa e l’interno 1001 al contesto gruppob

Adesso con una serie di comandi (sempre da inserire nell’extensions.conf) possiamo definire a cosa hanno accesso i due interni

Scriviamo:

[gruppoa]
include => locale

[gruppob]
include => locale
include => fisso
include => cellulare

 

Con queste definiamo che il gruppoa (cioè l’interno 1001 ha accesso solamente al contesto locale (quello del test eco e della segreteria telefonica) mentre il gruppob ha accesso ai contesti locale, fisso e cellulare quindi potrà fare il test del eco, entrare nella segreteria telefonica e, in più, effettuare chiamate a fissi e cellulare nazionali.

Riprendendo tutte le linee scritte il nostro dialplan sarà:

[general
static=yes
writeprotect=no
autofallthrough=yes
extenpatternmatchnew=yes
priorityjumping=yes
clearglobalvars=no

[globals]
luigi=SIP/1000
marco=SIP/1001

[locale]
exten => 100,1, Answer()
exten => 100,2, Playback(demo-echotest)
exten => 100,3, Echo
exten => 100,4, Playback(demo-echodone)
exten => 100,5, Hangup

exten => 97,1,Answer(2)
exten => 97,n,VoiceMail
exten => 97,n,Hangup()

[fisso]
exten => _00390.,1,Dial(SIP/provider1/${EXTEN},45)
exten => _00390.,n,Hangup

[cellulare]
exten => _00393.,1,Dial(SIP/provider2/${EXTEN},45)
exten => _00393.,n,Hangup

[gruppoa]
include => locale

[gruppob]
include => local
include => fisso
include => cellulare

 

Nel prossimo articolo vedremo come usare le macro nel dialplan.

 

Etiquetas de Technorati: ,,
Condividi contenuti