Magazine Informatica

Una semplice casella vocale con Asterisk

Creato il 13 marzo 2013 da Michelepinassi @michele_pinassi

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 !


Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :