#!/usr/bin/perl -w # # $Id: answering_machine.pl,v 1.2 1998/09/08 12:22:45 kas Exp $ # # A simple answering machine. See the Modem::Vgetty man page for the # discussion of this source code. # # Copyright (c) 1998 Jan "Yenya" Kasprzak <kas@fi.muni.cz>. All rights # reserved. This package is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # To run it: set the $voicemaster and $voicedir variables below to something # usable. Create the $voicedir directory. Edit the vgetty's configuration # file (voice.conf) so that it contains the following options: # # voice_shell /usr/bin/perl # call_program /some/path/answering_machine.pl # # (optional: create the welcome message using something like # autopvf <message.au |pvfspeed -s <speed>|pvftormd <modem_type> \ # > $voicedir/welcome.rmd # where the speed and modem_type depends on your modem type - see the # pvftormd(1) documentation.) # Configure the vgetty on your modem line (in voice.conf), run it # (maybe from /etc/inittab) an call your modem. It should play a welcome # message (if you have created one), beep and record the message you # say to the phone. # use Modem::Vgetty; my $voicemaster = 'root@localhost'; my $voicedir = '/var/spool/voice'; my $tmout = 30; my $finish = 0; my $v = new Modem::Vgetty; $v->add_handler('BUSY_TONE', 'finish', sub { $v->stop; $finish=1; }); $v->add_handler('SILENCE_DETECTED', 'finish', sub { $v->stop; $finish=1; }); local $SIG{ALRM} = sub { $v->stop; }; $v->enable_events; $v->play_and_wait($voicedir.'/welcome.rmd'); $v->beep(100,10); $v->waitfor('READY'); if ($finish == 0) { my $num = 0; $num++ while(-r "$voicedir/$num.rmd"); $v->record("$voicedir/$num.rmd"); alarm $tmout; $v->waitfor('READY'); } system "echo 'Play with rmdtopvf $voicedir/$num.rmd|pvftoau >/dev/audio'" . " | mail -s 'New voice message' $voicemaster"; exit 0;