*

勤怠管理システムにAkerunを組み込んでみた

      2017/07/07

どうも、デジタルクエストのヒヨコエンジニアのyokoです。
以前、Google Apps Script(以下、GAS)、Chatwork、Spreadsheetを連携させて勤怠システム作りました。
今回は、さらにそこへAkerunを絡めていったお話です。

ちなみにAkerunをご存知無いかたのために軽く説明しますと…
NFCカードをリーダーにかざすとドアが解錠されるよ!
ってやつです。

詳しくは本家をどうぞ
https://akerun.com/

Akerun APIとの連携

Akerunから情報を取得するまでの、私の実装をご紹介します。

Akerun APIの仕様
https://photosynth-inc.github.io/

流れとしては以下になります。
①Akerunへ申請
②認証コードの取得
③Access Tokenの取得
④開閉履歴取得APIの実行

詳細は下記ドキュメントを参照
https://photosynth-inc.github.io/start.html

①Akerunへ申請

ドキュメントの記載どおりに申請します

②認証コードの取得

ここは自動化頑張ろうと思いましたが、WebのformにID/Passを入力して情報を得る形式なので断念。
手動で(正規のルートで)認証コードを取得しました。

③Access Tokenの取得

こちらは単純にHTTPリクエストを送るだけなのでGASで実装しました。

ちなみに実際にはスプレッドシートへ各パラメータを設定して、そこから設定値を取得、レスポンスも所定のセルへ書き出すようにしていますが…
そのロジックだとコードがわかりにくいので、ログでレスポンスを確認するというシンプルな形を記載します。

※①で送られてきたクライアントIDとクライアントシークレット、②で取得した認証コードを使用します。

本来はredirect_urlに設定したところへ結果が届くのでしょうが、今回はredirect_urlは適当なものでもレスポンスがそのまま返ってきたので結果オーライでした。

なんでredirect_urlが適当だったかと言うと、Google Apps ScriptだとCallbackの受け口作るのがめんどくさくて…

④開閉履歴取得APIの実行

こちらもGASで実装。

yyyy-mm-dd hh:mi:ssの部分は、時間を設定します。
-9時間していますが、PHPやGASから通信だとタイムゾーン指定が伝わらないようでUTC扱いになってしまうらしく、いったんJST換算するために行っています。
アクセストークンをリクエストヘッダに仕込むのは、ドキュメントには特に記載ありませんが、このやり方でもいけるそうです。
あとはレスポンスを解析して、必要な情報を記録していく感じになります。

組み込みの概要

弊社では既に不肖yokoが作成した勤怠システムが動いており、Chatwork上での勤怠連絡と、Akerunからの勤怠を並行に運用させ、下記のようなフローをとっています。
now
①Chatworkに情報を取りに行く
②ログファイルへ記入
③ログの情報から勤怠の記録を行う
④記録完了をユーザへ告知

ここへAkerunを連携させて下記のようなフローにしています。
akerun
①Chatworkに情報を取りに行く
②ログファイルへ記入
③Akeruへ情報を取りに行く
④ログファイルへ記入
⑤ログの情報から勤怠の記録を行う
⑥記録完了をユーザへ告知

元々の②と③の間にAkeruの処理が加わっただけですね。
⑤の部分で、既にその日の出勤がされていたら、Akerun側の記録はスルーする感じにしていたり細かい部分の対応をしています。

ざっくり以上になります。
実際に動いているのはこんな感じになってます。
出勤風景

パルプン太くん(bot)が通知しているのがAkerunでの出勤、その他の人が投稿しているのが
Chatworkでの勤怠連絡となっています。

Chatwork上での投稿から、Akerunでの入退室情報だけで勤怠が記録されるなんて…
なかなか楽ちんでオススメです!

  • このエントリーをはてなブックマークに追加


  関連記事

digitalquest_icon
SPAJAM2016 東京D予選に出てみた話 – 事前準備編 –

SPAJAM2016 東京D予選に行ってきました。 SPAJAM2016と言うの …

Androidアプリの自動デプロイフロー
Circle CIとDeployGateでAndroidアプリを自動デプロイ

CIの導入に乗り遅れているデジタルクエストでも、いい加減、便利なんだから使おうと …

DigitalQuest
オフィス移転のご報告

本日5/23より、株式会社デジタルクエストは新オフィスにて営業を開始しております …

1
Storyboardを使ってContainerView+PageViewのサンプルを作ってみた

概要 横スクロールするメニュー+メニューに連動してメインビューが切り替わる、 S …

digitalquest_icon
NAT Gatewayを使って、ELB+AutoScalling下のVPC-EC2のアウトバウンドIPを固定化してみた。

弊社サービスの3bkは外部サービス連携を幾つかしています。 そのうちの一つがアク …

girl-1076998_1920
結局わたしでしょ?♡

Hi!ミシェルさんです 😀   サービスの企画とかUXについての意見て …

amazon_icon
【速報】PHP7をAmazon Linuxに早速入れてみて、5.6とのベンチマークを取ってみた。

PHP7が11年ぶりに正式リリースされたそうなので、早速試してみたです速報。 試 …

AWS_CloudFormation-200x200
手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱 CloudFormationの使い方をマスターする

DQには実はインフラ専任のエンジニアは居ません。 案件担当のエンジニアがインフラ …

AWS_CloudFormation-200x200
手軽にインフラ環境構築の自動化を実現する(したい) 其ノ弐 CloudFormationでAurora環境を構築してみる。

前回(手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱)の続きです。 …

amazon_icon
手軽にインフラ環境構築の自動化を実現する(したい) 其ノ参 CloudFormationでCodeDeploy設定を自動構築してみる。

前々回(手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱)の続きです。 …