前々から触ってみたかったAWS IoTボタンをついに購入した。
Amazonで2500円で販売している。Dash buttonが500円だったので、やや割高に感じる。
Amazon.co.jp: AWS IoT エンタープライズボタン – IoT をシンプルに。
先日Slack Incoming Webhookを使ってSlackに通知する技術を会得したので、今度は出勤・退勤時にこのボタンを押てSlackに通知するようにしたら、タイムカードみたいに使えて便利じゃないかな?と思って作ってみた。
ソースコード
koirand/slack-timeclock: Lambda function to use AWS 1-click button as an timeclock button.
ボタンをクリックすると出勤、ダブルクリックすると退勤の通知が飛ぶ。便利。
ところでタイムカードは英語圏ではどう呼んでいるんだろうか、TimeClockとしてみたけど通じるのか若干不安がある。たぶん通じるはず。
AWS Lambda Function
LambdaはGo言語にも対応しているので今回もGoで書いてみた。またLambdaは環境変数をセットできるので、SlackのWebhook URLは環境変数に設定することにした。 ビルドとデプロイは以下のようにやって、できたzipをLambdaにアップロード。
GOOS=linux GOARCH=amd64 go build
zip slack-timeclock.zip slack-timeclock
AWS IoT1-Click
IoTボタンの設定はスマホでやるのが簡単だった。
AWS IoT 1-Click モバイルアプリ - AWS IoT 1-Click
ボタンを押したときのアクションは、Eメールを送信、SMSを送信、Lambda関数を実行の3つから選べる。デバイスを登録してWifiに繋いだあと、プロジェクトを作成してLambda関数を選択すれば連携される。プレイスメントというところで、デバイスごとに異なる属性を設定することができる。今回は自分の名前を設定して、Slackのメッセージに名前が組み込まれるようにしてみた。
こうすることで、他の人用にもう一つボタンを用意した際に、Lambda関数は同じものを使用して、属性だけ変えれば済む。
ちなみに、このIoTボタンはAWSと8443ポートで通信するらしい。会社のFWでポートが閉じられている場合は穴あけしないと使えないので注意。
シングルクリック、ダブルクリックの判別
シングルクリックかダブルクリックかの判別方法が公式のドキュメントを読んでも良くわからなかった。AWS難しい。試行錯誤の末、下記を参考にしてうまくいった。
追記 2020/04/26
その後少し改良して、アプリからではなくて自分のアカウントから出退勤のメッセージが投稿されるようにした。こんなかんじ。
自分のアカウントからメッセージを投稿するためには、Webhook URLを叩くだけのアプリではなくて、OAuthに対応したアプリを作らないといけないのでやや面倒くさいが、既存のアプリのトークンを使い回すことで楽ができる。
自分は、slackcat というアプリを使った。
slackcatはターミナルなどからSlackに投稿できるCLIツール。
このアプリをPCにインストール後、slackcat --configure
を実行してSlackのワークスペースで認可すると、~/.slackcat
にトークンが保管されるのでそのトークンを使って、メッセージを投稿するコードを書けばOK。