Home > Articolo Tecnico > Asterisk – Le variabili [ottava parte]

Asterisk – Le variabili [ottava parte]

March 31st, 2009 Leave a comment Go to comments

Le variabili possono essere definite sia dall’amministratore di sistema che da Asterisk.

distinguiamo due tipi di variabili:

  • variabili di canale (Channel variables)
  • variabili globali (Global vairables)

L’utilizzo delle variabili permette di avere un dialplan più chiaro e semplice da gestire. La sintassi che permette di recuperare il valore di una variabile è ${VARIABILE}. Le variabili sono case sensitive!!!

Le variabili di canale settate da Asterisk sono tutte maiuscole è quindi utile, per evitare “duplicati”, creare variabili con caratteri minuscoli.

Channel variables

Le variabili di canale contengono valori associati con un determinato canale. Sono definite per tutta la durata della chiamata corrente e disponibili solo per il canale che partecipa a quella determinata chiamata. Per settare il valore di una variabile di canale si usa l’applicazione Set(): exten =>123,n,Set(count=3)

Global vairables

Le variabili globali sono disponibili on qualsiasi punto del Dialplan, in qualsiasi chiamata e in qualsiasi contesto. Vengono definite nella sezione [globals] del dialplan.

[globals]
Tom=SIP/ts_xlite


nel dialplan:
exten => 601,1,Dial(${Tom})

E’ possibile definire queste variabili anche con l’applicazione Set() all’interno del dialplan aggiungendo però il parametro “g”: Set(count=3,g)

VALORE DELLA VARIABILE {$DIALSTATUS}

– CHANUNAVAIL : canale non disponibile
– CONGESTION
– NOANSWER
– ANSWER
– BUSY
– CANCEL

Esempio: untilizzo delle label non numeriche

exten => 601,1,NoOp(Calling Tom)
exten => 601,n,Dial(${Tom},30)
exten => 601,n,Goto(${DIALSTATUS})
exten => 601,n(NOANSWER),1,Voicemail(601@default,u)
exten => 601,n,Hungup()
exten => 601,n(BUSY),Voicemail(601@default,b)

VALORE DELLA VARIABILE {$EXTEN}

Questa variabile contiene il valore del numero che è stato chiamato:

exten => _XXX,1,SayDigits ({$EXTEN})

Asterisk permette con facilità di manipolare la lunghezza delle variabili:

{$VARIABILE:x} –> x: numero di digits da rimuovere a partire dall’inizio della stringa

  • ES: se il valore di {$EXTEN} è 12345, il valore di  {$EXTEN:1} è 2345

{$VARIABILE:-x} –> x: numero di digits da rimuovere a partire dalla fine della stringa

  • ES: se il valore di {$EXTEN} è 12345, il valore di  {$EXTEN:-1} è 1234

Si possono anche estrarre parti della stringa utilizzando la sintassi: ${variabile:skip:length}

  • ES: se il valore di {$EXTEN} è 12345678, il valore di  {$EXTEN:3:3} è 456 (salto i prime tre e prendo i tre caratteri che seguono

.

L’Applicazione Read()

A volte è possibile voler prendere delle delle informazioni dall’utente e processare tali dati. L’applicazione Read() permette di prendere in input i DTMF (toni della tastiera telefonica) e assegnarli ad una variabile. Questa funzione chiede all’utente di digitare sulla tastiera dei valori e li inserisce dentro una determinata variabile. L’inserimento termina quando scade il timeout o quando l’utente digita “#”. ES:

exten => 621,1,Read(Digits,enter-ext-of-person)
exten => 612,n,SayDigits(${Digits})
exten => 612,n,Goto(1)

Pattern Matching

Il pattern matching inizia sempre con il carattere _ (underscore)

X -> 0-9

N -> 2-9

Z -> 1-9

Range di numeri possono essere descritti racchiudendoli tra parentesi quadre:

_[0-5] matcha numeri tra 0 e 5

Il punto matcha qualsiasi cosa (anche le estenzioni speciali tipo “i”, “h”, etc)-> _.

E’ preferibile usare _X

Categories: Articolo Tecnico Tags:
  1. No comments yet.
  1. No trackbacks yet.
You must be logged in to post a comment.