Google Home から音声で Google Fit にアクティビティを追加する1(Firebase・IFTTT 編)
Google Home から IFTTT、Firebase 経由で◯◯するという記事はすでにいくつかありますが、仕様変更のためか動かなかった部分があったりしたので自分なりにまとめてみました。
以下の記事を参考にさせてもらいました m( )m
できるようになること
Google Home に「OK グーグル!健康体操を開始して!」と「OK グーグル!健康体操を終了して!」と話かけると、Google Fit に健康体操を実施した記録を作成してくれます。
構成
利用するものはすべて無料です。
Firebase は、保存可能なデータ量やダウンロード量などに制限がありますが、個人で Google Home と連携するという目的で使うのみであれば、無料枠で十分です。
詳しくは、Firebase 料金 を参照してください。
やることの流れ
Firebase プロジェクト作成
Firebase コンソール を開き、プロジェクトを作成します。
Firebase - Realtime Database の設定
Realtime Database はスキーマレスのデータベースのため、スキーマ定義は不要です。
ただし、認証やバリデートの設定は必要になります。
認証をはしょっている記事が多かったですが、これをしないと誰でもなんでも書き込めるようになってしまいます。
パス & データ構造
今回は、データを以下の形式で格納することとしました。
/google-fit/log/{createdAt に基づくユニークキー}
キー | 必須 | 型 | 長さ | 値 |
---|---|---|---|---|
text | ◯ | String | 1-100 文字 | Google Home への会話から取得した値 |
ルールの作成
Firebase コンソール の該当プロジェクトを開き、Database
-> ルール
を開き、以下を設定
{ "rules": { // データの読み込みは node.js などの admin 用ライブラリからのみ許可 ".read": false, // データ書き込みは認証済みユーザのみ許可 ".write": "auth != null", "google-fit": { "log": { // text フィールドは必須、String 型、1-100 文字 "$key": { ".validate": "newData.hasChildren(['text'])", "text": { ".validate": "newData.isString() && newData.val().length > 0 && newData.val().length < 101" } } } } } }
ルールの細かい設定は、以下のページが参考になりました。
シュミレータ
Firebase コンソールのルールの設定ページにあるシュミレータを利用すると、データに対しどのバリデートルールで OK/NG となるかを確認することができます。
ルールのテストに便利です。
Firebase アプリケーションのシークレット取得
[データベース設定]ページ にアクセスしシークレットを控えておきます。
curl で確認
SECRET=【上記で取得した値】 curl -X POST -d '{ "text": "開始" }' \ -H "Content-type: application/json" \ https://refined-byte-188701.firebaseio.com/google-fit/log.json?auth=$SECRET -i
200 OK で name
として作成したデータのキーが返却されれば成功です。
HTTP/1.1 200 OK Server: nginx Date: Sat, 16 Dec 2017 03:53:20 GMT Content-Type: application/json; charset=utf-8 Content-Length: 31 Connection: keep-alive Access-Control-Allow-Origin: * Cache-Control: no-cache Strict-Transport-Security: max-age=31556926; includeSubDomains; preload {"name":"-L0SS5zDUhHS_XXUeJr3"}
Firebase コンソールの データ
タブで登録したデータを確認することができます。
IFTTT の設定
New Applet を選択。
this
をクリックして Google Assistant を選択します。
すると、トリガー選択画面になるので、Say a simple phrase
を選択します。
「開始」用のトリガーを作成します。
that
をクリックして Webhooks を選択します。
すると、トリガー選択画面になるので、Make a web request
を選択します。
以上で、「開始」用の Applet 作成は完了です。 同様に「開始」を「終了」に変更してもう1つ Applet を作成します。
Google Assistant のトリガーで Say a phrase with a text ingredient
を選択すると Google Home に話しかけたテキストを利用することができます。
これを利用して1つの Applet で「開始」「停止」を声から取得する方法もありますが、話しかけ方によって「開始を」や「の開始」など予期しないデータが入ったりするので、今回は使用しませんでした。
Google Home から動作確認
Google Home に向かって「ねぇ Google、健康体操を開始して」「ねぇ Google、健康体操を終了して」とはなしかけてみて、Firebase コンソールでデータがそれぞれ登録されていれば OK です。
次は、express アプリを作成して、Firebase の読み込みや Google Fit への登録を行っていきます。 Google Home から音声で Google Fit にアクティビティを追加する2(nodejs・Google Fit 編)