この記事は、スマートスピーカー Advent Calendar 2020 の 5日目の記事です。
内容は、IFTTT に関する話題と、スマートスピーカー・AIアシスタントに関する話題を組み合わせたネタです。
いろいろと話題になった、IFTTT の有償プランと無償プランの制限の話題。
これについて公式の情報を調べてこの記事の前半部分にしようかと、その構成で当初は書き進めていました。しかし、その部分自体の分量が多くなってしまったので、その内容は下記の記事へと分割。
(そして、ちょうどネタ的にぴったりな NoCode のアドベントカレンダーの 5日目が空いてたので、分けた記事はそちらに登録もしつつ)
●【NoCode 2020】 IFTTT Pro の新機能 3つ(クエリー・フィルター・複数のアクションの実行)の内容をチェックしてみる! - Qiita
https://qiita.com/youtoy/items/a5e70c1dbf1c78eb94fa
IFTTT Pro の詳細は別記事に分けた上記に譲って、この記事ではスマートスピーカー・AIアシスタントと IFTTT の話、そして IFTTT Pro と組み合わせる話が中心になるように書いていきます。
IFTTT と AIアシスタント
今回の記事の登録先のアドベントカレンダーのテーマは「スマートスピーカー(または、AIアシスタントや VUI全般)」。それらに関わる IFTTT の連携機能について、Alexa連携・Google Assistant連携が用意されています。
この話は Qiita でも多くの記事が書かれていて、例えば以下などがあります。
- Google Assistant関連
- Alexa関連
上記の記事の中身を比較したり、実際に使ってみると分かってくる部分なのですが、 IFTTT の Alexa連携と Google Assistant連携には大きな違いがあります。
そこで、まずは IFTTT Pro の新機能の話に入る前に、IFTTT における Alexa・Google Assistant連携のそれぞれの違いについて、ざっくりと見ていきます(ずいぶん前に、ちょこちょこ試してみてたのですが、久しぶりにまた触ってみます)。
IFTTT での Alexa と Google Assistant の機能の違い
トリガーの数
まずは、トリガーとして選択できる内容を比べてみます(2020/12/5現在の情報になります)。
以下の「If This」を選択して追加できる内容についてです。
数が圧倒的に違います。
これらの差について、この後で少し補足します。
何らかフレーズをしゃべって利用する場合
「OK Google」、「Alexa」といった、ウェイクワードの後に、何らかのフレーズをしゃべって使う事例で、比較をしてみます。
では、トリガーで Alexa、Google Assistant をそれぞれ選んで、その画面を比べてみます。
Google Assistant のほうは、「特定のフレーズを含む場合」や「特定のフレーズと何らかの数値を含む場合」といった、フレーズ+α の内容を利用することができます。
一方 Alexa のほうは、特定のフレーズを指定する内容のみで、上記のような数字を含む内容の場合、といった指定はできません。それと、Google Assistant の場合と異なり、「Alexa」というウェイクワードの他に「トリガー」というキーワードも含めてしゃべる必要があります。
トリガーにできる内容
上記の「何らかフレーズをしゃべって利用する場合」については、Google Assistant のほうが高機能でした。
しかし、トリガーとして選択できるものの比較をした際、圧倒的な数の差がありました。これは何でしょうか?
Alexa のほうが勝る部分は、トリガーとして利用できる内容のバリエーションです。
上記の内容を見ていくと、To Do リスト・ショッピングリストといったものとの連携や、アラーム・タイマーとの連携があります。そのような、AIアシスタントで利用できる機能をトリガーにできる、という部分が、大きな違いとなります。
この後に、両方のパターンを動作させている動画(を引用したツイート)を掲載していますので、具体的な動作についてはそれらをご覧ください。
IFTTT と AIシスタントの組み合わせを実際に試してみる
ここでは、「IFTTT と AIシスタントの組み合わせをとりあえず試した」という感じのものが、実際に動いている様子を掲載しています。
それに関して少し補足すると、アドベントカレンダーの担当日の午前中、Noodl と M5Stack・UIFlow を組み合わせたハンズオンに参加して作った以下の作品ができあがりました。この作品を作っていて、少し手を加えたら今回の記事用に使えそうだと思い、IFTTT と AIアシスタントの組み合わせた仕組みを組み込んだものを作りました。
Alexa・Google Assistant の両方をそれぞれ連携させてみたので、ご覧ください。
まず以下は、ハンズオンで作った AIアシスタントが絡まない作品の動作の様子です。
#M5Stack_Core2 のボタンを押すと、 #Noodl 上のサンタが飛び出したり隠れたり。
— you (@youtoy) December 5, 2020
そして、そのサンタをポチッと押すと、 #M5Stack 側につながった LED が光って、Noodl上のツリーもピカッと。#Noodlもくもく会 #UIFlow pic.twitter.com/pvTkKjsqpd
Alexa
まず、以下で動作している様子をご覧ください。
shiftr の HTTP Interface を活用。
— you (@youtoy) December 5, 2020
IFTTT を組み合わせて、 #M5Stack + #UIFlow から #Noodl につないでいた部分を、Alexa からつなぐようにできた!
トリガーというキーワードが入るのは、IFTTT を使ったことによる仕様です。#Noodlもくもく会 pic.twitter.com/6lAt67SpT2
この後に出てくる Google Assistant についても同様なのですが、トリガーに対するアクションで設定しているのは Webhook です。これを用いて、AIアシスタントに話しかけた動作を、インターネット経由で外に伝え、その先にある shiftr.io というサービスを介して、上記のサンタのイラストが飛び出たり・引っ込んだり、という動作をしている部分とつなげています。
アプレットは2つ作っており、それぞれのトリガーの部分は「Say a specific phrase」で「ハローサンタ」・「バイバイサンタ」というキーワードを指定しています。Alexa の場合は、それを使う際には「トリガー」というキーワードを含めてしゃべる必要があります(動画の中で「Alexa、ハローサンタ トリガー」等としゃべっているのが分かると思います)。
Google Assistant
まず、以下で動作している様子をご覧ください。
shiftr の HTTP Interface の活用、その2。
— you (@youtoy) December 5, 2020
IFTTT を組み合わせて、 #M5Stack + #UIFlow から #Noodl につないでいた部分を、Alexa からつなぐように変えてみた部分を、
今度は Googleアシスタントからつなぐように変更してみた!#Noodlもくもく会 pic.twitter.com/TkWmIDQ0Kx
こちらもアプレットは2つ作っており、それぞれのトリガーの部分は「Say a simple phrase」で「ハローサンタ」・「バイバイサンタ」というキーワードを指定しています。Alexa の場合と異なり、「トリガー」といった特別なキーワードを一緒に使う、ということは行わなくて大丈夫です。
IFTTT Pro の新機能「クエリー・フィルター」と AIアシスタント
ここまで、 IFTTT と AIアシスタントの話を見てきました。ここからは、いよいよ 冒頭で紹介した記事にも書いた、IFTTT Pro の新機能が関わる話です。
AIアシスタントの機能と組み合わせられそうなものを考えて試す
試す内容を考える
まずは、IFTTT Pro の新機能「クエリー・フィルター」を試すこと自体が初めてなので、簡素な内容で試すことにしました。
とりあえずの内容として「Alexa のアラームに連動してメッセージを通知する」という流れに新機能を組み込むような感じで、以下のゴールを考えてみました。
- 最終的に作るアプレットの流れ
- Alexa のタイマーに連動するトリガーを利用
- タイマーに連動した動作で、クエリーを用いた天気情報の取得を行う
- 取得した天気の情報にフィルターを適用し、天気によってその後のアクションのメッセージを少し変える
- 天気によって少し異なるメッセージが LINEアプリに届く
本当は、最後の「LINEアプリにメッセージが届く」という部分は、Alexa のタイマーを使って起床した際に、ぱっと見ですぐに天気が分かるような光を使った表示をその場で提示する(Webhook を活用して、LED がつながったデバイスに通知を送って、LEDを光らせるようなもの)、等ということを考えたのですが、記事を書く時間の都合で上記のシンプルな形にしました。
実際に試してみる
前段階の試作で行き詰まってしまわないよう、ここではデバッグしやすいトリガーと新機能を組み合わせたお試しから始めることにします。
試すのが手軽そうなトリガーにボタン(自分の環境場合、IFTTTアプリが入ったiPhoneのウィジェット上で、IFTTT用のボタンを押すだけで OK)があるので、それを使って新機能のお試しをします。最終的には、そのボタンのトリガーの部分が、上で説明した AIアシスタント用の機能に置き換わる形です。
詳細を書くと分量が多くなりすぎるので、試したことのポイントだけ書いていきます(別途、クエリー・フィルターの話の詳細は記事にしたいな、とか思いつつ)。
まずは、以下の流れのものを作ってみることにします。
- お試しアプレットの流れ
- スマホ上で IFTTTアプリのボタン押下
- ボタン押下に連動した動作で、クエリーを用いた天気情報の取得を行う
- 取得した天気の情報にフィルターを適用し、天気によって通知用のメッセージを書き変える
- 上記を実行した日の天気によって、少し異なるメッセージが LINEアプリに届く
アプレットのトリガー・アクションをセットした状態は以下です。
そして、トリガーとアクションの間にあるほうの「+(プラス)」のマークを押して、その部分にクエリー・フィルター用のメニューを表示させます。
ちなみに、「クエリー」のほうはトリガーがセットされていれば選択可能な状態になりますが、「フィルター」のほうはトリガーとアクションの両方がセットされてないと、設定画面に進むためのボタンを押すことができなそうでした。
まず、クエリーのほうを設定していきます。
「Weather Underground」で現在の天気を取得するものを追加してみます。その設定で、どの場所の天気を設定するか入力する画面がありますが、自分が住んでいる県+市の名称を入力しました。
そして、アクションのすぐ上にある「+(プラス)」のマークを押して、その部分にクエリー・フィルター用のメニューを再度表示させて、今度はフィルターのほうを設定します。公式のヘルプやサンプルを見つつ、以下のようなコードを設定してみました。
処理の意図としては、その日の天気の情報を取得して、雨かどうかによって通知するメッセージを変える、という内容です。
let todaysCondition = Weather.currentWeather[0].TodaysCondition
if (todaysCondition != "Rainy") {
Line.sendMessage.setMessage("今日は雨は降らないみたい。今日の天気は"+ todaysCondition +"です。" );
} else {
Line.sendMessage.setMessage("今日の天気は「雨」です。傘を持っていきましょう" );
}
上記で、 Line.sendMessage.setMessage()
を使ってますが、これを使って文字列を指定していると、アプレットのアクションのほうで、GUI上から設定する LINE へ通知するメッセージの設定が上書きされてしまうようでした。
とりあえず、これで実行してみます。
なんとなく予想していた通り、 todaysCondition
として指定した天気の表記は英語になってたりもしますが、雨ではない場合の条件分岐がうまく動きました(そして、「Partly Rainy」とかありそう、とか思いました)。
さて、「ここで雨の場合の挙動も試そう」などとすると、実際の天気情報を取得している動きのため、雨が降る日を待たなければなりません(笑)
それは厳しいので、上記のフィルターの内容を書きかえて、if で指定した条件を満たした場合の挙動をためしてみようと思います。上記の結果をうけて、条件文を以下のように変更して、再度試してみました。
条件文には「Partly Cloudy」を指定しようと思ったのですが、記事を書きつつお試しをしている間に取得できる結果の情報が変わっていたようなので、条件文は「Mostly Clear」にして実行(もしかして 1日の天気は Weather.twoDayForecast[0].Condition;
とかで取得しないといけない?)。
let todaysCondition = Weather.currentWeather[0].TodaysCondition
if (todaysCondition != "Mostly Clear") {
Line.sendMessage.setMessage("今日は快晴ではないみたい。今日の天気は"+ todaysCondition +"です。" );
} else {
Line.sendMessage.setMessage("今日の天気は「快晴」です。快適な1日になりそうですね!" );
}
再実行した結果は、以下のとおりです。
このお試しをしていて、「Weather Underground の仕様をきちんと調べてないと、意図しない仕様になってるのでは?」と思い始めたのですが、時間の都合でそのあたりは将来の課題にします。
とりあえず、IFTTT Pro の新機能「クエリー・フィルター」を使ってみる、という部分はクリアできました。
AIアシスタントと IFTTT Pro の新機能の組み合わせ
ここで、上記の仕組みのボタンのトリガーを、Alexa のタイマーと連動するトリガーに置きかえてみます。
それ以外の部分は上で試した内容と同じです。
その動作結果を以下に示します。
iPhone の画面収録機能を使って収録した動画なのですが、iPhone上の Alexa アプリでタイマーをセットし(記事を書く都合などで、直近の時間を対象にセット)、Alexa のタイマーが動いた際に同じ iPhone にインストールされた LINEアプリにメッセージが届く(その通知が画面上に表示される)、という様子を記録したものになります。
IFTTT Pro の新機能「クエリー・フィルター」を使ったテスト!
— you (@youtoy) December 5, 2020
Alexa のアラームに連動する IFTTT のトリガーに、クエリーで天気情報の取得を加え、さらにフィルターを使って「取得した天気の情報によって、LINE に通知する IFTTT のアクションのメッセージの内容を変える」ということをやってます。 pic.twitter.com/nSawfSmRUh
Alexa・Google Assistant に関する内容をクエリーにする
上記では、Alexa に関するトリガーに、天気に関する情報をクエリーで追加した形でした。
この「クエリーで情報を追加する」、という部分自体に Alexa・Google Assistant の機能を指定することもできるようでした。ざっと見た感じだと、
このクエリーの指定について、試してみると Alexa・Google Assistant に関する内容も選択できるようです。
少し見てみた感じだと、トリガーとして選んだ場合とは異なる内容が並んでいました。「トリガーとして選べる機能の履歴を取得する」という感じにも見えましたが、今回は細かく見る時間はなさそうで詳細は把握できていない状況です。
まとめ
今回の記事では、IFTTT の AIアシスタント連携(Alexa・Google Assistant との連携)の機能を久しぶりに使ってみつつ、さらに IFTTT Pro の新機能「クエリー・フィルター」を AIアシスタント連携と組み合わせて試してみました。
今回、「クエリー・フィルター」の部分をかなり端折ってしまったので、この部分の解説は別記事でまた書ければと思っています。また、「IFTTT と AIシスタントの組み合わせを実際に試してみる」の部分で利用していたものの、さらっと流してしまった Webhook と MQTT を連動させた部分についても、少し別記事を書ければと思うところです。
【余談】 スマートスピーカー・AIアシスタントに関するこれまでのあれこれ
今回、スマートスピーカー・AIアシスタントと IFTTT との組み合わせを話題にしましたが、これまでには IFTTT を使うパターン以外でもスマートスピーカーのスキル・VUI を使った試作品を作ってみたり、LT登壇や記事の執筆をしたりしてきました。
以下に、Qiita に書いた記事などの一部を記載してみようと思います(ごく一部に、声でなく音に関わるものが混じってたりもしますが)。
もし以下の記事の中で気になるものがありましたら、よろしければご覧ください。
- スマートスピーカー・AIアシスタントとガジェットの連携
- スマートスピーカー・AIアシスタントとビジュアルプログラミング
- スマートスピーカー・AIアシスタントとノンコーディング
- 声・音を対象にできる機械学習
【余談2】 スマートスピーカー・AIアシスタント・VUI に関するイベント
アドベントカレンダー担当日の翌日の開催となるのですが、スマートスピーカー・AIアシスタント・VUI に関するイベントを 1つ共同で主催します。
●スマートスピーカーを遊びたおす会 vol.11 VUI賞決勝審査会 - connpass
https://kotodama.connpass.com/event/192922/
こちらは、以前は Mashup Awards という名称だったコンテストである ヒーローズ・リーグの中で、コミュニティサポーター賞というカテゴリーの中にある「VUI賞」という部門の決勝大会になります。2018年より、そのヒーローズ・リーグの VUI に関する部門のオーガナイザーを共同で務めさせていただいており、明日はその 3回目の決勝イベントです。
「この記事を読んだ時には、もう終わってたよ!」ということになるであろう話題ですが、上記のページには決勝進出となった VUI に関する 6つの作品の情報がありますので、よろしければそれらもご覧ください。
【追記】 上記の余談2 で書いたイベントで LT をしました
本記事の内容について、LT で話してきました。
●IFTTT で Alexa・Google Assistant を利用して IFTTT Pro の新機能(クエリー・フィルター)との組み合わせも試す / スマートスピーカーを遊びたおす会 vol.11 VUI賞決勝審査会 - Speaker Deck
https://speakerdeck.com/you/sumatosupikawoyou-bitaosuhui-vol-dot-11-vuishang-jue-sheng-shen-cha-hui
【追記2】
引き続き IFTTT Pro の新機能活用を模索していて、記事を書いたりもしています。
●IFTTT Pro の新機能活用を模索: Googleカレンダー連携をクエリーで使う方向性(まだ模索中) - Qiita
https://qiita.com/youtoy/items/8439d987ec07aadf1329