#これがあればだいたいできます
webserver+php+postgreSQL、よく使うのはPHPの正規表現、あとjavascriptを少しです。あとはSlackでCustom Integrationが使えること。
#PostgresにDB・Tableを用意
勤怠登録用と有給管理、カレンダーマスタくらいがあるとおk
運用にもよりますが、今の会社ではフレックスの予実管理と、遅刻早退管理、週休日、在宅などが管理されているので、なかなか大きいテーブルになってしまいました。
#Slackに勤怠専用のChannelを作成する
勤怠に関する入力は全てここに書き込む
私の社内ではtimesheetというChannelに登録してもらうことにしています。
朝の感じ↓(たまたま朝早い日でした)
#SlackのOutgoingWebhacksで入力された言葉をページに送る
Customize Slack→Configure Apps→Custom Integrationsでこのページまでたどり着きます。
#phpで勤怠コマンドに合致するものかどうかを判断させる
大体コマンドとしては20個位・・・
#コマンドに応じてDBへ登録
とりあえずPOSTされた言葉をキャッチして、
// 受信文字列取得mainmethod
if($_POST["user_name"] != "slackbot"){
$rcvtext = $_POST["text"];
$rcvtext = mb_convert_kana($rcvtext,'a');//「全角」英数字を「半角」に変換
$rcvtext = str_replace(':',':',$rcvtext);//「全角」:を「半角」に変換
$rcvtext = str_replace('/','/',$rcvtext);//「全角」/を「半角」に変換
//どのコマンドか判別する
$analyzetext = analyzeCommand($_POST["user_name"],$rcvtext);
的なところから判別メソッドに飛ばす。
ここから怒涛のpreg_match()祭りである。
連休指定用に2つの日付の判別、フレックス用に2つの時刻の判別、稼働日かどうかの判別など・・・。
様々なコマンド判定・日時の判定をクリアし、Insert、Updateをぶちかましていく。
#結果をSlackのIncomingWebhacksで返す
Webhook URLを生成して、送信時のURLに指定する
こんな感じである。
// [Webhook URL]欄に表示されているURL
$webhook_url ='https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX';
// Slackに投稿するメッセージ
$msg = array(
'username' => $username,
'text' => "<@".$_POST["user_name"]."> ".$analyzetext,
'icon_url' => $icon_url);
$msg = json_encode($msg);
$msg = 'payload=' . urlencode($msg);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $webhook_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $msg);
curl_exec($ch);
curl_close($ch);
}
送信できると、名前の後ろにAPPと書いてあるBotチックなやつ(ちゃんと指定してるけど)が返信したように見える。
コマンドに引っかからなかった場合は、どこかしらのAIBotさんに返信を代わりにお願いしています。
#最終的にBIツールの勤怠ダッシュボードを作成して可視化
うわっ…私の勤務時間、足りなすぎ…?(入力してないだけと言う可能性も微レ存)
こちらを参考にさせて頂きました。
チャットで勤怠管理する「みやもとさん」をリリースしました
http://blog.masuidrive.jp/2014/10/19/miyamoto-san/