47
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Slackで勤怠管理して可視化する

Last updated at Posted at 2018-04-13

#これがあればだいたいできます
webserver+php+postgreSQL、よく使うのはPHPの正規表現、あとjavascriptを少しです。あとはSlackでCustom Integrationが使えること。

#PostgresにDB・Tableを用意
勤怠登録用と有給管理、カレンダーマスタくらいがあるとおk
運用にもよりますが、今の会社ではフレックスの予実管理と、遅刻早退管理、週休日、在宅などが管理されているので、なかなか大きいテーブルになってしまいました。

ちなみに勤怠登録用のテーブル定義です。
image.png

#Slackに勤怠専用のChannelを作成する
勤怠に関する入力は全てここに書き込む
私の社内ではtimesheetというChannelに登録してもらうことにしています。
朝の感じ↓(たまたま朝早い日でした)
image.png

#SlackのOutgoingWebhacksで入力された言葉をページに送る
Customize Slack→Configure Apps→Custom Integrationsでこのページまでたどり着きます。
image.png

特にトリガーは設定せず、全てを受け口のphpに送信する
image.png

#phpで勤怠コマンドに合致するものかどうかを判断させる
大体コマンドとしては20個位・・・
image.png

#コマンドに応じてDBへ登録
とりあえずPOSTされた言葉をキャッチして、

worktime.php
// 受信文字列取得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に指定する
image.png

こんな感じである。

worktime.php

        // [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チックなやつ(ちゃんと指定してるけど)が返信したように見える。
image.png

コマンドに引っかからなかった場合は、どこかしらのAIBotさんに返信を代わりにお願いしています。

#最終的にBIツールの勤怠ダッシュボードを作成して可視化
うわっ…私の勤務時間、足りなすぎ…?(入力してないだけと言う可能性も微レ存)

image.png

こちらを参考にさせて頂きました。

チャットで勤怠管理する「みやもとさん」をリリースしました
http://blog.masuidrive.jp/2014/10/19/miyamoto-san/

47
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?