[Asterisk-Users] after hours - is this logic ok ?

Lance Arbuckle asterisk at arbuckle.org
Wed Dec 31 11:54:21 MST 2003

Ok, first off, Asterisk is the coolest piece of software I have EVER had
the pleasure of using in my 8 years of running linux !! and I know I
haven't even scratched the surface feature wise.

Before I get too excited, I wanted to get all you experts to look at the
how I implemented my after hours test.  The goal is to prevent the phone
from ringing afer certain hours, just go to VM.

Bacically, when a call comes from the PSTN, I use these includes to
either set a key in the DB or not.

include => day|8:00-21:00|mon-fri|*|*
include => day|9:00-21:00|sat-sun|*|*
; if we're not open, we're closed
include => night

exten => s,2,DBput(FEATURE/DAY=yes)  
exten => s,3,Goto(s,10) 

exten => s,2,NoOp
exten => s,3,Goto(s,10)

And then in my stdexten macro, I test for the existence of the key in
the database.  If the key exists, it must be daytime so delete the key
and allow the calls to ring the extension.  If the key does not exist,
it must be night and since we don't want the phones to ring we jump to
the unavailable VM.  I've tested this and it works as I expect but my
only concern is how this would hold up in a busy environment where many
calls are being processed.  Could one asterisk thread delete the
database key before another thread had gotton the oportunity to test for
the key ?

exten => s,1,NoOp
< other testing crap deleted >
exten => s,10,DBget(foo=FEATURE/DAY)    ; is it day time ?
exten => s,11,DBdel(FEATURE/DAY)        ; yes, delete the key
exten => s,12,Goto(s,201)               ; and ring the phone
exten => s,111,Goto(s,204)              ; no, goto uVM

exten => s,201,answer
exten => s,202,Playback(transfer,skip)
exten => s,203,Dial(${ARG2},5)          ; Ring the interface, 20 seconds
exten => s,204,Voicemail(u${ARG1})      ; If unavailable, send to
voicemail w/ unavail announce
exten => s,205,Playback(vm-goodbye)   
exten => s,206,Wait(1)
exten => s,207,Hangup
exten => s,304,Voicemail(b${ARG1})      ; If busy, send to voicemail w/
busy announce
exten => s,305,Playback(vm-goodbye)
exten => s,306,Wait(1)
exten => s,307,Hangup

  /V\    Lance C. Arbuckle
 // \\   
/(   )\  

More information about the asterisk-users mailing list