Per motivi strettamente “politici” mi sono trovato a dover realizzare una veloce e semplice casella vocale dove le persone, chiamando un certo numero di telefono (CloudItalia Orchestra – ex EuteliaVoip), possono lasciare il loro messaggio.
Contemporaneamente alla registrazione del messaggio, viene inviata una mail ad un certo indirizzo di posta elettronica contenente il file wav della registrazione, grazie ad un semplice script Perl.
Entriamo adesso nel dettaglio della programmazione.
Dopo aver installato Asterisk ed essendosi assicurati che funzioni correttamente, ecco il dialplan relativo alla voicebox:
VBOX_PATH=[directory dove registrare i messaggi] VBOX_DEST=[indirizzo e-mail dove inviare la notifica] [voicebox] exten => _X.,1,Answer exten => _X.,2,Wait(2) exten => _X.,1,Playback(welcome) exten => _X.,n,Playback(beep) exten => _X.,n,Set(VBOX_FILE=${VBOX_PATH}/rec-${CALLERID(num)}-${STRFTIME(${EPOCH},,%d%m%Y-%H%M%S)}.wav) exten => _X.,n,Record(${VBOX_FILE}|10|600) exten => _X.,n,Noop(Sending mail notice for ${VBOXFILE}) exten => _X.,n,System(/var/lib/asterisk/cb-voicebox.pl ${CALLERID(NUM)} ${EXTEN} ${VBOX_FILE} ${VBOX_DEST}) exten => _X.,n,Wait(1) exten => _X.,n,Playback(thanks) exten => _X.,n,Wait(2) exten => _X.,n,Hangup
lo script Perl cb-voicebox.pl ha 4 argomenti: il numero del chiamante, il numero chiamato, il path al file .wav registrato e l’indirizzo e-mail dove spedire la notifica:
#!/usr/bin/perl
use MIME::Lite;
use Net::SMTP;
$caller = $ARGV[0];
$vbox = $ARGV[1];
$vboxfile = $ARGV[2];
$to_address = $ARGV[3];
$vboxtime = localtime;
### Mittente e server SMTP
my $from_address = 'vbox@[dominio]';
my $mail_host = 'localhost';
### Oggetto e corpo della mail
my $subject = "Nuovo messaggio vocale da $caller nella VBOX $vbox";
my $message_body = "Salve, questo messaggio automatico per segnalare che nella casella vocale del numero $vbox e stato lasciato un messaggio da $caller in data $vboxtime. In allegato il file audio.";
$msg = MIME::Lite->new(
From => $from_address,
To => $to_address,
Subject => $subject,
Type =>'multipart/mixed'
) or die "Error creating multipart container: $!\n";
### Aggiungi il testo del messaggio
$msg->attach (
Type => 'TEXT',
Data => $message_body
) or die "Error adding the text message part: $!\n";
### Allega il file audio, con il corretto MIME Type (audio/wav)
$msg->attach (
Type => 'audio/wav',
Path => $vboxfile,
Filename => 'messaggio.wav',
Disposition => 'attachment'
) or die "Error adding $vboxfile: $!\n";
### Invia la mail
MIME::Lite->send('smtp', $mail_host, Timeout=>60);
$msg->send;
Semplice ed efficace !