[Asterisk-Users] Hotel wake-up

Rob Fugina robf at geekthing.com
Sun Feb 29 17:11:39 MST 2004


On Sat, Feb 28, 2004 at 11:03:41PM -0600, Robert Lawrence wrote:
> I would be interested in the AGI Script.

Here it is, along with the shell script I run from cron every minute.
It's sloppy -- I didn't expect to be sharing it so quickly.

Rob

-- 
Rob Fugina, Systems Guy
robf at geekthing.com -- http://www.geekthing.com
My firewall filters MS Office attachments.

IBM = Institute of Black Magic
-------------- next part --------------
#!/bin/bash

PENDING=/tmp/wakeups
OUTGOING=/var/spool/asterisk/outgoing
SLEEP=5

TIME=$(/bin/date +%H%M)

for fn in $PENDING/$TIME.*.call
do
	if [ -r $fn ]
	then
		/bin/mv -vf $fn $OUTGOING/
		sleep $SLEEP
	fi
done

-------------- next part --------------
#!/usr/bin/perl

use Asterisk::AGI;
use Date::Manip;

use strict;

#########

# Settings:

my $pending_dir = '/tmp/wakeups';

my $local_context = 'inside';

# values for the call file:
my $maxretries = 3;
my $retrytime = 60;
my $waittime =  30;

my $application = 'MusicOnHold';
my $data = 'default';

my $callerid = 'Wakeup Call Service <297>';

#########

my $agi = new Asterisk::AGI;
my %stuff = $agi->ReadParse;    # MUST DO THIS! -- (add this to constructor!)

# this says "1 to create, 2 to confirm, 3 to cancel"
my $func = $agi->get_data('wakeup-menu', 20000, 1);

exit if $func == -1;

my ($caller) = $stuff{callerid} =~ /<(\d+)>/;

if ($func == 1)
{
	my $time = $agi->get_data('time', 15000, 4);
	exit if $func == -1;

	if ($time =~ /^(\d{2})(\d{2})$/)
	{
		my $hour = $1 * 1;
		my $min = $2;

		if ($hour > 0 && $hour <= 12 && $min < 60)
		{
			my $time;

			$agi->stream_file('digits/1');
			$agi->stream_file('digits/a-m');
			$agi->stream_file('digits/2');
			my $ampm = $agi->get_data('digits/p-m', 15000, 1);
			exit if $ampm == -1;

			if ($ampm == 1)
			{
				$time = ParseDate(sprintf("%s:%02s AM", $hour, $min));
			}
			elsif ($ampm == 2)
			{
				$time = ParseDate(sprintf("%s:%02s PM", $hour, $min));
			}
			else
			{
				$agi->stream_file('vm-sorry');
			}

			if ($time)
			{
				my $h = UnixDate($time, "%I") * 1;
				my $m = UnixDate($time, "%M");
				my $a = UnixDate($time, "%p");

				foreach my $fn (<$pending_dir/*.$caller.call>)
				{
					unlink $fn;
				}

				my $filename = sprintf("%s/%04s.%s.call", $pending_dir, UnixDate($time, "%H%M"), $caller);

				open(FILE, ">$filename");

				printf FILE q{#
Channel: Local/%s@%s

MaxRetries: %s
RetryTime: %s
WaitTime: %s

Application: %s
Data: %s

Callerid: %s
},
	$caller, $local_context,
	$maxretries,
	$retrytime,
	$waittime,
	$application,
	$data,
	$callerid,
	;

				close(FILE);

				# say "Your wakeup call"
				$agi->stream_file('has-been-set-to');
				$agi->exec('SayUnixTime', sprintf("%s||IMp", UnixDate($time, "%s")));

				$agi->stream_file('for');
				$agi->stream_file('extension');
				$agi->say_digits($caller);

				$agi->stream_file('auth-thankyou');
			}
		}
		else
		{
			$agi->stream_file('vm-sorry');
		}

	}
	else
	{
		$agi->stream_file('vm-sorry');
	}
}
elsif ($func == 2)
{
	# say "Your wakeup call"

	my ($fn) = <$pending_dir/*.$caller.call>;

	if ($fn)
	{
		my ($time) = $fn =~ /\/(\d{4})\.\d+\.call/;
		$time =~ s/(\d\d)(\d\d)/$1:$2/;

		$agi->stream_file('is-set-to');

		$agi->exec('SayUnixTime', sprintf("%s||IMp", UnixDate(ParseDate($time), "%s")));
	}
	else
	{
		$agi->stream_file('is-not-set');
	}

	$agi->stream_file('auth-thankyou');
}
elsif ($func == 3)
{

	foreach my $fn (<$pending_dir/*.$caller.call>)
	{
		unlink $fn;
	}

	# say "Your wakeup call"
	$agi->stream_file('has-been-cleared');
	$agi->stream_file('auth-thankyou');
}
elsif ($func eq '*')
{
	$agi->stream_file('vm-sorry');
}
else
{
	$agi->stream_file('vm-sorry');
}

$agi->hangup;











More information about the asterisk-users mailing list