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);
}
?>
------------------------------------------------------------------------