[Asterisk-Users] wake-up call script in wiki

Isianto Istiadi isianto.istiadi at adirarental.com
Sun Jul 11 18:47:12 MST 2004


On Fri, 09 Jul 2004 13:58:30 +1000
Dear Gonzalo Servat,
I'm successfully using your wake-up script, but found 1 problem. Other than that it works perfectly good. Thanks man. ^_^
anyway, my problem seems to be the timezone or date problem.
I'm using time zone WIT/JAV, 
But when I run the wake up script, in the * console, it says that it doesn't know my timezone. so I edit the date:manipulate, in the date:maipulate, there's a line JAV + 0700 java, I change it to WIT +0700 java.
it works, but the time that I entered using wake-up script, always being added 7 hours later. For example, I put 10:00 it become 05:00 pm.
Do you have any idea how to solve this?
For the mean time, I edit your configurations a little bit to accomodate the problem, but I can't (haven't understood) how to change the asterisk-voice to accomodate that. For example when I enter 10:00 am, the file for outgoing call has been fixed to the above time, but the asterisk voice stil say 05:00 pm.
Sorry for My English, thanks


Gonzalo Servat <gs at webtastic.com.au> wrote:

> On 9/07/2004 10:21 AM +0700, Isianto Istiadi wrote:
> 
> > Dear guys,
> > I'm searching the wake-up call script in wiki, found one, but I have no
> > idea how to use it. Can you give some direction how to install it?
> > Thanks
> 
> I presume you're talking about this wake up call script: 
> <http://www.voip-info.org/tiki-index.php?page=Asterisk%20tips%20wake-up>
> 
> Stick the following in cron:
> 
> * * * * * root /path/to/run_wakeups.sh
> 
> /path/to/run_wakeups.sh contains:
> 
> ============= cut ==============
> #!/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 test -r $fn
>  then
>   /bin/mv -f $fn $OUTGOING/
>   sleep $SLEEP
>  fi
> done
> ============= cut ==============
> 
> The following is my wakeup.agi. Changes to the original version are: some 
> debugging functionality (as I was troubleshooting an issue where it would 
> read out the wrong time when the script tells you what time the wake up 
> call was set to), and it also creates the /tmp/wakeups directory if it 
> doesn't already exist. I suggest using the one on the voip-info.org page 
> first, and if you decide to use my version then use at your own risk :)
> 
> ============= cut ==============
> #!/usr/bin/perl
> 
> use Asterisk::AGI;
> use Date::Manip;
> 
> use strict;
> 
> #########
> 
> # Settings:
> 
> my $pending_dir = '/tmp/wakeups';
> 
> unless (-d '/tmp/wakeups') {
>         mkdir('/tmp/wakeups');
> }
> 
> my $local_context = 'default';
> 
> # values for the call file:
> my $maxretries = 60;
> my $retrytime = 30;
> my $waittime =  35;
> 
> my $debug = 1;
> 
> #my $application = 'MusicOnHold';
> my $application = 'Playback';
> my $data = 'wake-up';
> 
> my $callerid = 'Wakeup Call Service <297>';
> 
> #########
> 
> my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
> 
> if ($debug) {
>         my $log = '/tmp/wakeup.log';
>         unlink($log);
>         open (DBG,">>$log") or die "Cannot open debug file: $!";
>         print DBG "\n" . "-" x 50 . "\n";
>         print DBG "Logging started: " . join('/', $mday, $mon, $year) . " " 
> . join(':', $hour, $min, $sec) . "\n";
>         print DBG "-" x 50 . "\n";
> }
> 
> 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;
> 
>   print DBG 'HOUR entered: ' . $hour . "\n" if $debug;
>   print DBG 'MINUTE entered: ' . $min . "\n" if $debug;
> 
>   if ($hour > 0 && $hour <= 12 && $min < 60)
>   {
>    my $time;
> 
> #   $agi->stream_file('pls-enter');
> #   $agi->stream_file('digits/1');
> #   $agi->stream_file('for');
> #   $agi->stream_file('digits/a-m');
> #   $agi->stream_file('or');
> #   $agi->stream_file('digits/2');
> #   $agi->stream_file('for');
> #   my $ampm = $agi->get_data('digits/p-m', 15000, 1);
>    my $ampm = $agi->get_data('am-or-pm', 15000, 1);
>    exit if $ampm == -1;
> 
>    if ($ampm == 1)
>    {
>     $time = ParseDate(sprintf("%s:%02s AM", $hour, $min));
>     print DBG 'TYPE entered: AM' . "\n" if $debug;
>     print DBG '$time is set to: ' . $time . "\n" if $debug;
>    }
>    elsif ($ampm == 2)
>    {
>     $time = ParseDate(sprintf("%s:%02s PM", $hour, $min));
>     print DBG 'TYPE entered: PM' . "\n" if $debug;
>     print DBG '$time is set to: ' . $time . "\n" if $debug;
>    }
>    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');
>     print DBG 'UnixDate $time translates to ' . UnixDate($time, "%o") . 
> "\n" if $debug;
>     print DBG 'localtime (UnixDate $time) translates to ' . 
> localtime(UnixDate($time, "%o")) . "\n" if $debug;
>     $agi->exec('SayUnixTime', sprintf("%s||IMp", UnixDate($time, "%o")));
> 
>     $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)
> {
> 
>  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;
> 
> if ($debug) {
>         print DBG "\n" . "-" x 50 . "\n";
>         print DBG "Logging ended: " . join('/', $mday, $mon, $year) . " " . 
> join(':', $hour, $min, $sec) . "\n";
>         print DBG "-" x 50 . "\n";
>         close(DBG);
> }
> ============= cut ==============
> 
> Last, but not least, you just need an entry in your extensions.conf similar 
> to:
> 
> exten => 999,1,AGI(/path/to/wakeup.agi)
> 
> Reload asterisk and you should now be able to dial 999 and set a wakeup 
> call. Oh, also very important, you need to create the sound files (using 
> wavepad or some other software to create gsm files) required in this 
> script. These include:
> 
> wakeup-menu.gsm (eg. "Welcome to the wakeup call service. Please enter the 
> time for your wakeup call... etc")
> for.gsm
> extension.gsm
> 
> If you got any problems, check out the asterisk console for any errors.
> 
> Hope this helps.
> 
> Regards,
> Gonzalo
> _______________________________________________
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users
> 



More information about the asterisk-users mailing list