asteriskで第1週日曜日などをマッチさせる方法。

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


?>
------------------------------------------------------------------------

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*