RaspberryPiを利用した勤怠打刻システムからSlackへのリアルタイム通知
RaspberryPiを利用した勤怠打刻システムからSlackへのリアルタイム通知方法を説明する。
目次
RaspberryPiを利用した勤怠打刻システムからSlackへのリアルタイム通知
- 概要
- システム構成
- 打刻用画面(タッチパネル)
- Slack側設定
- AWS Lambda設定
- AWS API Gateway設定
- 打刻機からAPI Gatewayに対してPOSTできるように実装
- 動作確認(Slack側への通知)
1.概要
RaspberryPiを利用した勤怠打刻システムを開発し、ICカードタッチした際にSlackへリアルタイム通知を行う仕組みをAWSを利用して実装した。
その仕組みおよび実装内容を記載する。
2.システム構成
RaspberryPiに電源投入すると、自動起動で打刻用プログラムが起動する。
「出勤」もしくは「退勤」ボタンをタッチパネルで選択し、ICカードをタッチする事で打刻が完了する。
ICカード情報(IDm)からユーザを特定し、勤怠打刻ファイルに追記した後にAWS(API Gateway)にWebAPIリクエストする事で、
Lambdaが起動しリアルタイムにSlackに通知する。
3.打刻用画面(タッチパネル)
4.Slack側設定
Slackにアプリケーション追加
Slackに対してアプリケーションを追加する。「Create New App」を押下する。
App Nameに適当なアプリケーション名を設定し、Development Slack Workspaceにインストール先のワークスペースを選択する。
Bot User設定
Bot User設定で、「Add a Bot User」ボタンを押下し以下のように設定する。
Installed App
「Installed App」で「Install App to Workspace」ボタンを押下する。
5.AWS Lambda設定
ソースコード
サービスからLambdaの関数を選択し作成する。ソースコードは以下の通り。
【ソースコード】
import json
import os
import urllib.request
def lambda_handler(event, context):
_Postchannel="XXXXXXXXXX"
#
# 入力チェック処理(省略)
#
post_message_to_channel(_Postchannel, event.get("data"))
return "OK"
def post_message_to_channel(channel, message):
url = "https://slack.com/api/chat.postMessage"
headers = {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer {0}".format(os.environ["SLACK_BOT_USER_ACCESS_TOKEN"])
}
data = {
"token": os.environ["SLACK_BOT_VERIFY_TOKEN"],
"channel": channel,
"text": message,
}
req = urllib.request.Request(url, data=json.dumps(data).encode("utf-8"), method="POST", headers=headers)
try:
with urllib.request.urlopen(req) as res:
body = res.read()
except urllib.error.HTTPError as err:
print(err.code)
return "NG"
except urllib.error.URLError as err:
print(err.reason)
return "NG"
Lambdaの環境変数設定
Lambdaの環境変数として以下を設定する。
SLACK_BOT_USER_ACCESS_TOKEN=SlackのBot User OAuth Access Tokenの値
SLACK_BOT_VERIFY_TOKEN =SlackのVerification Tokenの値
6.AWS API Gateway設定
Lambdaの設定としてAPI Gatewayをトリガーとして追加する。
メソッドをPOSTのみ可能とし、不要なメソッド(ANY等)は削除しておく。
APIをprod環境にデプロイする。
APIエンドポイントが打刻機からPOSTするURLとなる。
7.打刻機からAPI Gatewayに対してPOSTできるように実装
打刻機から、以下のリクエストができるようにプログラムを実装。
curl -X POST -H "Content-Type: application/json" -d '{"channel":"XXXXXXXX","data":"a_tarou, Leaving, 2019-6-17 21:13:24"}' https://XXXXXXXXXXXXXXXXXXX.amazonaws.com/prod/timerec
※POSTでJSONデータを送付している
※POSTするデータはファイル追記するデータと同一
8.動作確認(Slack側への通知)
打刻機にICカードをかざすと以下のような形式でSlackにリアルタイム通知される。