Google HomeにRSSを読み上げさせよう:完成編:特集:Google Homeプログラミングを始めよう(3/3 ページ)
Dialogflowの会話機能とAzure Functionsを組み合わせて、Azure Table Storageに保存したRSSフィードのデータを実際に読み上げさせてみよう。
コンテキストの利用
前ページで紹介した動画では、「Insider.NETの3番目の記事」という問い掛けに対して、「何番目の記事ですか」と返答があった。これは1ページ目で作成した「readout-forum-rss」インテントの[Action and parameters]セクションでforum/indexパラメーターを必須として、語句を認識できなかった場合や指定がなかった場合にプロンプトを出して、入力を促すようにしていたからだ。
そうではなく、以下のような状況を考えてみよう。
- ユーザー:「Insider.NETの3番目の記事は?」
- Google Home:「Insider.NETの3番目の記事ですね。……」
- ユーザー:「5番目の記事は?」
この「5番目の記事は?」という問い掛けは、「フォーラムがInsider.NETである」ことを前提としたものだ(と人には分かる)。Dialogflowで作成するアプリでこうしたことを実現するには「コンテキスト」と呼ばれる機能を利用する。
「コンテキスト」とは特定のインテントを実行するために必要な要素(エンティティ)を他のインテントから補うためのものだ。例えば、これまでに見てきた「readout-forum-rss」インテントにはフォーラムとインデックスの両方の情報が含まれている。そこで、これらの情報を「コンテキストとして他のインテントに伝える」ことで、他のインテントではその情報を利用できるようになる。
そのための設定を行うのが、Dialogflowでインテントを表示したときに一番上に表示される[Contexts]セクションだ。実際に設定したところを以下に示す。
「5」というのはコンテキストの「ライフスパン」を意味している。これは、コンテキストが「5回のリクエスト」で期限切れになるということだ。デフォルトでは「インテントを呼び出した後、5回のリクエストまたは10分が経過すると期限切れ」になる。
このインテントでは「forum-and-index」というコンテキストを他のインテントで再利用できるように出力している。出力したコンテキストからは「#コンテキスト名.パラメーター名」としてその値を参照できる。つまり、フォーラム情報を知りたければ「#forum-and-index.forum」のようにすればよい。
そこで、「readout-rss-with-only-index」というインテントを作ってみよう。[Training Phrases]セクションには「5番目の記事」などと入力しておく。
このとき[Action and parameters]セクションにはindexパラメーター(と何の役にも立っていないarticleパラメーター)だけがセットされるので、次の画像のようにforumパラメーターを追加する。
このとき、[VALUE]欄で先に述べた「#forum-and-index.forum」のように、出力されたコンテキストを参照するようにする。こうすれば、「Insider.NETの3番目の記事」といった問い掛けの後に、「5番目」などとフォーラムの指定を省略して、フィードを読み上げさせられるようになる。
実際には、インデックスを指定せずにフォーラムを指定しただけの場合のインテントも作成した方がよいかもしれないが、その場合、インデックスはどうすべきかなどが考慮の対象となる。本稿のサンプルではインデックスはそのまま流用するインテントを作成してみたが、設定などは上の「readout-rss-with-only-index」インテントと同様なので画像などは割愛する。
コンテキストを利用した、Google Home miniとの会話については1ページ目冒頭の動画にあるので、そちらも参照されたい。
本連載では、GoogleのActions on Googleプラットフォーム、Dialogflow、Azureの各種サービスを組み合わせて、C#コードを利用してGoogle Homeを操作するアプリを作成する際の基本を見てきた。会話をエレガントに終了する方法、作成したアプリの登録など、説明していない点はまだあるが、取りあえずの基本は理解できたはずだ。最新のスマートスピーカーであっても、C#という手慣れた言語を使って簡単に操作できるので、どんどん便利なアプリを作ってみてほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.