1.1 --- a/asterisk/wakeup.agi Sun Mar 20 19:27:35 2011 +0100 1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 1.3 @@ -1,733 +0,0 @@ 1.4 -#! @l_prefix@/bin/perl 1.5 -# 1.6 -# wakeup.agi 1.1 1.7 -# 1.8 -# A wakeup agi script for Asterisk 1.9 -# 1.10 -# Copyright (C) 2007 1.11 -# 1.12 -# Jonas Arndt <jonas_arndt@comcast.net> 1.13 -# 1.14 -# This program is free software, distributed under the terms of the 1.15 -# GNU General Public License v2. 1.16 -# 1.17 -# 1.18 -# This program is free software: you can redistribute it and/or modify 1.19 -# it under the terms of the GNU General Public License as published by 1.20 -# the Free Software Foundation, either version 3 of the License, or 1.21 -# (at your option) any later version. 1.22 -# 1.23 -# This program is distributed in the hope that it will be useful, 1.24 -# but WITHOUT ANY WARRANTY; without even the implied warranty of 1.25 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1.26 -# GNU General Public License for more details. 1.27 -# 1.28 -# You should have received a copy of the GNU General Public License 1.29 -# along with this program. If not, see <http://www.gnu.org/licenses/>. 1.30 -# 1.31 - 1.32 -use strict; 1.33 -use Time::Local; 1.34 -$|=1; 1.35 -# Setup some variables 1.36 -my %AGI; my $DEBUG=0; 1.37 -# Some constants 1.38 -my $OUTDIR="@l_prefix@/var/asterisk/spool/outgoing"; 1.39 -my $WAKEDIR="@l_prefix@/var/asterisk/spool/tmp"; 1.40 -my $debugfile="@l_prefix@/var/asterisk/spool/tmp/wakeup.log"; 1.41 -my $DEBUGOUT = "filehandle"; 1.42 -my $CALL = "filehandle"; 1.43 -my $TOUCH = "/usr/bin/touch"; 1.44 - 1.45 -############ check_result ########## 1.46 -# Use this to check the result of # 1.47 -# a sent command # 1.48 -# I pretty much stole this from # 1.49 -# the regular agi-test.agi # 1.50 -#################################### 1.51 -sub checkresult { 1.52 - my ($res) = @_; 1.53 - my $retval; 1.54 - chomp $res; 1.55 - if ($res =~ /^200/) { 1.56 - $res =~ /result=(-?\d+)/; 1.57 - if (!length($1)) { 1.58 - print DEBUGOUT "FAIL ($res)\n"; 1.59 - exit(1); 1.60 - } elsif ($DEBUG=1) { 1.61 - print DEBUGOUT "PASS ($1)\n"; 1.62 - } 1.63 - } else { 1.64 - print STDERR "FAIL (unexpected result '$res')\n"; 1.65 - exit(1); 1.66 - } 1.67 -} 1.68 - 1.69 - 1.70 -############ send_file ############# 1.71 -# Use this to send a wave file on # 1.72 -# the channel # 1.73 -# # 1.74 -#################################### 1.75 -sub send_file { 1.76 - my ($myfile) = @_; 1.77 - chomp($myfile); 1.78 - if ($DEBUG == 1 ) { 1.79 - print DEBUGOUT "Sending stream $myfile \n"; 1.80 - } 1.81 - print "STREAM FILE $myfile \"0123456789\"\n"; 1.82 - my $result = <STDIN>; 1.83 - &checkresult($result); 1.84 - $result =~ /result=(-?\d+)/; 1.85 - return $1; 1.86 -} 1.87 - 1.88 -############ hangup ############### 1.89 -# Use this to hand up a channel # 1.90 -# the channel # 1.91 -# # 1.92 -#################################### 1.93 -sub hangup { 1.94 - if ($DEBUG == 1 ) { 1.95 - print DEBUGOUT "Hanging up \n"; 1.96 - } 1.97 - print "HANGUP \"\" \n"; 1.98 - my $result = <STDIN>; 1.99 - &checkresult($result); 1.100 -} 1.101 - 1.102 -############ say_number ############ 1.103 -# Use this to say a number # 1.104 -# over the channel # 1.105 -# # 1.106 -#################################### 1.107 -sub say_number { 1.108 - my ($mynumber) = @_; 1.109 - chomp($mynumber); 1.110 - if ($DEBUG == 1 ) { 1.111 - print DEBUGOUT "Saying number $mynumber \n"; 1.112 - } 1.113 - print "SAY NUMBER $mynumber \"0123456789\"\n"; 1.114 - my $result = <STDIN>; 1.115 - &checkresult($result); 1.116 - $result =~ /result=(-?\d+)/; 1.117 - return $1; 1.118 -} 1.119 - 1.120 -############ say_digits ############ 1.121 -# Use this to say a digits # 1.122 -# over the channel # 1.123 -# # 1.124 -#################################### 1.125 -sub say_digits { 1.126 - my ($mynumber) = @_; 1.127 - chomp($mynumber); 1.128 - if ($DEBUG == 1 ) { 1.129 - print DEBUGOUT "Saying digits $mynumber \n"; 1.130 - } 1.131 - print "SAY DIGITS $mynumber \"0123456789\"\n"; 1.132 - my $result = <STDIN>; 1.133 - &checkresult($result); 1.134 -} 1.135 - 1.136 -############ get_choice ############ 1.137 -# Use this to receive a DTMF # 1.138 -# choice from the channel # 1.139 -# # 1.140 -#################################### 1.141 -sub get_choice { 1.142 - if ($DEBUG == 1 ) { 1.143 - print DEBUGOUT "Getting choice \n"; 1.144 - } 1.145 - print "WAIT FOR DIGIT 15000\n"; 1.146 - my $result = <STDIN>; 1.147 - &checkresult($result); 1.148 - $result =~ /result=(-?\d+)/; 1.149 - return $1; 1.150 -} 1.151 - 1.152 -############ answer ############### 1.153 -# Anser the channel # 1.154 -# # 1.155 -#################################### 1.156 -sub answer { 1.157 - if ($DEBUG == 1 ) { 1.158 - print DEBUGOUT "Answering the channel \n"; 1.159 - } 1.160 - print "ANSWER\n"; 1.161 - my $result = <STDIN>; 1.162 - &checkresult($result); 1.163 - $result =~ /result=(-?\d+)/; 1.164 - return $1; 1.165 -} 1.166 - 1.167 -######## get_data ################## 1.168 -# Feed with (file, maxnumbers) # 1.169 -# where file is the sound file # 1.170 -# to be played and maxnumbers is # 1.171 -# the maximum amount of digits to # 1.172 -# allow in the answer # 1.173 -#################################### 1.174 -sub get_data { 1.175 - my @mydata = @_; 1.176 - my $myfile = $mydata[0]; 1.177 - my $mymax = $mydata[1]; 1.178 - if ($DEBUG == 1 ) { 1.179 - print DEBUGOUT "Getting data \n"; 1.180 - } 1.181 - print "GET DATA $myfile 15000 $mymax \n"; 1.182 - my $result = <STDIN>; 1.183 - &checkresult($result); 1.184 - $result =~ /result=(-?\d+)/; 1.185 - return $1; 1.186 -} 1.187 - 1.188 -###### check_outstanding_calls ##### 1.189 -# Are there any outstanding wakeup # 1.190 -# calls for this extensions? # 1.191 -# Pass the extension to the # 1.192 -# function. The function returns # 1.193 -# a list of files # 1.194 -#################################### 1.195 -sub check_outstanding_calls { 1.196 - my $myext = @_; 1.197 - #opendir DIR, $WAKEDIR; 1.198 - opendir DIR, $OUTDIR; 1.199 - my @files = grep {/$myext/} readdir(DIR); 1.200 - closedir DIR; 1.201 - return @files; 1.202 -} 1.203 - 1.204 -######## get_extension ############# 1.205 -# Receive the AIG variable and # 1.206 -# return the extension # 1.207 -#################################### 1.208 -sub get_extension { 1.209 - my (@aig) = @_; 1.210 - if ($aig[11] == '') { 1.211 - print STDERR "No extension found in function get_exension \n"; 1.212 - return "FAIL"; 1.213 - } 1.214 - my $myext = $aig[11]; 1.215 - return $myext; 1.216 -} 1.217 - 1.218 -######## get_context ############### 1.219 -# Receive the AIG variable and # 1.220 -# return the context # 1.221 -#################################### 1.222 -sub get_context { 1.223 - my (@aig) = @_; 1.224 - if ($aig[8] == '') { 1.225 - print STDERR "No extension found in function get_exension \n"; 1.226 - return "FAIL"; 1.227 - } 1.228 - my $mycont = $aig[8]; 1.229 - return $mycont; 1.230 -} 1.231 - 1.232 -########### get_clid ############### 1.233 -# Receive the AIG variable and # 1.234 -# return the clid # 1.235 -#################################### 1.236 -sub get_clid { 1.237 - my (@aig) = @_; 1.238 - if ($aig[1] == '') { 1.239 - print STDERR "No clid found in function get_clid \n"; 1.240 - return "FAIL"; 1.241 - } 1.242 - my $myext = $aig[1]; 1.243 - return $myext; 1.244 -} 1.245 -########### init_agi ############### 1.246 -# Use this to initialize the AGI # 1.247 -# variable # 1.248 -# # 1.249 -#################################### 1.250 -sub init_agi { 1.251 - while(<STDIN>) { 1.252 - chomp; 1.253 - last unless length($_); 1.254 - if (/^agi_(\w+)\:\s+(.*)$/) { 1.255 - $AGI{$1} = $2; 1.256 - } 1.257 - } 1.258 -} 1.259 - 1.260 -############ ascii2num ############# 1.261 -# Removes 48 to get a number out # 1.262 -# of the asciss return # 1.263 -#################################### 1.264 -sub ascii2num { 1.265 - my ($asc) = @_; 1.266 - my $ret; 1.267 - $ret = $asc - 48; 1.268 - return $ret; 1.269 -} 1.270 - 1.271 - 1.272 -########### Welcome ############### 1.273 -# This is the welcome menu # 1.274 -# # 1.275 -#################################### 1.276 -sub welcome { 1.277 - my $ret = 0; 1.278 - $ret = &send_file("welcome"); 1.279 - if ($ret == 0) { 1.280 - $ret = &send_file("for-wakeup-call"); 1.281 - } 1.282 - if ($ret == 0) { 1.283 - $ret = &send_file("press-1"); 1.284 - } 1.285 - if ($ret == 0) { 1.286 - $ret = &send_file("for-a-list-of"); 1.287 - } 1.288 - if ($ret == 0) { 1.289 - $ret = &send_file("or"); 1.290 - } 1.291 - if ($ret == 0) { 1.292 - $ret = &send_file("to-cancel-wakeup"); 1.293 - } 1.294 - if ($ret != 0) { 1.295 - $ret = &ascii2num($ret); 1.296 - } 1.297 - if ($ret == 0) { 1.298 - $ret = &get_data("press-2",1); 1.299 - } 1.300 - if ($ret == 1) { 1.301 - $ret = &schedule_new(); 1.302 - } elsif ($ret == 2) { 1.303 - &manage_calls(); 1.304 - } else { 1.305 - $ret = &send_file("goodbye"); 1.306 - } 1.307 -} 1.308 - 1.309 -######### manage_calls ############# 1.310 -# This is what is called if you # 1.311 -# want to manage already scheduled # 1.312 -# wakeup calls # 1.313 -#################################### 1.314 - 1.315 -sub manage_calls { 1.316 - my $checker = "false"; 1.317 - my @calls; 1.318 - my $del; 1.319 - #my $ret; 1.320 - my $hours; 1.321 - my $minutes; 1.322 - # Send out a welcome message and ask for return 1.323 - @calls = &check_outstanding_calls($AGI{callerid}); 1.324 - if ($#calls + 1 == 0) { 1.325 - $del = &send_file("not-rqsted-wakeup"); 1.326 - $del = &send_file("goodbye"); 1.327 - } else { 1.328 - foreach (@calls) { 1.329 - $del = 0; 1.330 - my $wakefile = $_; 1.331 - my @wakeup = split /\./, $_; 1.332 - my $time = $wakeup[0]; 1.333 - $_ = $time; 1.334 - /(^[0-9][0-9])/; 1.335 - my $hours = $1; 1.336 - /^[0-9][0-9]([0-9][0-9])/; 1.337 - my $minutes = $1; 1.338 - $del = &send_file("rqsted-wakeup-for"); 1.339 - if ($del == 0) { 1.340 - $del = &say_number($hours); 1.341 - } 1.342 - if ($del == 0) { 1.343 - if ($minutes >= 10 ) { 1.344 - $del = &say_number($minutes); 1.345 - } elsif ($minutes > 0 && $minutes < 10) { 1.346 - $del = &send_file("digits/oh"); 1.347 - $del = &say_number($minutes); 1.348 - } 1.349 - } 1.350 - if ($del == 0) { 1.351 - $del = &send_file("digits/oclock"); 1.352 - } 1.353 - if ($del == 0) { 1.354 - $del = &send_file("to-cancel-wakeup"); 1.355 - } 1.356 - if ($del == 0) { 1.357 - $del = &send_file("press-1"); 1.358 - } 1.359 - if ($del == 0) { 1.360 - $del = &send_file("otherwise-press"); 1.361 - } 1.362 - if ($del != 0) { 1.363 - $del = &ascii2num($del); 1.364 - } 1.365 - if ($del == 0) { 1.366 - $del = &get_data("digits/2",1); 1.367 - } 1.368 - if ($del == 1) { 1.369 - my @sysargs = ("rm", "-f", "$WAKEDIR/$wakefile", "$OUTDIR/$wakefile"); 1.370 - system(@sysargs) == 0 1.371 - or die "system @sysargs failed: $?"; 1.372 - $del = &send_file("cancelled"); 1.373 - } 1.374 - } 1.375 - $del = &send_file("goodbye"); 1.376 - } 1.377 - 1.378 -} 1.379 - 1.380 -######## schedule_new ############## 1.381 -# This is the menu to schedule a # 1.382 -# a new wakeup call # 1.383 -#################################### 1.384 -sub schedule_new { 1.385 - my $checker = "false"; 1.386 - my $ret_var; 1.387 - my $ret_dummy = 0; 1.388 - my $time; 1.389 - my $perm; 1.390 - my $file; 1.391 - my $calltype; 1.392 - my $extension; 1.393 - my $context; 1.394 - my $hours; 1.395 - my $minutes; 1.396 - if ($DEBUG == 1 ) { 1.397 - print DEBUGOUT "From schedule_new\n"; 1.398 - } 1.399 - while ( $checker eq "false" ) { 1.400 - $ret_var = &send_file("to-rqst-wakeup-call"); 1.401 - if ($ret_var != 0) { 1.402 - my $tmp = &get_data("silence/1",3); 1.403 - $ret_var = &ascii2num($ret_var); 1.404 - $ret_var = $ret_var . $tmp; 1.405 - } else { 1.406 - $ret_var = &get_data("enter-a-time",4); 1.407 - } 1.408 -# if ($ret_var < 1300 && $ret_var >= 0100) { 1.409 -# my $pm = &get_data("1-for-am-2-for-pm",1); 1.410 -# if ($pm == 2 && $ret_var <= 1159) { 1.411 -# $ret_var = $ret_var + 1200; 1.412 -# $checker = "true"; 1.413 -# } elsif ($pm == 1 && $ret_var > 1159) { 1.414 -# $ret_var = $ret_var - 1200; 1.415 -# # Fix the zero 1.416 -# $ret_var = "00" . $ret_var; 1.417 -# $checker = "true"; 1.418 -# } else { 1.419 -# $checker = "true"; 1.420 -# } 1.421 -# } elsif ($ret_var > 2359) { 1.422 -# $ret_dummy = &send_file("please-try-again"); 1.423 -# } else { 1.424 -# $checker = "true"; 1.425 -# } 1.426 - if ($ret_var > 2359) { 1.427 - $ret_dummy = &send_file("please-try-again"); 1.428 - } else { 1.429 - $checker = "true"; 1.430 - } 1.431 - } 1.432 - $perm = 0; 1.433 - $perm = &send_file("wakeup-for-one-time"); 1.434 - if ($perm == 0) { 1.435 - $perm = &send_file("press-1"); 1.436 - } 1.437 - if ($perm == 0) { 1.438 - $perm = &send_file("for-a-daily-wakeup-call"); 1.439 - } 1.440 - if ($perm != 0) { 1.441 - $perm = &ascii2num($perm); 1.442 - } 1.443 - if ($perm == 0) { 1.444 - $perm = $perm = &get_data("press-2",1); 1.445 - } 1.446 - # Open the file and populate it with data 1.447 - $extension = $AGI{callerid}; 1.448 - $context = $AGI{context}; 1.449 - if ($perm == 2) { 1.450 - $file = "$WAKEDIR/$ret_var.perm.1.$extension.call"; 1.451 - $calltype = "perm"; 1.452 - open (CALL, '>', $file) or die "Cannot open call file for write :$!"; 1.453 - } else { 1.454 - $file = "$WAKEDIR/$ret_var.temp.1.$extension.call"; 1.455 - $calltype = "temp"; 1.456 - open (CALL, '>', $file) or die "Cannot open call file for write :$!"; 1.457 - } 1.458 - my $myprint = "channel: Local" . "/" . $extension . "@" . $context . "\n"; 1.459 - print CALL $myprint; 1.460 - print CALL "maxretries: 3\n"; 1.461 - print CALL "retrytime: 60\n"; 1.462 - print CALL "waittime: 60\n"; 1.463 - print CALL "callerid: \"AsterPBX Weckruf\" <$AGI{extension}>\n"; 1.464 - print CALL "application: AGI\n"; 1.465 - print CALL "data: wakeup|$ret_var.$calltype.1.$extension.call\n"; 1.466 - close ($CALL); 1.467 - # Now touch the file 1.468 - # Get the time variable 1.469 - $time = get_time_string($ret_var); 1.470 - my @command = ("$TOUCH", "-t", "$time", "${file}"); 1.471 - system(@command) == 0 1.472 - or die "system @command failed: $?"; 1.473 - # Move it to the OUT directory 1.474 - my @command = ("mv", "${file}", "${OUTDIR}/"); 1.475 - system(@command) == 0 1.476 - or die "system @command failed: $?"; 1.477 - 1.478 - # Stream out the wakeup 1.479 - $_ = $ret_var; 1.480 - /(^[0-9][0-9])/; 1.481 - my $hours = $1; 1.482 - /^[0-9][0-9]([0-9][0-9])/; 1.483 - my $minutes = $1; 1.484 - $ret_dummy = &send_file("rqsted-wakeup-for"); 1.485 - $ret_dummy = &say_number($hours); 1.486 - if ($minutes >= 10 ) { 1.487 - &say_number($minutes); 1.488 - } elsif ($minutes > 0 && $minutes < 10) { 1.489 - &send_file("digits/oh"); 1.490 - &say_number($minutes); 1.491 - } 1.492 - $ret_dummy = &send_file("digits/oclock"); 1.493 - $ret_dummy = &send_file("goodbye"); 1.494 - return $ret_var; 1.495 -} 1.496 - 1.497 -######## get_time_string ########### 1.498 -# This will return the time string # 1.499 -# when inputing a string like # 1.500 -# hhmi # 1.501 -#################################### 1.502 -sub get_time_string { 1.503 - my ($intime) = @_; 1.504 - my $minutes = substr($intime, 2, 4); 1.505 - my $hours = substr($intime, 0, 2); 1.506 - my $tmpepoch; 1.507 - my $day; 1.508 - my $month; 1.509 - my $ret_val; 1.510 - my $epoch = time(); 1.511 - my @timedata = localtime($epoch); 1.512 - # Insert the minutes and hours from input 1.513 - $timedata[1] = $minutes; 1.514 - $timedata[2] = $hours; 1.515 - # Get tmpepoch 1.516 - $tmpepoch = timelocal(@timedata); 1.517 - #Now compare them 1.518 - if ($tmpepoch < $epoch) { # Means it is tomorrow 1.519 - $tmpepoch += 86400; # Add 24 hours 1.520 - } 1.521 - # Now get the new timedata 1.522 - my @timedata = localtime($tmpepoch); 1.523 - $minutes = $timedata[1]; 1.524 - $hours = $timedata[2]; 1.525 - $day = $timedata[3]; 1.526 - $month = $timedata[4] + 1; 1.527 - #Correct the "First hour after midnight" problem 1.528 - if ($minutes < 10) { 1.529 - $minutes = "0" . $minutes; 1.530 - } 1.531 - if ($hours < 10) { 1.532 - $hours = "0" . $hours; 1.533 - } 1.534 - if ($day < 10) { 1.535 - $day = "0" . $day; 1.536 - } 1.537 - if ($month < 10) { 1.538 - $month = "0" . $month; 1.539 - } 1.540 - $ret_val = $month . $day . $hours . $minutes; 1.541 - return $ret_val; 1.542 -} 1.543 - 1.544 -############ new_time ############## 1.545 -# This will return the time string # 1.546 -# with a time set 10 minute into # 1.547 -# the future # 1.548 -# The string is # 1.549 -# MMDDhhmi # 1.550 -#################################### 1.551 -sub new_time { 1.552 - my ($input) = @_; 1.553 - my @timedata; 1.554 - my $minutes; 1.555 - my $hours; 1.556 - my $day; 1.557 - my $month; 1.558 - my $ret_val; 1.559 - my $epoc = time(); 1.560 - if ($input eq "10m") { 1.561 - # add 10 minutes 1.562 - $epoc += 600; 1.563 - #$epoc += 120; #just for debugs 1.564 - } else { 1.565 - # add 24 hours 1.566 - $epoc += 86400; 1.567 - } 1.568 - @timedata = localtime($epoc); 1.569 - $minutes = $timedata[1]; 1.570 - $hours = $timedata[2]; 1.571 - $day = $timedata[3]; 1.572 - $month = $timedata[4] + 1; 1.573 - #Correct the "First hour after midnight" problem 1.574 - if ($minutes < 10) { 1.575 - $minutes = "0" . $minutes; 1.576 - } 1.577 - if ($hours < 10) { 1.578 - $hours = "0" . $hours; 1.579 - } 1.580 - if ($day < 10) { 1.581 - $day = "0" . $day; 1.582 - } 1.583 - if ($month < 10) { 1.584 - $month = "0" . $month; 1.585 - } 1.586 - $ret_val = $month . $day . $hours . $minutes; 1.587 - return $ret_val; 1.588 -} 1.589 - 1.590 -########### snooze ################ 1.591 -# This is the menu to snooze the # 1.592 -# wakeup call # 1.593 -#################################### 1.594 -sub snooze { 1.595 - my ($oldfile) = @_; 1.596 - my $newfile; 1.597 - my $extension; 1.598 - my $context; 1.599 - my @filestore = split (/\./, $oldfile); 1.600 - my @permstore = split (/\./, $oldfile); 1.601 - my $time; 1.602 - my $ret_var = 0; 1.603 - my $ret_dummy; 1.604 - my $myprint; 1.605 - # Answer the channel 1.606 - &answer(); 1.607 - # Is this a reoccuring call, then add 24h 1.608 - if ($permstore[1] eq "perm") { 1.609 - $permstore[2] += 1; #Just to get a new file name 1.610 - $newfile = join(".",@permstore); 1.611 - $extension = $AGI{extension}; 1.612 - $context = $AGI{context}; 1.613 - # Open the file 1.614 - open (CALL, '>', "${WAKEDIR}/${newfile}") or die "Cannot open call file for write :$!"; 1.615 - $myprint = "channel: Local" . "/" . $extension . "@" . $context . "\n"; 1.616 - print CALL $myprint; 1.617 - print CALL "maxretries: 3\n"; 1.618 - print CALL "retrytime: 60\n"; 1.619 - print CALL "waittime: 60\n"; 1.620 - print CALL "callerid: \"AsterPBX Weckruf\" <$AGI{callerid}>\n"; 1.621 - print CALL "application: AGI\n"; 1.622 - print CALL "data: wakeup|$newfile\n"; 1.623 - close ($CALL); 1.624 - # Get a time 24h from now 1.625 - $time = &new_time("24h"); 1.626 - # Touch the file with the new time 1.627 - my @command = ("$TOUCH", "-t", "$time", "${WAKEDIR}/${newfile}"); 1.628 - system(@command) == 0 1.629 - or die "system @command failed: $?"; 1.630 - # Now move it 1.631 - my @command = ("mv", "${WAKEDIR}/${newfile}", "${OUTDIR}/${newfile}"); 1.632 - system(@command) == 0 1.633 - or die "system @command failed: $?"; 1.634 - } 1.635 - #Replace the file name time with snooze 1.636 - $filestore[1] = "snooze"; 1.637 - # Also add 10 minutes to the name 1.638 - $time = new_time("10m"); 1.639 - $filestore[0] = substr($time, 4, 8); 1.640 - # Get the new file name 1.641 - $newfile = join(".",@filestore); 1.642 - $ret_var = &send_file("this-is-yr-wakeup-call"); 1.643 - if ($ret_var == 0 ) { 1.644 - $ret_var = &send_file("to-confirm-wakeup"); 1.645 - } 1.646 - if ($ret_var == 0 ) { 1.647 - $ret_var = &send_file("press-1"); 1.648 - } 1.649 - if ($ret_var == 0 ) { 1.650 - $ret_var = &send_file("to-snooze-for"); 1.651 - } 1.652 - if ($ret_var == 0 ) { 1.653 - $ret_var = &send_file("digits/10"); 1.654 - } 1.655 - if ($ret_var == 0 ) { 1.656 - $ret_var = &send_file("minutes"); 1.657 - } 1.658 - if ($ret_var != 0 ) { 1.659 - $ret_var = &ascii2num($ret_var); 1.660 - } 1.661 - if ($ret_var == 0 ) { 1.662 - $ret_var = &get_data("press-2",1); 1.663 - } 1.664 - if ($ret_var == 2 ) { 1.665 - # Populate some variables 1.666 - $time = &new_time("10m"); 1.667 - $extension = $AGI{extension}; 1.668 - $context = $AGI{context}; 1.669 - # Open the file 1.670 - open (CALL, '>', "${WAKEDIR}/${newfile}") or die "Cannot open call file for write :$!"; 1.671 - $myprint = "channel: Local" . "/" . $extension . "@" . $context . "\n"; 1.672 - print CALL $myprint; 1.673 - print CALL "maxretries: 3\n"; 1.674 - print CALL "retrytime: 60\n"; 1.675 - print CALL "waittime: 60\n"; 1.676 - print CALL "callerid: \"AsterPBX Weckruf\" <$AGI{callerid}>\n"; 1.677 - print CALL "application: AGI\n"; 1.678 - print CALL "data: wakeup|$newfile\n"; 1.679 - close ($CALL); 1.680 - # Touch the file with the new time 1.681 - my @command = ("$TOUCH", "-t", "$time", "${WAKEDIR}/${newfile}"); 1.682 - system(@command) == 0 1.683 - or die "system @command failed: $?"; 1.684 - # Now move it 1.685 - my @command = ("mv", "${WAKEDIR}/${newfile}", "${OUTDIR}/${newfile}"); 1.686 - system(@command) == 0 1.687 - or die "system @command failed: $?"; 1.688 - $ret_dummy = &send_file("goodbye"); 1.689 - 1.690 - } elsif ($ret_var == 1) { 1.691 - $ret_dummy = &send_file("goodbye"); 1.692 - } else { 1.693 - $ret_dummy = &send_file("goodbye"); 1.694 - } 1.695 - 1.696 - # Stream out the wakeup 1.697 - return 0; 1.698 -} 1.699 - 1.700 -########### main program ########### 1.701 -# Here goes the main program # 1.702 -# # 1.703 -#################################### 1.704 - 1.705 -my $numargs = $#ARGV + 1; 1.706 -if ($DEBUG == 1) { 1.707 - open (DEBUGOUT, '>', $debugfile) or die "Cannot open $debugfile for write :$!"; 1.708 -} 1.709 - 1.710 -# Start by reading in the stuff Asterisk is sending 1.711 -&init_agi(); # Comment out in case of debug outside Asterisk 1.712 - 1.713 -# If DEBUG is set, dump the AGI variable 1.714 -if ($DEBUG == 1) { 1.715 - foreach my $i (sort keys %AGI) { 1.716 - print DEBUGOUT " -- $i = $AGI{$i}\n"; 1.717 - } 1.718 -} 1.719 - 1.720 -if ( $numargs == 0 ) { 1.721 - &welcome(); 1.722 - &hangup(); 1.723 - exit(0); 1.724 -} elsif ( $ARGV[0] eq "move" ) { 1.725 - &move(); 1.726 - &hangup(); 1.727 - exit(0); 1.728 -} else { 1.729 - &snooze($ARGV[0]); 1.730 - &hangup(); 1.731 - exit(0); 1.732 -} 1.733 - 1.734 -if ($DEBUG ==1) { 1.735 - close $DEBUGOUT; 1.736 -}