Mentre si pensa alla configurazione di un IVR, nasce spesso l’esigenza di dover fornire un menu vocale differente solo in alcune occasioni specifiche, come ad esempio durante i giorni festivi. La soluzione più semplice e facilemente applicabile a sistemi di dimensioni ridotte consiste nell’utilizzare il database interno di asterisk per immagazzinare le date, per poi limitarsi ad eseguire un check nel dialplan di asterisk.
Database: per aggiungere una data “bankholiday” al database asterisk si utilizzerà il comando ‘database’ come nell’esempio sottostante, sostiuendo la YYYYMMDD (key) con il giorno desiderato (es. 20101225):
asterisk -rx 'database put bankholiday YYYYMMDD 1'
Dialplan: la funzione DB_EXISTS restituirà valore 1 se la chiave YYYYMMDD esiste. Nel esempio sottostante il dialplan continuerà l’esecuzione della macro “reception” se il giorno risulta non essere nel database, mentre salterà al menu vocale “menu-reception” durante i giorni festivi presenti nel db interno.
[macro-reception]
include = default
exten => s,1,GotoIf(${DB_EXISTS(bankholiday/${STRFTIME(${EPOCH},,%Y%m%d)})}?closed,1)
...
exten => closed,1,NoOp("closed")
...
Con una semplice espressione regolare possiamo analizzare la prima cifra del numero chiamante ed eseguire un’applicazione differente, come ad esempio, riprodurre un messaggio vocale in differenti lingue.
Consideriamo l’esempio di un centralino telefonico con un messaggio di benvenuto in due lingue, italiano e inglese. Per discriminare i numeri telefonici italiani ricerchiamo le cifre “0″ e “3″ rispettivamente per i numeri di rete fissa e i numeri gsm.
Tutte le chiamate che iniziano con una cifra differente o che si effettuano con il numero nascosto si rindirizzeranno sul messaggio in inglese.
exten => s,n,GotoIF(${REGEX(“^[3,0]” ${CALLERID(num):0:1})}”]?it,1:en,1)
exten => it,1,Background(welcome-it)
exten => it,n,…
exten => en,1,Background(welcome-en)
exten => en,n,…