1. 概要
Google アシスタントのデベロッパー プラットフォームを使用すると、Google アシスタントのバーチャル パーソナル アシスタント機能を拡張するソフトウェアを作成し、スマート スピーカー、スマートフォン、自動車、テレビ、ヘッドフォンなど 10 億以上のデバイスで公開できます。ユーザーは、Google アシスタントとの会話を通じて、食料品の購入から乗車の予約までさまざまなタスクを実行できます。Google アシスタントのデベロッパー プラットフォームを使用することで、サードパーティ フルフィルメント サービスを開発し、ユーザーとの快適かつ効果的な会話型エクスペリエンスを簡単に作成、管理できます。
この Codelab では、Google アシスタントでの開発に関する中級レベルのコンセプトについて解説し、レベル 1 の Codelab で作成したアクションをベースにより高度なアクションを構築します。このチュートリアルを始める前に、レベル 1 の Codelab を完了することを強くおすすめします。
この Codelab で構築するのは、架空の地「グリフィンバーグ」の冒険に出掛けるユーザーが、旅に持っていくアイテムとして何を選んだかに応じて運勢を伝えるアクションです。
作成するアプリの概要
この Codelab では、以下の機能を備えた高度な会話型アクションを構築します。
- ユーザーからデータを収集し、値に応じて会話のプロンプトを変更する
- 会話を続けるためにフォローアップの質問をする
- ゲームループを作成し、ユーザーが運勢を聞いた後にアクションとやり取りできるようにする
構築を開始する前に、公開済みのアクションで会話を試すことができます。Google アシスタント対応デバイスを用意し、「OK Google, talk to Fate and Fortune」(OK Google, 旅の運勢を占う)と話しかけてください。このアクションにアクセスするのが 2 回目以降のユーザーの場合、デフォルトでは次のように会話が進行します。
演習内容
必要なもの
この Codelab に必要なもの(および前提条件)は以下のとおりです。
- ウェブブラウザ(Google Chrome など)
- レベル 1 の Codelab を完了し(Actions Builder レベル 1 を使用して Google アシスタントのアクションを構築する)。
この Codelab のフルフィルメント コードを理解するうえで、JavaScript(ES6)に精通していることを強く推奨しますが、必須ではありません。
2. 会話インターフェースの構築を続行
レベル 1 の Codelab では、Start
という 1 つのシーンのみの簡単な会話型アクションを作成しました。
この Codelab では、アクションの会話をさらに展開します。以降のセクションでは、アクションに変更を加えて以下の処理を行えるようにします。
- ユーザーが運勢を聞きたいと応答したときに、新しい
Fortune
シーンに遷移する - 旅に持っていくアイテムを選ぶようユーザーに促す
- ユーザーの選択に応じてカスタマイズされた運勢を返す
Fortune
シーンを作成する
このセクションでは、Fortune
シーンを作成し、会話中にユーザーがこのシーンに遷移する方法を定義します。
Fortune
という新しいシーンを作成する手順は次のとおりです。
- Codelab レベル 1 で作成した Actions プロジェクトを開きます。
- ナビゲーション バーの [開発] をクリックします。
- [Scenes](シーン)で Start シーンをクリックします。
- yes インテント([If yes is matched](yes が一致した場合)ボックス)をクリックしてオプション ウィンドウを開きます。
- [Send prompts](プロンプトを送信)をオフにしてプロンプトを削除します。
- [Transition](遷移)でプルダウン メニューをクリックし、テキスト ボックスをクリックして「
Fortune
」と入力します。 - [Add](追加)をクリックします。これで、
Fortune
という新しいシーンが作成されるとともに、ユーザーが運勢を聞きたいと応答したときにStart
シーンからFortune
シーンに移る遷移も追加されます。
Fortune
シーンの会話ロジックを定義する
この Codelab では Fortune
シーンに変更を加え、ユーザーに「What do you choose to help you on your quest, a dragon, a translator, or a compass?」(冒険に持っていくアイテムを選んでください。ドラゴン、翻訳機、コンパスの中から選べます)と尋ねられるようにします。ユーザーから前もって必要な情報を収集するため、「スロットフィル」という機能を使用します。
このアクションでは、dragon(ドラゴン)、translator(翻訳機)、compass(コンパス)という 3 種類のアイテムそれぞれに応じた運勢を用意します。ユーザー入力からこの 3 つの選択肢を識別できるようアクションを設定するには、新しい「型」を作成する必要があります。
シーンのスロットフィル ステージでは、この型を使用してユーザーから収集する情報を定義します。NLU エンジンは、ユーザー入力内に一致するスロットを検出すると、そのスロットを型付きパラメータとして抽出します。取得した値は、シーン内でロジックの実行に使用できます。
available_options
型を作成する
このセクションでは、available_options
という新しい型を作成します。この型は、プロンプトへの応答においてユーザーが選択できる 3 種類の選択肢(dragon、translator、compass)を指定するために使用します。また、選択肢の類義語が返された場合に備え、それぞれに似ている言葉もいくつか定義します。後のセクションで available_options
型をスロットに追加し、ユーザーが選んだアイテムを取得できるようにします。
available_options
型を作成する手順は次のとおりです。
- ナビゲーション バーで、[Types] をクリックします。
- [+(プラス記号)] をクリックし、「
available_options
」と入力してEnter
キーを押します。 - [
available_options
] をクリックしてオプション ウィンドウを開きます。
型は、情報の Key-Value ペアとして設定されます。Key(キー)は型の名前、Value(値)はその Key の同義語です。キーを定義すると、それ自体が自動的に値として追加されます。
ユーザーが選択できる 3 つのアイテムを追加する手順は次のとおりです。
- [Add entries](エントリを追加)までスクロールします。
- [New entry](新しいエントリ)欄に「
dragon
」と入力し、Enter
キーを押します。これでdragon
というキーが作成されます。 - [Add values](値を追加)欄に「
hydra
」と入力してEnter
キーを押し、値(類義語)として追加します。次に、値lizard
を同じ手順で追加します。 - 残りのキーとそれに対応する値を追加します。
translator | translator
、communicator
、machine
、decoder
、translate
compass | compass
、direction
、guide
- [保存] をクリックします。
これで、available_options
が dragon、translator、compass であることをアクションが理解し、それぞれに対応するいくつかの類義語を認識できるようになりました。
スロットフィルを設定する
次に、Fortune
シーンにスロットフィルを設定する必要があります。スロットフィル ロジックを設定する手順は次のとおりです。
- ナビゲーション バーの [Scenes] で [Fortune] をクリックします。
Fortune
シーンで、[Slot Filling](スロットフィル)の [+](プラス記号)をクリックします。- [Enter slot name](スロット名を入力)欄に、スロット名として「
chosenOptions
」を入力します。 - [Select type](型を選択)プルダウン リストで、スロットの型として [
available_options
] を選択します。 - [このスロットは必須です] チェックボックスをオンにします。
- [Send prompts] をオンにして、次のメッセージと候補ワードを追加します。
candidates:
- first_simple:
variants:
- speech: >-
What do you choose to help you on your quest, a dragon, a
translator, or a compass?
suggestions:
- title: 'Dragon'
- title: 'Translator'
- title: 'Compass'
- [保存] をクリックします。
これで available_options
型をスロットに追加できました。このスロットを使用することで、会話を進める前にユーザーから収集する必要のある情報(ユーザーがどのアイテムを選択したか)をアクションに伝えることができます。スロット内に設定したプロンプトは、ユーザーがシーンのスロットフィル ステージに達したときにプロンプト キューに追加されます。
スロット chosenOptions
に名前を付けると、[Customizeslot value writeback] フィールドが同じ名前($session.params.chosenOptions
)で更新されます。このパラメータには、Actions Builder とクライアント ライブラリのフルフィルメントでこの名前からアクセスできます。
scene.slots.status == "FINAL"
条件を設定する
スロットを追加すると、条件 scene.slots.status == "FINAL"
が条件リストに自動的に追加されます。
条件 scene.slots.status == "FINAL"
は、スロットフィルが完了したかどうかをチェックします。すべてのスロットが埋まると、条件は Webhook をトリガーしたり、新しいシーンに遷移したり、プロンプト キューにプロンプトを追加したりできるようになります。
このセクションでは、スロットが埋まったときにプロンプトをプロンプトキューに追加するように scene.slots.status == "FINAL"
を設定します。
このプロンプトを FINAL
条件に追加する手順は次のとおりです。
scene.slots.status == "FINAL"
をクリックしてオプション ウィンドウを開きます。- [Send prompts] をオンにして、次のプロンプトを追加します。
candidates:
- first_simple:
variants:
- speech: You picked $session.params.chosenOptions.
- [保存] をクリックします。
シミュレータでアクションをテストする
ここまでの変更により、スロットフィルにおいてユーザーが選ぶアイテムを定義できました。ユーザーからこの情報を入手した後、選択肢に応じてプロンプトが返されるはずです。
次の手順でアクションをテストしてみましょう。
- ナビゲーション バーで、[Test] をクリックします。
- [
Talk to my test app
] をクリックまたは入力欄に入力し、Enter
キーを押します。 - 入力欄に「
Yes
」と入力し、Enter
キーを押します。または、候補ワードの [Yes] をクリックします。
- 「
dragon
」をクリック、入力、または音声入力します。「You picked dragon」(ドラゴンを選択しました)というプロンプトが返されます。
次のセクションでは、ユーザーが選択できるアイテムごとのプロンプトをカスタマイズします。
条件を使用してプロンプトをカスタマイズする
このセクションでは、ユーザーに示す選択肢ごとに条件を追加し、それぞれの条件に応じたカスタム プロンプトを追加します。
dragon
の運勢をカスタマイズする
ユーザーが「dragon」を選択した場合に対応するよう条件を編集し、プロンプトをカスタマイズする手順は次のとおりです。
- ナビゲーション バーの [開発] をクリックします。
- ナビゲーション バーで Fortune シーンをクリックします。
scene.slots.status == "FINAL"
をクリックしてオプション ウィンドウを開きます。- 条件文を次のように編集します。
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
- [Send prompts] をオンにします。
- コードエディタで、プロンプトの内容を、運勢を占う次のメッセージに変更します。
candidates:
- first_simple:
variants:
- speech: >-
The people of Gryffinberg will be awestruck by the beauty and power
of the ancient dragon. Much to your dismay, the townspeople fall
into dispute over who will receive the honor of riding the dragon
first. You return home from your quest without everlasting glory or
a dragon.
- [保存] をクリックします。
これで、ユーザーの応答が「dragon」またはその類義語のときに、その選択に応じた運勢を返せるようになりました。続いて、残り 2 つの選択肢に対応する条件を追加します。
translator
の運勢をカスタマイズする
ユーザーが「translator」を選択した場合に対応するよう条件を追加し、プロンプトをカスタマイズする手順は次のとおりです。
- [Condition](条件)の横にある[+](プラス記号)をクリックします。
- [else if](条件)欄に
scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
を追加します。 - [Send prompts] をオンにします。
- コードエディタに次のプロンプトを追加します。
candidates:
- first_simple:
variants:
- speech: >-
With the help of the translator, the rival factions in Gryffinberg
are finally able to communicate with each other and resolve their
disputes. You will complete your quest to restore peace in the town.
The translator will be used on many subsequent journeys across the
earth. After its work is done, it retires honorably to a premier
location in the Gryffinberg History Museum.
- [保存] をクリックします。
compass
の運勢をカスタマイズする
ユーザーが「compass」を選択した場合に対応するよう条件を追加し、プロンプトをカスタマイズする手順は次のとおりです。
- [Condition] の横にある[+](プラス記号)をクリックします。
- [else if] テキスト ボックスに
scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
を追加します。 - [Send prompts] をオンにします。
- コードエディタに次のプロンプトを追加します。
candidates:
- first_simple:
variants:
- speech: >-
The compass will help you find the mystical and ancient Library of
Gryffinberg. Among its infinite stacks of dusty books, you find one
entitled "Wisdom of the Ages". By the time you've read the
50,000-page tome, the townspeople have forgotten their problems. You
will write a second edition of "Wisdom of the Ages", but have
limited commercial success.
- [保存] をクリックします。
シミュレータでアクションをテストする
ここまでの変更により、ユーザーの選択に応じてカスタマイズされた運勢を返せるようになりました。
次の手順でアクションをテストしてみましょう。
- ナビゲーション バーで、[Test] をクリックします。
- 入力欄に「
Talk to my test app
」と入力し、Enter
キーを押します。 - 入力欄に「
Yes
」と入力し、Enter
キーを押します。または、候補ワードの [Yes] をクリックします。 - 「
Translator
」をクリック、入力、または音声入力します。
「translator」を選択した場合の運勢が返されます。
3. ゲームループを追加する
このセクションでは、ユーザーが別のアイテムを選び直せるようにアクションを変更し、選び直した後に別の運勢が返されるようにします。この変更は、ゲームの最後に「もう一度プレイしますか?」というメッセージを表示するようなものです。このループを作成するには、以前に作成した yes
インテントと no
インテントを、Again
という新しいシーンに追加します。
Again
シーンを作成する
このセクションでは、新しいシーン Again
を作成し、別のアイテムを選ぶかどうかをユーザーに尋ねるプロンプトを追加します。
Again
シーンを作成する手順は次のとおりです。
- ナビゲーション バーの [開発] をクリックします。
- [Scenes] の [+](プラス記号)をクリックします。
- 「
Again
」と入力してEnter
キーを押します。 - ナビゲーション バーの
Again
シーンをクリックします。 - [On enter](開始時)の横にある [+](プラス記号)をクリックします。
- [Send prompts] をオンにして、次のプロンプトと候補ワードを追加します。
candidates:
- first_simple:
variants:
- speech: >-
That is what I see for you. Would you like to choose a different option and
explore another future?
suggestions:
- title: 'Yes'
- title: 'No'
- [保存] をクリックします。
Fortune
シーンから Again
シーンへの遷移を追加する
ユーザーに運勢を伝えたら、会話を新しい Again
シーンに遷移させる必要があります。
Fortune
から Again
へのシーンの遷移を追加する手順は次のとおりです。
- Fortune シーンをクリックします。
- 最初の条件(
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
)をクリックしてオプション ウィンドウを開きます。 - スクロールして [Transition] の
Again
を選択します。 - [保存] をクリックします。
- 2 番目の条件をクリックしてオプション ウィンドウを開きます。
- スクロールして [Transition] の
Again
を選択します。 - [保存] をクリックします。
- 3 番目の条件をクリックしてオプション ウィンドウを開きます。
- スクロールして [Transition] の
Again
を選択します。 - [保存] をクリックします。
シミュレータでアクションをテストする
ここまでの変更により、ユーザーに運勢を伝えた後に「That is what I see for you. Would you like to choose a different option and explore another future?」(これが私に見えるあなたの運勢です。違うアイテムを選んで、別の運勢を占ってみますか?)というプロンプトを返せるようになりました。
次の手順でアクションをテストしてみましょう。
- ナビゲーション バーで、[Test] をクリックします。
- 入力欄に「
Talk to my test app
」と入力し、Enter
キーを押します。 - 入力欄に「
Yes
」と入力し、Enter
キーを押します。または、候補ワードの [Yes] をクリックします。 - 「
dragon
」をクリック、入力、または音声入力します。
dragon を選んだ場合の運勢と Again
プロンプトが返されます。
インテントと Again
シーンへの遷移を追加する
このセクションでは、yes
インテントと no
インテントを Again
シーンに追加します。これにより、ユーザーがアイテムを選び直したいかどうかを確認できます。また、yes
インテントと no
インテントに適切な遷移を追加します。yes
インテントは Fortune
シーンに、no
インテントはシステム シーン End conversation
に遷移するようにします。
インテントと Again
シーンへの遷移を追加する手順は次のとおりです。
- ナビゲーション バーの [開発] をクリックします。
Again
シーンをクリックします。- [User intent handling](ユーザー インテントの処理)の横にある [+](プラス記号)をクリックします。
- インテントのプルダウン メニューから [yes] を選択します。
- [Transition] プルダウン メニューから [
Fortune
] を選択します。 - [保存] をクリックします。
- [User intent handling] の横にある [+](プラス記号)をクリックします。
- インテントのプルダウン メニューから [no] を選択します。
- [Transition] プルダウン メニューから [End conversation](会話を終了)を選択します。
- [Send prompts] をオンにして、コードエディタに次のプロンプトを追加します。
candidates:
- first_simple:
variants:
- speech: >-
It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell.
- [保存] をクリックします。
シミュレータでアクションをテストする
ここまでの変更により、ユーザーがアイテムを選び直したいのか、あるいは会話を終了したいのかを認識できるようになりました。
次の手順で yes
インテントをテストしてみましょう。
- ナビゲーション バーで、[Test] をクリックします。
- 入力欄に「
Talk to my test app
」と入力し、Enter
キーを押します。 - 入力欄に「
Yes
」と入力し、Enter
キーを押します。または、候補ワードの [Yes] をクリックします。 - 選択肢をクリック、入力、または音声入力します。
- 入力欄に「
Yes
」と入力し、Enter
キーを押します。
「What do you choose to help you on your quest, a dragon, a translator, or a compass?」というプロンプトが返されます。
次の手順で no
インテントをテストしてみましょう。
- 選択肢をクリック、入力、または音声入力します。
- 入力欄に「
No
」と入力し、Enter
キーを押します。
End conversation
プロンプト(「It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell」(お気に召したようで何よりです。旅の幸運を祈ります。それでは)が返されます。
4. 補助的なパスを追加する
ここまでの変更により、このアクションでほとんどのユーザーが選択するメインパスを作成できました。しかし、Fortune
シーンのプロンプト「What do you choose to help you on your quest, a dragon, a translator, or a compassěquot;」に対して、選択肢以外のアイテムを答えるユーザーがいます。
このセクションでは、ユーザーが「魔法」、「馬」、「電話」、または「電話」をいつ選択したかを把握し、3 つの選択肢から 1 つを選ぶようユーザーに促すようにアクションを設定します。このロジックを設定するには、選択できないアイテムを含む新しい type
(型)と、ユーザーがそれらのアイテムを選んだ場合に一致する新しいインテント other_option
を作成する必要があります。また、「インテント パラメータ」を識別して抽出するには、other_option
インテント内のトレーニング フレーズに「アノテーション」を付ける必要があります。
アシスタントの自然言語処理(NLU)エンジンがユーザー入力内のパラメータの一致を検出すると、その値を型付きパラメータとして抽出して、シーン内でロジックを実行できます。この Codelab では、ユーザーが選択したアイテムを抽出し、その選択をプロンプト内で参照できるようにします。
unavailable_options
型を作成する
これで、さまざまなアイテムを含む unavailable_options
型を作成し、ユーザー入力内のデータを識別するための準備が整いました。
unavailable_options
型を作成する手順は次のとおりです。
- ナビゲーション バーの [開発] をクリックします。
- [Types] の [+](プラス記号)をクリックします。
- 「
unavailable_options
」と入力してEnter
キーを押します。 - [
unavailable_options
] をクリックしてオプション ウィンドウを開きます。 - [Add entries] で、次のエントリと対応する値を入力します。
|
|
|
|
|
|
|
|
Key-Value テーブルは以下のようになります。
- [保存] をクリックします。
other_option
インテントを作成する
次に、other_option
というインテントを作成し、unavailable_options
型のアイテムを含むトレーニング フレーズを追加します。ユーザーが unavailable_options
型に含まれるアイテムを選ぶと、このインテントに一致します。
other_option
インテントを作成して設定する手順は次のとおりです。
- [Custom Intents](カスタム インテント)の [+](プラス記号)をクリックします。
- 「
other_option
」と入力してEnter
キーを押します。 - [
other_option
] をクリックしてオプション ウィンドウを開きます。 - 次のトレーニング フレーズを追加します。1 つ入力するごとに
Enter
キーを押します。
I want to use spells
I really really want to use a phone
magic!
cash
I want to ride a horse
- [Add intent parameters](インテント パラメータを追加)で、パラメータ名を
chosenUnavailableOption
に更新します。 - [保存] をクリックします。
トレーニング フレーズを入力すると、Actions Builder は unavailable_options
型の spells
、phone
、magic
、cash
、horse
を認識し、その単語を自動的にハイライト表示(アノテーションを付加)します。[Add intent parameters] には、以下の画像に示すとおり、インテント パラメータが自動的に追加されます。
このインテント パラメータを指定すると、アイテムの名前を抽出してプロンプト内で使用できるようになります。
other_option
インテントを Fortune
シーンに追加する
これで、ユーザーが選択肢以外のアイテムを選んだ場合に対応できるインテント other_option
を作成できました。このセクションでは、この other_option
インテントを Fortune
シーンに追加します。ユーザー入力に基づいてプロンプトをカスタマイズするには、インテント パラメータを使用します。
other_option
インテントを Fortune
シーンに追加する手順は次のとおりです。
- Fortune シーンをクリックします。
- [User intent handling] の横にある [+](プラス記号)をクリックします。
- インテントのプルダウン メニューから [
other_option
] を選択します。 - [Send prompts] をオンにして、次のプロンプトを追加します。
candidates:
- first_simple:
variants:
- speech: >-
I have seen the future and a $intent.params.chosenUnavailableOption.original
will not aid you on your journey.
式 $intent.params.chosenUnavailableOption
はインテント パラメータ オブジェクト、$intent.params.chosenUnavailableOption.original
はそのオブジェクトの値です。original property
は、ユーザーが指定した未加工の入力です。
- [保存] をクリックします。
Fortune
シーンでユーザーが unavailable_options
型のアイテムを選択すると、other_option
インテントに一致してプロンプトがプロンプト キューに追加されます。遷移が指定されていないため、シーンは条件ステージを再評価することによって実行ループを続行します。その後、chosenOptions
スロットによってプロンプトがプロンプト キューに追加され、プロンプト キューがユーザーに配信されます。
シミュレータでアクションをテストする
これで、ユーザーが unavailable_options
型のアイテムを選択したときに適切に応答できるようになりました。アクションは、ユーザーが選択したアイテムを識別してから、ユーザーに元々の選択肢(dragon、translator、compass)のいずれかを選択するよう促すプロンプトを表示する必要があります。
シミュレータでアクションをテストする手順は次のとおりです。
- ナビゲーション バーで、[Test] をクリックします。
- 入力欄に「
Talk to my test app
」と入力し、Enter
キーを押します。 - 入力欄に「
Yes
」と入力し、Enter
キーを押します。または、候補ワードの [Yes] をクリックします。 - 入力欄に「
magic
」と入力し、Enter
キーを押します。
英語のプロンプトで、ユーザーが「magic」を選んだ場合に冠詞の「a」が付くのは違和感があります。以降のセクションでは、この問題に対処する方法を説明します。
unavailable_options
ハンドラを追加する
unavailable_options
型のアイテムの前に冠詞「a」を必要に応じて挿入するには、ユーザーが選んだアイテムの前に「a」が必要かどうかを確認するためのイベント ハンドラをフルフィルメント ロジックに設定します。まず、アクションがハンドラを呼び出すようにコンソールで設定する必要があります。
unavailable_options
ハンドラを追加する手順は次のとおりです。
- ナビゲーション バーの [開発] をクリックします。
Fortune
シーンをクリックします。- [User intent handling] で [when other_option matches](other_option が一致した場合)をクリックしてオプション ウィンドウを開きます。
- [Send prompts] チェックボックスをオフにします。
- [Call your webhook](Webhook を呼び出す)チェックボックスをオンにします。
- イベント ハンドラのテキスト ボックスに「
unavailable_options
」と入力します。
- [Save] をクリックします。
フルフィルメントを更新してデプロイする
これで、unavailable_options
イベント ハンドラが呼び出されるように設定できたので、フルフィルメント内のハンドラを更新してデプロイします。
フルフィルメントを更新する手順は次のとおりです。
- ナビゲーション バーの [Webhook] をクリックします。
- 次のコードを
greeting
ハンドラの下に追加します。
app.handle('unavailable_options', conv => {
const option = conv.intent.params.chosenUnavailableOption.original;
const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
let message = 'I have seen the future and ';
if(optionsNeedA.has(optionKey)){
message = message + 'a ';
}
message = message + `${option} will not aid you on your journey. `;
conv.add(message);
});
const app = conversation();
の下に次のコードを追加します。
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- [Save Fulfillment](フルフィルメントを保存)をクリックします。
- [Deploy Fulfillment](フルフィルメントをデプロイ)をクリックします。デプロイが完了すると、エディタの上に「Your Cloud Function deployment is up to date」(Cloud Functions のデプロイは最新です)というメッセージが表示されます。
コードを理解する
unavailable_options
ハンドラは以下の処理を行います。
conv
オブジェクトからoption
データを取得し、option
をoriginal
プロパティ(ユーザーからの未加工の入力)に割り当てるoptionKey
をresolved
プロパティ(unavailable_options
型のキー)に割り当てるoptionKey
が「a」を付加する必要があるアイテムかどうかをチェックし、該当する場合はメッセージに「a」を挿入するconv.add(message)
でメッセージを追加する
シミュレータでアクションをテストする
ここまでの変更により、ユーザーが unavailable_options
型から選択したアイテムに冠詞「a」が必要かどうかに応じて、プロンプトを調整できるようになりました。
次の手順でアクションをテストしてみましょう。
- ナビゲーション バーで、[Test] をクリックします。
- [
Talk to my test app
] をクリックまたは入力欄に入力し、Enter
キーを押します。 - 入力欄に「
Yes
」と入力し、Enter
キーを押します。または、候補ワードの [Yes] をクリックします。 - 入力欄に「
magic
」と入力し、Enter
キーを押します。 - 入力欄に「
horse
」と入力し、Enter
キーを押します。
「horse」を選択した場合はその前に冠詞「a」が追加され、「magic」を選択した場合は冠詞「a」なしでプロンプトが生成されます。
プロジェクトをクリーンアップする(推奨)
料金が発生するのを避けるため、使用する予定のないプロジェクトは削除することをおすすめします。この Codelab で作成したプロジェクトを削除する手順は次のとおりです。
- Cloud プロジェクトとリソースを削除する手順については、プロジェクトのシャットダウン(削除)をご覧ください。
- (省略可)Actions Console からプロジェクトをすぐに削除するには、プロジェクトを削除するをご覧ください。この手順で削除していないプロジェクトは、約 30 日後に自動的に削除されます。
5. 完了
この Codelab では、Google アシスタントのアクションを構築するために必要な、中級レベルのスキルについて学びました。
学習した内容
- Node.js フルフィルメント ライブラリを使用して会話型アクションを開発する方法
- スロットを使用してユーザーからデータを収集する方法
- 条件を使用してシーンにロジックを追加する方法
- ゲームループを追加する方法
- 補助的なパスを追加する方法
詳細
Google アシスタントのアクションの構築について詳しくは、以下のリソースをご覧ください。
- Google アシスタントのアクションの開発に関するドキュメント
- Actions on Google GitHub ページのサンプルコードとライブラリ
- Google アシスタントを利用するデベロッパー向けの Reddit 公式コミュニティ
- 会話の設計ガイドライン(会話型アクションに関するベスト プラクティスとガイドライン)
Twitter で @ActionsOnGoogle をフォローして最新情報をチェックしてください。また、作成したアクションについて、ハッシュタグ #AoGDevs でツイートしてください。
アンケート
最後に、簡単なアンケートにご協力ください。