Archivio

Posts Tagged ‘AEL’

Asterisk Extension Language (AEL): chi era costui?

12/11/2009 2 commenti

Asterisk è ormai sulla bocca di tutti. Chi si occupa di VoIP in maniera professionale ha sentito nominare almeno una volta questo fantastico software (quasi) open, non fosse altro per le decine di funzionalità che implementa.

Chi lo usa da tempo sa che, per gestire il comportamento di una chiamata, è necessario dettagliare, step by step, tutti i passaggi e le applicazioni che entrano in gioco, con una programmazione che ricorda il Basic di qualche decennio fa:

exten => 123,1,Answer
exten => 123,2,Wait(1)
exten => 123,3,Voicemail(123)
exten => 123,4,Hangup

Questo sistema, abbastanza intuitivo, ha un senso nella configurazione di dialplans molto brevi ma risulta illeggibile e complicato da usare se è necessario fare ricorso a salti condizionati (gotoif), condizioni temporali (gotoiftime) etc. etc.

Esiste orma dalla release 1.2 di Asterisk un linguaggio di programmazione (AEL appunto) realizzato per porre rimedio all’illeggibilità del dialplan tradizonale. Solo per fare un esempio, il codice che ho appena scritto, in AEL diventa:

123 => { Answer();
         Wait(1)
         Voicemail(123);
         Hangup();
       }

Si noti la maggior leggibilità: ogni chiamata con destinazione 123 viene gestita secondo quanto posto tra parentesi graffe.

Se il tradizionale dial plan veniva inserito nel file extensions.conf , il dial plan scritto in AEL sarà contenuto in extensions.ael. Un compilatore si preoccuperà poi di tradurre il nostro codice AEL nella forma “step by step” comprensibile ad Asterisk. l vantaggio in effetti è nella leggibilità del codice e nella possibilità di usare la programmazione strutturata, cosa non da poco, specialmente quando si sviluppano applicazioni complesse.

Mi sembrava interessante far notare questa funzionalità poco utilizzata di Asterisk, perché, lavorando nel VoIP non ho mai ricevuto configurazioni dai clienti fatte in AEL, mentre potrebbe essere il modo migliore per avvicinarsi a questo IPPBX.

Vi lascio con un esempio nelle due versioni. La macro seguente è un classico: chiama il numero che le viene passato come argomento, se non risponde o è occupato manda la chiamata in segreteria.

[macro-stdexten]
; Questo è un commento: macro standard per chiamare una extension
; ${ARG1} - Casella di posta
; ${ARG2} - extension da chiamare

; in main context do exten => 1000,1,Macro(stdexten,1000,1000)

exten => s,1,Dial(${ARG2},20) ; Prova a chiamare
exten => s,2,Goto(s-${DIALSTATUS},1) ; Se non va in porto ...
exten => s-BUSY,1,Voicemail(b${ARG1}) ; se occupato vai alla voicemail
exten => s-BUSY,2,Hangup ; Se premono #, chiudi
exten => s-NOANSWER,1,Voicemail(u${ARG1}) ; Se non risponde vai alla vociemail
exten => s-NOANSWER,2,Hangup ; Se premono #, chiudi
exten => _s-.,1,Playback(byebye) ; in tutti gli altri casi...byebye
exten => _s-.,2,Hangup ; chiudi

In AEL diventa :

macro std-exten( ext , mailbox ) {
       Dial(${ext},20);
       switch(${DIALSTATUS) {
       case BUSY:
               Voicemail(b${ext});
               Hangup();

       case NOANSWER:
               Voicemail(u${ext});
               Hangup();

       default:
               Voicemail(u${ext});
               Hangup();
       };

};
Annunci
Categorie:Voip:Asterisk Tag:,