#!/usr/bin/perl # # agi-dtmf.agi - script for playing DTMF tones received as the callerid field # # DTMF sound files must be in /var/lib/asterisk/sounds for this to work # # Accepted values are: 1 2 3 4 5 6 7 8 9 0 # * , # comma means pause for 1 second # # Copyright (C) 2006 Matt Florell LICENSE: GPLv2 # $|=1; while() { chomp; last unless length($_); if (/^agi_(\w+)\:\s+(.*)$/) { $AGI{$1} = $2; } if (/^agi_callerid\:\s+(.*)$/) {$caller_id = $1;} if (/^agi_calleridname\:\s+(.*)$/) {$caller_idname = $1;} } print STDERR "AGI Environment Dump:\n"; foreach $i (sort keys %AGI) { print STDERR " -- $i = $AGI{$i}\n"; } use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second use Asterisk::AGI; my $agi = new Asterisk::AGI; my $clid = $agi->get_variable('CALLERID'); my $clidname = $agi->get_variable('CALLERIDNAME'); print STDERR "X. |$clid|$caller_id|$clidname|\n"; sub checkresult { my ($res) = @_; my $retval; $tests++; chomp $res; if ($res =~ /^200/) { $res =~ /result=(-?\d+)/; if (!length($1)) { print STDERR "FAIL ($res)\n"; $fail++; } else { print STDERR "PASS ($1)\n"; $pass++; } } else { print STDERR "FAIL (unexpected result '$res')\n"; $fail++; } } ### sleep for 5 tenths of a second usleep(1*500*1000); print "STREAM FILE silence \"\"\n"; $caller_id = "$caller_id$caller_idname"; @CALLERID_DIGITS = split(//, $caller_id); foreach (@CALLERID_DIGITS) { if ($CALLERID_DIGITS[$g] =~ /\d/) { print "STREAM FILE $CALLERID_DIGITS[$g] \"\"\n"; print STDERR "DIGIT: $CALLERID_DIGITS[$g]\n"; } else { if ($CALLERID_DIGITS[$g] =~ /\#/) {print "STREAM FILE hash \"\"\n";} if ($CALLERID_DIGITS[$g] =~ /\*/) {print "STREAM FILE star \"\"\n";} if ($CALLERID_DIGITS[$g] =~ /\,/) {sleep(1);} print STDERR "NON-DIGIT: $CALLERID_DIGITS[$g]\n"; } $g++; ### sleep for 20 hundredths of a second usleep(1*150*1000); print "STREAM FILE silence \"\"\n"; ### sleep for 10 hundredths of a second usleep(1*100*1000); } print "STREAM FILE silence \"\"\n"; $result = ; checkresult($result);