カテゴリー内の他の記事

kintoneにいろいろなサービスを組み合わせて目覚しシステムを作る 〜池澤あやかさんからの指令〜

フォローする

(著者:サイボウズ 大竹 遼) 

Index

概要

こちらの記事は「池澤あやかの 体験!スマートワークテクノロジー 第9回」の特別企画となります。

Ikeaya.jpg

池澤あやかさんより「kintoneをつかって目覚しシステムを作って欲しい」と 無茶振り お願いされたので作成しました。

依頼内容としては、

  • kintoneに登録した日時に目覚しが起動する
  • 目覚し音が鳴り、部屋の電気が点く
  • MESHを100回振らないと目覚しが止まらない
  • 目覚しを止めると、今日の往訪先の情報がスマホに届く

といったものです。なかなかヘビーですね^^; 

使ったサービス

たくさんサービスを利用しています。オールスター大集合みたいです。

構成

diagram.png

依頼内容のままだと流石に複雑なので、少し整理 (&自分が作りやすいように変更) して、

  • 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に送られるメッセージは以下のようになっています。

Slack-LINE.png

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へイベントを送信する」仕組みを作っておきます。

__________2019-04-17_15.37.46.png

このとき、Webhookイベントで受け取った「Value1」をMESHへ渡すようにすることで、
kintoneからPOSTされたユーザー情報をそのままMESHへ渡すことができるようになります。

MESH

アプリ上で「タグ」と呼ばれるブロックを組み合わせてプログラミングを行うのですが、
MESHには連携タグとして「IFTTTタグ」や「Philips Hueタグ」が元々存在しているので、今回はそちらも利用します。

mesh_conf.png

IFTTTタグの設定でユーザーIDを指定することで、自身のレコード登録のみに反応するようになります。

タグの構成は以下のようにしました。

mesh.png

※ 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 コミュニティをご活用ください。

ログインしてコメントを残してください。