AWS IoT エンタープライズボタンでSlackに勤怠連絡する
はじめに
こちらの投稿内容をやってみたかったのでチャレンジしました。
会社が休みになるボタンを作ってみた [Amazon Dash Button]
https://qiita.com/diescake/items/d4e1fb2dccc2fd4c92d8
AWS IoT エンタープライズボタンではクリックの情報を取得できます。
クリックのタイプに応じてSlackへの投稿内容を変えてみたいと思います。
クリックイベント
ボタンをクリックすると以下のようなイベントが発行され、登録したLambda関数が実行されます。
{
"deviceInfo": {
"deviceId": "G030PMXXXXXXXXXX",
"type": "button",
"remainingLife": 99.3,
"attributes": {
"projectRegion": "ap-northeast-1",
"projectName": "sample-project",
"placementName": "Sample-Placement",
"deviceTemplateName": "SampleRequest"
}
},
"deviceEvent": {
"buttonClicked": {
"clickType": "SINGLE",
"reportedTime": "2018-05-17T16:48:33.804Z"
}
},
"placementInfo": {
"projectName": "Sample-Project",
"placementName": "Sample-Placement",
"attributes": {
"key": "value"
},
"devices": {
"Sample-Request": "G030PMXXXXXXXXXX"
}
}
}
clickType は
1 click で SINGLE
2 click で DOUBLE
長押しで LONG に変わります。
Lambda側でこの値を参照すれば、ボタンの押し方によって処理を変えることができます。
結果イメージ
1 Clickで午前半休
2 Clickで午後半休
長押しで全休 です。
1つのボタンで想定通り3パターン対応できました。
輝くアプリ(APP)の3文字。。。Webhookなので同然なんですけどね。。
Lambda関数
ひよコードですが、ご容赦ください
環境変数で WEBHOOK_URL と USER_NAME を設定します。
import json
import os
import logging
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
webhook_url = os.environ['WEBHOOK_URL']
user_name = os.environ['USER_NAME']
click_type = event['deviceEvent']['buttonClicked']['clickType']
if click_type == "SINGLE":
oyasumi_type = "午前半休"
elif click_type == "DOUBLE":
oyasumi_type = "午後半休"
elif click_type == "LONG":
oyasumi_type = "全休"
slack_message = {
'username': user_name,
'icon_emoji': ':face_with_thermometer:',
'text': '本日' + event['placementInfo']['attributes']['reason'] + 'のため、' + oyasumi_type + 'とさせてください。'
}
req = Request(webhook_url, json.dumps(slack_message).encode('utf-8'))
try:
response = urlopen(req)
response.read()
logger.info("Message posted.")
except HTTPError as e:
logger.error("Request failed: %d %s", e.code, e.reason)
except URLError as e:
logger.error("Server connection failed: %s", e.reason)
event['deviceEvent']['buttonClicked']['clickType'] でクリックタイプを
event['placementInfo']['attributes']['reason']でプレイスメント属性に設定した値を取得します。
プレイスメント属性にはAWS IoT 1-Click側でお休みをいただく理由を設定します。
理由を増やすにはボタンを追加購入しないと。。
テンプレートとプレイスメントの設定
ボタンの登録等、事前準備についてはこちらも参照いただければと思います。
AWS IoT 1-Click と IoT エンタープライズボタンのセットアップ&動作確認
https://qiita.com/hayao_k/items/d36d4b2579d0bbbe21a9
新しい AWS IoT 1-Click プロジェクトを作成します。
デバイステンプレートのアクションには上記のLambda関数を指定します。
プレイスメント属性に reason を設定し、プロジェクトを作成します。
新しいプレイスメントの作成で、デバイスを選択してプレイスメントを作成すれば設定完了です。
デバイス管理画面からイベントを参照をすると、実際のクリックタイプを確認することもできます。
以上です。
参考になれば幸いです。
Author And Source
この問題について(AWS IoT エンタープライズボタンでSlackに勤怠連絡する), 我々は、より多くの情報をここで見つけました https://qiita.com/hayao_k/items/0a8b3197ae7b2595ea10著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .