こんにちは。デジタルビジネス推進室の高松です。
前回ご紹介したIoTボタンについて、「作り方を教えてほしい」という話を頂いたので、ご紹介します。
構成について
始めに、アイスボタンの構成を記載しておきます。
AWS IoT 1-ClickからLambdaを呼び出し、REST経由でメッセージ投稿用のIM-LogicDesignerを呼び出す仕組みです。
それでは作り方を見ていきましょう。
まずはエンタープライズボタンを購入
何はともあれ、エンタープライズボタンを購入しましょう。
間違えて普通のダッシュボタンを買ってしまわないように。。
AWS IoT 1-Clickの設定
ボタンが手元に届いたら、「IoT 1-Click」にデバイス登録をしましょう。
「エンタープライズボタン」で検索すれば、デバイス登録からサンプルのLambda実行まで解説しているサイトがいくつかあるので、そちらを参考にしてください。
この時、自作のボタンラベルに張り替えるとテンションが上がるかもしれません。
元のラベルは、少し固いですが、カッターの先などではがすことができます。
ロジデザの作成
まずは、REST経由でIMBoxにメッセージ投稿できるロジデザを作りましょう。
フローは以下のような簡単なものになります。
投稿先とメッセージ内容は、RESTで設定できるようにしたいので、下記のように入出力設定をします。
「グループボックスに投稿」タスクをダブルクリックし、下記のようにマッピングします。
次に、作成したフローのルーティング設定を行います。
POSTでRESTを受けるように設定します。
ゲストユーザに認可をつけます。
本当はきちんと認証した方がいいのですが、メッセージ投稿しかできないアプリなので、認証なしにしています。
これで、REST経由で任意のIMBoxスレッドにメッセージを投稿できるアプリができました。
Lambdaの作成
次に、作成したロジデザを呼び出すLambdaを作成しましょう。
ランタイムはPython3.6としました。
ソースは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import requests import json POST_URL = "https://hogehoge.jp/imart/logic/api/xxxxx" headers = {'content-type': 'application/json'} print('Loading function') def lambda_handler(event, context): clickType = event['deviceEvent']['buttonClicked']['clickType'] if clickType == "SINGLE": message = event['placementInfo']['attributes']['message'] elif clickType == "DOUBLE" or "LONG": message = event['placementInfo']['attributes']['messageL'] payload_json = { "userCd": event['placementInfo']['attributes']['userCd'], "threadId": event['placementInfo']['attributes']['threadId'], "boxCd": event['placementInfo']['attributes']['boxCd'], "message": message } #print(payload_json) res = requests.post(POST_URL, data=json.dumps(payload_json), headers=headers) return res.status_code |
LambdaでPythonのrequestsを使うためには、requestsモジュールを実行ファイルと一緒にzipでアップロードする必要があります。
方法については、こちらも検索すると色々出てきますので、割愛します。
ロジデザに渡すIMBoxの投稿先やメッセージ内容は、Lambda内にハードコードせず、IoT 1-Clickの「プレイスメント」から指定するようにしました。
(ただ、正直テストしにくくなるので、最初はLambdaにハードコードでいいと思います。)
プレイスメントの設定
ボタンからサンプルのLambdaを実行できるようになったら、今回のメッセージ送信用にプレイスメント設定をしましょう。
サンプルで作ったプロジェクトを使いまわしても、新しくプロジェクトを作り直しても構いません。
各項目の説明は以下です。
userCd:メッセージ投稿をするintra-martのユーザID
boxCd:メッセージ投稿先のIM-BoxのboxCd(後述)
threadId:メッセージ投稿先のIM-BoxのthreadId(後述)
message:ボタン押下時のメッセージ(シングルクリック)
messageL:ボタン押下時のメッセージ(ダブルクリックor長押し)
userCdとboxCdは、以下のように設定します。
メッセージ投稿先のスレッドを開いて確認してください。
動作確認
すべて設定できたら、ボタンを押して動作確認しましょう。
シングルクリックと、ダブルクリック(または長押し)でメッセージが変わるようにしています。
最後に
LambdaやIoT 1-Clickもさることながら、IM-LogicDesignerも、非常に簡単にREST APIを作ることができるところをご覧頂けたかと思います。
今回はメッセージ投稿でしたが、同じ要領で、スケジュール登録やワークフロー申請も行うことができます。
ぜひ、参考に面白い機能を作って頂けますと幸いです。