Asterisk Tips&Tricks – Personalizzare il messaggio di DND

Una delle funzioni più apprezzate dei terminali VoIP è la possibilità, in caso di assenza o impedimento, di impostare la funzione di DND –Do Not Disturb-.

Comunemente, nelle piattaforme Asterisk, in caso di chiamata ad un terminale in modalità DND si viene reindirizzati ad una procedura che informa come “l’utente chiamato non è disponibile“. Se questo messaggio è adeguato per gran parte delle situazioni, ci sono dei contesti in cui è necessario dare qualche informazione aggiuntiva all’utente, personalizzando il messaggio.

Nel mio ecosistema VoIP, basato su Asterisk ed Opensips, ho realizzato un veloce “hack” per verificare se l’utente ha un messaggio personalizzato e, in caso affermativo, lo riproduce al posto del default.

Nel file extensions.conf, comunemente nella directory /etc/asterisk/, ho modificato la parte del dialplan chiamato in caso di DND:

; ===========================================
; On NOT AVAILABLE or DND - Check for custom DND message
; ===========================================
exten => _VMR_.,1,Noop("DND: ${CALLERID(num)} ${EXTEN}") 
exten => _VMR_.,n,Set(DID=${EXTEN:4})
exten => _VMR_.,n,Wait(1)
exten => _VMR_.,n,Playback(msg/${DID}-msg-notavail,skip)
exten => _VMR_.,n,GotoIf($["${PLAYBACKSTATUS}"="SUCCESS"]?hangup:fallback)
exten => _VMR_.,n(fallback),Playback(vm-theperson)
exten => _VMR_.,n,SayDigits(${DID})
exten => _VMR_.,n,Playback(vm-isunavail)
exten => _VMR_.,n(hangup),Hangup()

Escluse le prime due righe, che estraggono dal numero chiamato le ultime 4 cifre (interno univoco), la spiegazione delle altre istruzioni è piuttosto semplice: Asterisk verifica la presenza, nella directory sounds (generalmente /var/log/asterisk/sounds) la presenza del file msg/{numero chiamato}-msg-notavailable in uno dei formati supportati (wav, mp3, sln…) e, in caso affermativo, lo riproduce con il comando Playback().

Playback() imposta la variabile di sessione “PLAYBACKSTATUS” su “SUCCESS” o “FAILED“, in caso di riproduzione avvenuta con successo o meno, e verificando con l’istruzione GotoIf(), posso far riprodurre, in caso di assenza del file audio personalizzato, il messaggio di default.

 

Michele Pinassi

Blogger, appassionato di tecnologia, società e politica. Attualmente Responsabile del Sistema telefonico di Ateneo presso l'Università degli Studi di Siena ed esperto di sicurezza informatica nello staff del DPO. Utilizza quasi esclusivamente software libero.

Potrebbero interessarti anche...

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

%d blogger hanno fatto clic su Mi Piace per questo: