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")
...