spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com

home / experts / perl / tutorial 15

Two-Way Telephone Interaction

Developer News
News Flash: Adobe Has iPhone Workaround
Adobe's Flash 10.1 Goes Mobile (Minus iPhone)
A Salute to Visionary CEOs

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.


home / experts / perl / tutorial 15

http://www.internet.com