(著者:サイボウズ 大竹 遼)
Index
概要
こちらの記事は「池澤あやかの 体験!スマートワークテクノロジー 第9回」の特別企画となります。
池澤あやかさんより「kintoneをつかって目覚しシステムを作って欲しい」と 無茶振り お願いされたので作成しました。
依頼内容としては、
- kintoneに登録した日時に目覚しが起動する
- 目覚し音が鳴り、部屋の電気が点く
- MESHを100回振らないと目覚しが止まらない
- 目覚しを止めると、今日の往訪先の情報がスマホに届く
といったものです。なかなかヘビーですね^^;
使ったサービス
たくさんサービスを利用しています。オールスター大集合みたいです。
- kintone (無償の開発者ライセンスが利用できます!)
- IFTTT
- MESH
- Philips Hue
- Garoon
- LINE
- Slack
- AWS (Lambda)
構成
依頼内容のままだと流石に複雑なので、少し整理 (&自分が作りやすいように変更) して、
- kintoneの「目覚しアプリ」にレコード登録すると、IFTTTへイベントを送る
- IFTTTからMESHへイベントを送る
- MESHからLED (Philips Hue) とスマホのスピーカーを操作する
- MESHの動きタグを100回振ると目覚し音を停止してkintoneの「起床確認アプリ」へレコード登録する
- kintoneの「起床確認アプリ」のWebhookでAWS Lambdaを起動する
- LambdaからGaroonのスケジュールと「ToDoアプリ」のデータを取得する
- LambdaからLINEとSlackへデータを送信する
といった流れにしてみました。
実際の動き (デモ)
目覚しアプリに起こしたいユーザーを登録してレコード登録すると、IFTTT経由でMESH側が起動して目覚し音がなり、LEDが赤く点灯します。
MESHの動きタグを10回振る(100回はさすがに辛いのでデモでは10回で設定しています)と目覚し音が止まり、LEDがやさしくなり、LINEとSlackにそれぞれToDoと今日の予定が通知されます。
※ 音声が再生されます。音量にはご注意ください。
動画では見にくいですが、SlackとLINEに送られるメッセージは以下のようになっています。
kintoneの設定
目覚しアプリ (トリガー用), 起床確認アプリ (Webhook用), ToDoアプリ の3つのアプリを用意します。
目覚しアプリ
この目覚しシステムが起動するきっかけとなるアプリです。
アプリの構成
使用フィールドは以下となります。
フィールド名 | フィールドタイプ | フィールドコード |
---|---|---|
起こしたい人 |
ユーザー選択 |
UserName |
作成日時 |
作成日時 |
CreateTime |
フィールド自体はシンプルです。
JavaScriptカスタマイズ
IFTTTへPOSTするためにJavaScriptカスタマイズを実装します。
ユーザー選択フィールドに登録したユーザー情報(code)をPOSTするようにします。
起床確認アプリ
MESHからレコードが登録され、WebhookでAWS Lambdaを起動するアプリです。
※ アプリの通知で「新規レコード時に通知」と設定すれば、いつ起きたか通知ですぐにわかるようになります。
アプリの構成
フィールド名 | フィールドタイプ | フィールドコード |
---|---|---|
起きた人 |
ユーザー選択 |
UserName |
作成日時 |
作成日時 |
CreateTime |
※ 目覚しアプリとほとんど同じです
Webhookの設定
こちらのアプリには、Webhookの設定で 「レコードの追加」にチェックを入れ、AWS Lambda (API Gateway)のURLを記載してください。
ToDoアプリ
LINEへ通知したい内容が保存されているアプリです。(今回はToDoアプリとしました)
アプリの構成
フィールド名 | フィールドタイプ | フィールドコード |
---|---|---|
ToDo名 |
文字列(1行) |
To_Do |
担当者 |
ユーザー選択 |
Assignees |
優先度 |
ドロップダウン |
Priority |
締切日 |
日付 |
Duedate |
各サービスの設定
さすがに1つずつ説明すると記事がかなり長くなってしまうので、ポイントだけ説明します。
IFTTT
「Webhookでイベントを受け取ったら、MESHへイベントを送信する」仕組みを作っておきます。
このとき、Webhookイベントで受け取った「Value1」をMESHへ渡すようにすることで、
kintoneからPOSTされたユーザー情報をそのままMESHへ渡すことができるようになります。
MESH
アプリ上で「タグ」と呼ばれるブロックを組み合わせてプログラミングを行うのですが、
MESHには連携タグとして「IFTTTタグ」や「Philips Hueタグ」が元々存在しているので、今回はそちらも利用します。
IFTTTタグの設定でユーザーIDを指定することで、自身のレコード登録のみに反応するようになります。
タグの構成は以下のようにしました。
※ kintoneタグは残念ながら存在しないため、カスタムタグとしてレコード登録用のタグを自作する必要があります。
※ kintoneタグのプログラム(JSONファイル)は GitHub で公開しています。
スピーカーの音量をMAXに設定するとかなりうるさいです。Philips Hueの光量をMAXに設定するとかなり眩しいです。
Philips Hue
MESHアプリ上で操作が可能なため、割愛。
Garoon
Garoonに登録された予定を取得するようにしました。Lambda上でGETするだけなので割愛。
LINE
LINE Messaging API を使ったBotを作成しておきます。アクセストークンとuser IDをメモしておいてください。
※ reply Message を利用する方法もあります。
Slack
Slack Incoming Webhook を設定し、Webhook URLをメモしておいてください。
AWS (Lambda)
kintone(起床確認アプリ) からのWebhookをトリガーに、
- Garoon への GET
- kintone (ToDoアプリ) への GET
- LINE への POST
- Slack への POST
を行うプログラムをLambdaに記述しています。 今回は Serverless Framework を用いて、コマンドライン上でさくっとAWS環境を構築しました。
※ 設定ファイル(.yml)や実行プログラムは GitHub で公開しています。
kintone (ToDoアプリ) のレコード取得処理
ToDoアプリのレコードを取得して、makeTextメソッドでいい感じに見た目を整えています。
Garoonのスケジュール情報取得処理
Garoonのスケジュールを取得する場合、まず「GaroonのユーザID」を用意する必要があるため、
L39のgetGaroonUserIdメソッドでkintoneから受け取ったユーザー情報を利用してGaroonのユーザーIDを取得しています。
そして、そのIDを用いてGaroonのスケジュールを取得し、makeTextメソッドでいい感じに見た目を整えています。
LINEのメッセージ送信処理
L10にアクセストークンを、L17にuser IDを指定しています。 (Lambdaの環境変数に設定しています)
Slackのメッセージ送信処理
L6にWebhook URLを指定しています。(Lambdaの環境変数に設定しています)
おわりに
ただただ大変でした^^; 4Tips分くらいの量を作った気がします。
今回は 作りやすさ重視 わかりやすさ重視でMESHアプリやLambdaをフル活用しましたが、
kintoneのJavaScriptカスタマイズを用いればkintoneがハブとなってさまざまなサービスと連携することも可能です!(kintoneのJavaScriptカスタマイズとは こちら)
少しでもkintoneの可能性を感じてもらえたら嬉しいです!!
興味を持っていただけたら、開発者ライセンス を取得して チュートリアル をやってみてください。
このTipsは、2019年4月版 kintoneで確認したものになります。
記事に関するフィードバック
直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。