Openclose.agi

From KlavoWiki
Revision as of 11:38, 24 October 2011 by David (Sọ̀rọ̀ | contribs)
Jump to navigationJump to search

The AGI script will information the caller if the office is:

open
closed
public holiday

If the office is open the the recption phone will ring.
If the office is closed it will information the caller office is open between what hours and go to message bank.
If it is a public holiday user will be information office is closed because of a public holiday and go to message bank.

/var/lib/asterisk/agi-bin/openclose.agi

#!/bin/sh
#
# Done by Alex Lopez (alex.lopez (at) O p s y s (dot) com)
# You may need to change the if/than logic depending on OS and Shell implementation.
#
TODAY=`date +%d%m%y`
#
DAY=`date +%a`
HOUR=`date +%H`
MINUTE=`date +%M`
TIMENOW=$HOUR$MINUTE
#
OPEN=0900
CLOSE=1700
#
#
STATUS=closed
#
case "$TODAY" in
  250408 ) STATUS=holiday;; # Anzac Day
  050508 ) STATUS=holiday;; # Labour Day
  090608 ) STATUS=holiday;; # Queens Birthday
  130808 ) STATUS=holiday;; # Show Day
  251208 ) STATUS=holiday;; # Christmas Day
  261208 ) STATUS=holiday;; # Boxing Day
  010109 ) STATUS=holiday;; # New Years Day
  260109 ) STATUS=holiday;; # Australia Day
  100409 ) STATUS=holiday;; # Good Friday
  130409 ) STATUS=holiday;; # Easter Monday
  250409 ) STATUS=holiday;; # Anzac Day
  040509 ) STATUS=holiday;; # Labour Day
  080609 ) STATUS=holiday;; # Queens Birthday
  120809 ) STATUS=holiday;; # Show Day
  251209 ) STATUS=holiday;; # Christmas Day
  010110 ) STATUS=holiday;; # New Years Day
esac
#
if  test "$STATUS" != "holiday" -a \
    "$DAY" != "Sat" -a \
    "$DAY" != "Sun" -a \
    "$TIMENOW" -gt "$OPEN" -a \
    "$TIMENOW" -lt "$CLOSE"
then
  STATUS=open
fi
#
#
echo "SET VARIABLE status $STATUS"
echo "SET VARIABLE open $OPEN"
echo "SET VARIABLE close $CLOSE"
[reception]
exten => s,1,Set(TIMEOUT(digit)=2)
exten => s,n,Set(TIMEOUT(response)=3)
exten => s,n,AGI(openclose.agi)					; check whether the office is open/closed/holiday by running external script
exten => s,n,GotoIf($[${STATUS} = open]?open:checkholiday)

exten => s,n(checkholiday),Ringing				; run if not open
exten => s,n,Wait(2)
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n,Background(thankyou)				; Welcome Message
exten => s,n,GotoIf($[${STATUS} = holiday]?holiday:closed)	; check if office is closed/holiday
exten => s,n,Hangup

exten => s,n(holiday),Background(public-holiday)	; run if office is on holiday
exten => s,n,Goto(end)

exten => s,n(closed),Background(office-closed)		; run if office is closed
exten => s,n,Goto(end)

exten => s,n(open),Dial(${RECEPTION},20,t)		; run if office is open, ring reception and kitchen only.
exten => s,n(CheckMessage),Background(busy)
exten => s,n,Background(intergraph/reception-busy)

exten => s,n(end),Background(directory-or-message)	; ask user if they want to query directory
exten => s,n,Waitexten

exten => 1,1,Directory(default|internal)		; voicemail.conf context | context to pass numbers to (4 digit ext numbers)

exten => i,1,Playback(invalid)
exten => i,n,Goto(s,end)

exten => t,1,Voicemail(u1201@default)
exten => t,n,HangUp