(著者:サイボウズ 三宅 智子)
概要
Google Home と Node-RED と kintone を使って、イベントスケジュールを音声で自動アナウンスするプログラムを実装します。
※ Node.js 環境が必要です。
シナリオ
kintone に登録しているイベントのタイムテーブルデータを一定時間おきにチェックして、今から10分後までに始まるセッションを Google Home でお知らせします。
- 10分後までに始まるセッションがある場合は、そのセッション名をお知らせ
- 10分後までに始まるセッションがない場合は、その他のコンテンツをお知らせ
Node-RED とは
ハードウェアデバイス、APIおよびオンラインサービスを接続するためのツールです。
ブラウザベースのエディタによってパレットに並ぶ多種多様なノードを結びつけて簡単にフローを作成でき、さらにシングルクリックで実行環境にデプロイすることができます。
Rasberry Pi や Arduino などのデバイス、IBM Cloud や AWS や Azure などのクラウドサービス上に立てることもできますが、今回はローカルにインストールして実行します。
(Node-RED サイトより一部抜粋)
kintone アプリ作成
イベントのタイムテーブルを登録するための kintone アプリ(セッション管理アプリ)を作成します。
- 以下のフィールドを配置したアプリを作成します
フィールドタイプ フィールド名 フィールドコード 日付 日付 date 時刻 開始 startTime 時刻 終了 endTime 文字列(一行) セッション名 sessionName - サブドメイン名 と アプリID をメモしておきます(後ほど Node-RED 内で指定します)
例)https://{subdomain}.cybozu.com/k/xxx/ ←アプリIDはxxxの部分の数字です - いくつかテスト用にレコードを追加しておきます
これで kintone の設定は完了です。
Google Home アプリのインストールと設定
次は、Google Home を使うための初期設定です。
公式サイト等に手順が載っているので、参考にしながら進めてください。
- 電源ケーブルをGoogle Homeに差し込みます
- 電源アダプターをコンセントに差し込みます
- スマートフォンやタブレットでGoogle Homeアプリをダウンロードして開きます
- Google Home との接続設定をします
- 設定が完了したら、アプリ内のデバイスメニューより、今回使いたい Google Home を選択し、右上の「・・・」をクリックして、最下部の IPアドレス を確認しメモしておきます
後ほど Node-RED でデバイス指定をする時に利用します
※ アプリで言語設定を日本語に変更するのを忘れずに。
Node-RED の設定
続いて、処理フローを定義する Node-RED をインストールし、設定します。
ここでは Mac OSX での手順のみ記載します。Windows の方は別途ドキュメントサイトをご確認ください。
(参考:Node-RED User Group Japan のドキュメント)
事前準備
ローカル環境に Node-RED をインストールするためにはサポートされている Node.js のバージョンが必要です。
- Node をインストールします
(参考:Node.js のインストールガイド(macOS)) - 日付処理のための Moment.js をインストールします
(参考:Moment.js サイト)
Node-RED のインストール
- ターミナルより、npm によってインストールします
(参考:ローカルでNode-REDを実行する)
- node-red コマンドを使って Node-RED を起動します。
※ Ctrl-C もしくは、ターミナルウィンドウを閉じることで Node-RED を停止することができます
Node-RED エディタでフロー構築
- ブラウザで http://localhost:1880 を指定することで Node-RED エディタにアクセスします
- 右上の「≡」をクリックして、「パレットの管理」を選択します
- 「ノードを追加」タブをクリックして、以下3つのノードを追加します
追加すると、エディタ左のノードメニューから選択できるようになります
node-red-contrib-kintone (1.0.2) node-red-contrib-function-npm (0.3.0) node-red-contrib-cast (0.2.8) - エディタ左のノードメニューから右へドラッグ&ドロップして、フローを作成します
それぞれ以下の通り設定してください
ノード ノード名 詳細設定 inject RepeatExecution ペイロード:日時
☑︎Node-RED 起動後 0.1秒後、以下を行う
繰り返し:指定した時間間隔(10分)
名前:RepeatExecutionkintone GetSessions 名前:GetSessions
設定:鉛筆マークをクリックして以下を指定
名前:Config
ドメイン:×××.cybozu.com
ログイン名:ご自身のものを指定
パスワード:ご自身のものを指定
Basic認証:(必要あれば指定)
メソッド:GET
アプリID:事前に作成したkintone アプリの「アプリID」を入力
クエリ:date = TODAY()debug msg.payload ー function npm GetNextSessions ✏︎:GetNextSessions
🔧:後述の GetNextSessions.js を入力
🔁:1debug msg.payload ー cast PlayGoogleHome IP:Google Home アプリで確認した IPアドレスを指定(検索マークをクリック)
Port:8009
language:ja
Name:PlayGoogleHome
▼ GetNextSessions.js(function npm ノードに入力)
- 右上の「デプロイ」ボタンをクリックして、環境にデプロイします
動作確認
デプロイできたら、「RepeatExecutionノード」の左横の角ブロックをクリックして実行します。
Google Home からの発話があれば成功です!
右側のデバッグマークをクリックすると、実行結果を表示しながらデバッグすることも可能です。
おわりに
Node-RED のタイムスタンプを使うことで、Google Home へのプッシュ通知を可能にしているのがこの Tips のポイントです!
今回はローカルで実行していますが、色んなイベントで使い回すことを考えると、移行が楽な Docker や AWS などのクラウド上で実行環境を整えるのが便利です。
ぜひ他の方法でもチャレンジしてみてください。
本Tipsは、2019年7月時点の kintone と Google Chrome ブラウザで確認したものになります。
IBM Cloud 環境で実行できるようにのせ換えてみました。
https://qiita.com/Mikei/items/be33784039c61d5cb773