asteriskで、特定曜日・特定時間内で、マッチさせる場合は、GotoIftimeを使うけれど、
どうも、第2週の日曜とか第1週の土曜とか、特定の第?週の設定ができなかったので、AGIでスクリプトを書いてみた。
下記スクリプトのgetweek.phpは、
第1土曜 18:00~
第2日曜 終日
第3土曜 18:00~
第4日曜 終日
にマッチするようにしてます。マッチしたら1を環境変数RETUにセット。
マッチしなかったら0をセット。
あとは、extensions.confでGotoIfで特定条件に飛ばせばOK。
意外と使えると思う。
●extensions.conf ------------------------------------------------------------------------ exten => s,n,AGI(getweek.php) exten => s,n,NoOp(${RETU}) exten => s,n,GotoIf($[${RETU} = 1]?holiday) ;; week2/4 holiday ------------------------------------------------------------------------ ●getweek.php ------------------------------------------------------------------------ #!/usr/bin/php -q < ?php require('phpagi.php'); /* 0:sun 1:mon 2:tue 3:wed 4:thu 5:fri 6:sat */ $year = date("y"); $month = date("m"); $day = date("d"); $hour = date("G"); $min = date("i"); /* debug */ /* $year = 2012; $month = 7; $day = 8; $hour = 1; $min = 0; */ $wday = date("w", mktime(0, 0, 0, $month, $day, $year) ); $time = mktime(0, 0, 0, $month, 1, $year); $w1day = date("w", $time); $weekno = (int)(($day + $w1day - 1) / 7); /* echo $time."\n"; echo $weekno." weeks.\n"; */ /* echo $day." day.\n"; echo $wday." wday.\n"; echo $hour." hour.\n"; echo $min." min.\n"; */ /*******************************************/ /* 2nd & 4th week **************************/ /*******************************************/ /* 1st sat */ if( ($weekno==0) && ($wday==6) && ($hour>=18) ) { $agi = new AGI(); $r = $agi->set_variable("RETU","1"); if ($r["result"] == 0) { exit(1); } exit(0); } /* 2nd sun */ elseif( ($weekno==1) && ($wday==0) ) { $agi = new AGI(); $r = $agi->set_variable("RETU","1"); if ($r["result"] == 0) { exit(1); } exit(0); } /* 3rd sat */ elseif( ($weekno==2) && ($wday==6) && ($hour>=18) ) { $agi = new AGI(); $r = $agi->set_variable("RETU","1"); if ($r["result"] == 0) { exit(1); } exit(0); } /* 4th sun */ elseif( ($weekno==3) && ($wday==0) ) { $agi = new AGI(); $r = $agi->set_variable("RETU","1"); if ($r["result"] == 0) { exit(1); } exit(0); } /* no match */ else { $agi = new AGI(); $r = $agi->set_variable("RETU","0"); if ($r["result"] == 0) { exit(1); } exit(0); } ?> ------------------------------------------------------------------------