|
|
 |
More Examples
Dialing an Extension
Your mileage may vary, but I wrote a second script that
calls my office phone number and extension. It's based on a
timing scheme so you'll probably have to tweak it. Again,
if the VOICE_DETECTED event was working,
I wouldn't have had to do that. Oh well.
#!/usr/bin/perl
use Modem::Vgetty;
# variables
my $number = "3016562262";
my $menu1 = "/home/eisen/work/voice/menu1.rmd";
my $pressed1 = "/home/eisen/work/voice/pressed1.rmd";
my $no_pressed1 = "/home/eisen/work/voice/no_pressed1.rmd";
my $dtfm;
# turn on debugging
$Modem::Vgetty::testing = 1;
# create new object
my $voice = new Modem::Vgetty;
$voice->device('DIALUP_LINE');
$voice->autostop(qw(ON));
# add event handlers
$voice->add_handler('BUSY_TONE', 'finish',sub { $voice->stop; exit 0; });
$voice->add_handler('RECEIVED_DTMF', 'readnum',\&read_dtfm);
$voice->add_handler('VOICE_DETECTED','voice',\&play_menu);
# enable event handlers
$voice->enable_events;
# dial the number, play the message, and wait for feedback
print "Dialing $number\n";
$voice->dial($number);
$voice->waitfor('READY');
# waiting for an answer
print "Waiting for answer...\n";
$voice->wait(10);
$voice->waitfor('READY');
# dial extension
print "Dialing extension...\n";
$voice->dial(101);
# wait for answer from extension
print "Waiting for extension pickup...\n";
$voice->wait(15);
$voice->waitfor('READY');
until ($dtfm) {
&play_menu($voice);
$voice->wait(5);
$voice->expect('READY');
}
sub play_menu {
my $self = shift;
print "Playing menu...\n";
$self->play_and_wait($menu1);
}
sub read_dtfm {
my ($self,$input,$mydtmf) = @_;
print "Reading DTFM...$mydtmf\n";
$dtmf = $mydtmf;
$self->stop;
$self->expect('READY');
if ($dtmf == 1) {
$voice->play_and_wait($pressed1);
print "$number is confirmed.\n";
} else {
$voice->play_and_wait($no_pressed1);
print "$friend cannot attend\n";
}
$self->stop;
$self->shutdown;
exit 0;
}
Well, since you made it to the bottom of the program,
you may have noticed a combination of wait
calls and one dial call. Well, waiting is
something everyone does on telephones including this program.
I've timed it to wait for the phone system to answer, dial my
extension, wait for the call to transfer, and then play the
menu. It's clunky, but it works most of the time.
|