Una semplice casella vocale con Asterisk

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 !

(Visitato in totale 14 volte, oggi 1 visite)

Rispondi

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