Google アシスタントと Cloud Firestore を使用したスペル練習ゲーム

1. 概要

Google アシスタントのデベロッパー プラットフォームを使用すると、仮想パーソナル アシスタントである Google アシスタントの機能を、スマート スピーカー、スマートフォン、自動車、テレビ、ヘッドフォンなど 10 億台を超えるデバイスで拡張するソフトウェアを作成できます。ユーザーは、Google アシスタントとの会話を通じて、食料品の購入から乗車の予約までさまざまなタスクを実行できます。Google アシスタントのデベロッパー プラットフォームを使用することで、サードパーティ フルフィルメント サービスを開発し、ユーザーとの快適かつ効果的な会話型エクスペリエンスを簡単に作成、管理できます。

この Codelab では、Google アシスタント、Cloud Functions、Cloud Firestore を使用した開発に関する中級レベルのコンセプトについて説明します。この Codelab では、Google アシスタントを使用してユーザーに単語のスペルを尋ねる「スペル練習」というゲームを作成します。

作成するアプリの概要

この Codelab では、次の機能を備えた高度なゲームを作成します。

  • ユーザーからスペルの回答を受け取り、値に応じて会話のプロンプトを変更する
  • 定義や繰り返しなど、その言葉のスペルに関連するヒントを提供して回答する
  • ユーザーが単語をつづり抜けた後にアシスタントと再びやり取りできるように、ゲームループを作成する

作成を始める前に、「OK Google, スペルチェックの練習と話して」と話しかけて、Google アシスタント搭載デバイスでライブ アクションを操作できます。リピーターがこのアクションを通るデフォルトのパスは、次のインタラクションのようになります。

この Codelab を完了すると、次のような会話フローのアクションが完成します。

2e9f94dc0ceafc96.png

ラボの内容

  • Cloud Firestore を操作する方法
  • スロットを使用してユーザーからデータを収集する方法
  • ユーザーの入力を処理して応答を返す
  • 条件を使用してシーンにロジックを追加する方法
  • ゲームループを追加する方法

必要なもの

この Codelab の前提条件は次のとおりです。

  • ウェブブラウザ(Google Chrome など)
  • Cloud Functions の関数を記述するための IDE。
  • お支払い方法。この Codelab では Cloud Functions for Firebase を使用します。そのため、プロジェクトが Firebase Blaze 料金プラン(詳細)に登録されている必要があります。
  • シェルコマンドを実行するためのターミナル
  • Node.js 10 以降

2. 関数コードを取得する

コマンドラインから、GitHub リポジトリのクローンを作成します。

$ git clone https://github.com/FirebaseExtended/codelab-actions-firestore

3. Firebase プロジェクトを作成してアプリを設定する

Firebase プロジェクトを作成する

  1. Firebase にログインします。
  2. Firebase コンソールで [プロジェクトを追加](または [プロジェクトを作成])をクリックし、Firebase プロジェクトに Spelling-Practice という名前を付けます。

66ae8d1894f4477.png

  1. プロジェクト作成オプションをクリックします。Firebase の利用規約が表示されたら同意します。このアプリではアナリティクスを使用しないため、Google アナリティクスの設定はスキップします。

Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。

Blaze のお支払いプランにアップグレードする

Cloud Functions for Firebase を使用するには、Firebase プロジェクトを Blaze 料金プランにアップグレードする必要があります。つまり、Google Cloud 請求先アカウントをプロジェクトに関連付ける必要があります。クレジット カードなどのお支払い方法の登録が必要です。

Blaze プランのプロジェクトを含むすべての Firebase プロジェクトは、引き続き Cloud Functions の無料の使用量割り当てを利用できます。この Codelab で説明する手順は、無料の使用量上限内に収まります。ただし、Cloud Storage から少額の料金(約 $0.03)が表示されます。これは、Cloud Functions のビルドイメージをホストするために使用されています。

4. Firebase CLI をインストールする

Firebase CLI(コマンドライン インターフェース)を使用すると、Cloud Functions の関数をデプロイできます。

Firebase CLI のインストール方法は、オペレーティング システムとユースケースに応じて複数あります。以下の手順では、Cloud Functions も使用している場合に最も一般的なオプションについて説明します。

  1. 通常は Node.js に付属する npm がインストールされていることを確認します。
  2. 次の npm コマンドを実行して、CLI をインストールまたはアップグレードします。
$ npm -g install firebase-tools
  1. 次のコマンドを実行して、CLI が正しくインストールされていることを確認します。
$ firebase --version

Firebase CLI のバージョンが 9.0.0 以降であることを確認します。これ以降のバージョンには、Cloud Functions に必要な最新の機能がすべて含まれています。バージョンがこれより低い場合は、上記のように npm install -g firebase-tools を実行してアップグレードします。

  1. 次のコマンドを実行して Firebase CLI を承認します。
$ firebase login
  1. spelling-functions-start ディレクトリで、Firebase プロジェクトを使用するように Firebase CLI を設定します。次のコマンドを実行してプロジェクト ID を選択し、手順に沿って操作します。プロンプトが表示されたら、任意のエイリアス(codelab など)を選択します。
$ firebase use --add

5. functions ディレクトリ

次に、Firebase SDK for Cloud Functions を使用してゲームのバックエンドを構築する機能 スペルチェックの練習を追加します。

Cloud Functions では、サーバーを設定しなくても Cloud で実行可能なコードを追加できます。この Codelab では、Firebase Authentication、Cloud Storage、Firebase Realtime Database のイベントに応答する関数を作成する方法について説明します。Authentication から始めましょう。

Firebase SDK for Cloud Functions を使用する場合、関数コードは functions ディレクトリにあります(デフォルト)。作業を簡単に行えるように、コードを格納する functions/index.js ファイルはすでに作成されています。次に進む前に、functions ディレクトリを確認してください。

$ cd functions
$ ls

関数コードは Node.js アプリでもあるため、アプリに関する情報を提供し、依存関係を一覧表示する package.json が必要です。

Node.js を使い慣れていない場合は、Codelab を進める前に Node.js についてよく理解しておくことをおすすめします。

package.json ファイルには、Firebase SDK for Cloud FunctionsFirebase Admin SDK という 2 つの必須依存関係がすでにリストされています。ローカルにインストールするには、functions ディレクトリから npm install を実行します。

$ npm install

次に、index.js ファイルの内容を確認します。

index.js

/**
 * Copyright 2021 Google Inc. All Rights Reserved.
 * ...
 */
// TODO(DEVELOPER): Import the Cloud Functions for Firebase and Firebase Admin modules here. Also import the Actions SDK here.
// TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here.
// TODO(DEVELOPER): Write the createSpellingPracticeWord function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.

まず必要なモジュールをインポートし、次に TODO の代わりに 4 つの関数を記述します。Codelab の次のステップに進み、モジュールをインポートします。

6. 必要なモジュールをインポートする

この Codelab には 3 つのモジュールが必要です。

  • firebase-functions モジュールを使用すると、Cloud Functions の関数のトリガーを作成できます。
  • firebase-admin モジュールを使用すると、管理者権限を持つサーバーで Firebase プラットフォームを使用できます(Cloud Firestore への書き込みなど)。
  • Actions SDK Node.js フルフィルメント ライブラリは、Google アシスタントの Actions SDK ハンドラを処理します。
  1. 次の npm コマンドを実行して、Actions SDK をインストールします。
$ npm install @assistant/conversation
  1. index.js ファイルで、最初の TODO を次のように置き換えます。

これらの変更により、必要な各モジュールがインポートされます。

また、Firebase Admin SDK を Cloud Functions 環境や他の Google Cloud コンテナにデプロイすると、自動的に構成できます。以下の変更で admin.initializeApp(); を呼び出すと、次のような処理が行われます。

index.js

/**
 * Copyright 2021 Google Inc. All Rights Reserved.
 * ...
 */

// Import the Actions SDK
const {conversation} = require('@assistant/conversation');
const https = require('https');
const app = conversation();
const cors = require('cors')({origin: true});

// Import the Firebase SDK for Cloud Functions.
const functions = require('firebase-functions');
// Import and initialize the Firebase Admin SDK.
const admin = require('firebase-admin');
admin.initializeApp();
// To access Cloud Firestore
const db = admin.firestore();
// TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here.
// TODO(DEVELOPER): Write the createSpellingPracticeWord function here.
// TODO(DEVELOPER): Write the shuffleWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.

次に、アシスタント アクションをサポートする関数を使用してビジネス ロジックを追加しましょう。

7. 関数を作成する

単語の定義を取得して Cloud Firestore に書き込む

dictionaryapi.dev 公開 API を使用して単語の定義を取得します。

index.js ファイルで、getWordDetailsFromDictionaryAPI の TODO を次のように置き換えます。

index.js

// Retrieves word definition and audio pronunciation from api.dictionaryapi.dev service
// Function uses service provided by https://dictionaryapi.dev/
async function getWordDetailsFromDictionaryAPI(word) {
  let responseData="";
  let req = https.request({
    host: 'api.dictionaryapi.dev',
    port: 443,
    path:'/api/v2/entries/en/' + word,
    method:'GET'
  }, (res) => {
    res.setEncoding('utf8');
    res.on('data', d => {
        responseData+=d;
    })
    res.on('end',function(){
        let object = JSON.parse(responseData)
        const wordListRef = db.collection('wordlist');
        wordListRef.doc(object[0].word).set(
          object[0]
        );
       return responseData;
     });
  });
  req.end();
}

Cloud Firestore トリガーを追加する

次に、Cloud Firestore で新しいドキュメントが作成されるたびにトリガーされる Cloud Functions の関数を作成します。dictionaryapi.dev API を呼び出し、先ほど作成した getWordDetailsFromDictionaryAPI 関数を介して単語の定義を取得します。

index.js ファイルで、createSpellingPracticeWord の TODO を次のように置き換えます。

index.js

// 新しい Firestore ドキュメントごとに getWordDetailsFromDictionaryAPI を介して単語の定義を取得する Firestore トリガー

exports.createSpellingPracticeWord = functions.firestore
  .document('wordlist/{word}')
  .onCreate((snap, context) => {
    const newValue = snap.data();
    const word = newValue.word;
    getWordDetailsFromDictionaryAPI(word);
});

ゲームの単語のリストを取得する

アシスタント用の Cloud Firestore からスペル練習用の単語のリストを取得する Cloud Functions の関数を作成できます。これには、アプリ ハンドラを使用します。

index.js ファイルで、getSpellingWordList の TODO を次のように置き換えます。

この関数を特別な app.handle に追加すると、アシスタントからこの関数にアクセスできるようになります。

index.js

// Store the list of spelling words in Assistant session
app.handle('getSpellingWordList', conv => {
  const wordListRef = db.collection('wordlist').limit(50);
  const snapshot = wordListRef;

  if (snapshot.empty) {
    console.log('No matching documents.');
    return;
  }
  VocabularyList = []

  return snapshot.get().then(snapshot => {
    snapshot.forEach(doc => {
      if (doc.data().word) {
          let definition = 'unknown';
          let audio = 'unknown';
          try {
            if(doc.data().hasOwnProperty('meanings')) {
              if(doc.data().meanings[0].hasOwnProperty('definitions')) {
                  definition = doc.data().meanings[0].definitions[0].definition;
              }
            }
            if(doc.data().hasOwnProperty('phonetics')) {
              if(doc.data().phonetics.length > 0)
                audio = doc.data().phonetics[0].audio;
            }
          } catch (error) {
            console.log(error);
          }

          let obj = {
            word: doc.data().word,
            answer: doc.data().word.split("").join(" "),
            definition: definition,
            audio: audio
          }
          VocabularyList.push(obj);
      }
      // Shuffle the array
      let currentIndex = VocabularyList.length, temporaryValue, randomIndex;
      while (0 !== currentIndex) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        temporaryValue = VocabularyList[currentIndex];
        VocabularyList[currentIndex] = VocabularyList[randomIndex];
        VocabularyList[randomIndex] = temporaryValue;
      }
      conv.session.params.vocabWord = VocabularyList;
      conv.session.params.vocabWordIndex = 0;
    });
  });
})

アシスタント セッションから単語を取得する

単語リストから次のスペルの単語を返す Cloud Functions の関数を作成できます。

index.js ファイルで、getSpellingWord の TODO を次のように置き換えます。

index.js

// Returns a spelling practice word to Google Assistant and uses Speech Synthesis Markup Language (SSML) to format the response
app.handle('getSpellingWord',  conv => {
  if (!conv.session.params.vocabWord.empty) {
    conv.session.params.vocabWordIndex+=1;
    const ssml = '<speak>' +
    '<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word.</audio> ' +
    '</speak>';
    conv.add(ssml);
  }
  else
    conv.add('Great job! You completed the Spelling practice');
});

ゲームで単語を繰り返すようにする

ゲームで現在の単語を繰り返す Cloud Functions の関数を作成できます。

index.js ファイルで、repeatSpellingWord の TODO を次のように置き換えます。

index.js

// Returns current spelling word
app.handle('repeatSpellingWord',  conv => {
  if (!conv.session.params.vocabWord.empty) {
    const ssml = '<speak>' +
    '<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word. </audio> ' +
    '</speak>';
    conv.add(ssml);
  }
  else
    conv.add('Great job! You completed the Spelling practice');
});

単語の定義を調べる

ゲームの現在の単語の定義を提供する Cloud Functions 関数を作成できます。

index.js ファイルで、definitionOfSpellingWord の TODO を次のように置き換えます。

index.js

// Returns spelling word definition from Assistant session parameter
app.handle('definitionOfSpellingWord',  conv => {
  conv.add( 'It means ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].definition);
});

ユーザーのスペルの回答を確認する

ゲームの現在の単語のスペルに関するユーザーの回答を検証する Cloud Functions 関数を作成できます。

index.js ファイルで、verifySpellingWord の TODO を次のように置き換えます。

index.js

// Verifies user spelling response
app.handle('verifySpellingWord', conv => {
  try {
    userResponse = conv.intent.params.userresponse.resolved.join("");
    if (userResponse.toLowerCase() === conv.session.params.vocabWord[conv.session.params.vocabWordIndex].word.toLowerCase()) {
      conv.add('You are correct. Say next to continue.');
    }
    else {
      conv.add('Sorry, wrong answer. The correct answer is ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].answer + ' . Say next to continue.');
    }
  } catch (error) {
    conv.add('Sorry. I did not understand your response' );
  }
});
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);

すべての関数をデプロイする

Cloud Functions の関数は、Firebase にデプロイした後にのみ有効になります。

spelling-functions-start ディレクトリのルートから、次のコマンドを実行します。

$ firebase deploy --only functions

コンソールに次のような出力が表示されます。

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
⚠  functions: missing necessary APIs. Enabling now...
i  env: ensuring necessary APIs are enabled...
⚠  env: missing necessary APIs. Enabling now...
i  functions: waiting for APIs to activate...
i  env: waiting for APIs to activate...
✔  env: all necessary APIs are enabled
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (X.XX KB) for uploading
✔  functions: functions folder uploaded successfully
i  starting release process (may take several minutes)...
i  functions: creating function createSpellingPracticeWord(us-central1)...
✔  functions[createSpellingPracticeWord(us-central1)]: Successful create operation.
i  functions: creating function ActionsOnGoogleFulfillment(us-central1)...
✔  functions[ActionsOnGoogleFulfillment(us-central1)]: Successful create operation.

✔  Deploy complete!
Project Console: https://console.firebase.google.com/project/spelling-practice-1234/overview

ActionsOnGoogleFulfillment 関数の HTTP エンドポイント URL をメモしておきます。エンドポイントを取得するには、Firebase コンソールを開き、[spelling-practice] プロジェクトをクリックします。Functions ダッシュボードを開いて、関数エンドポイントを表示します。

332cb0437411a242.png

必要な関数をすべて追加しました。では、Cloud Firestore の設定に進みましょう。

8. Cloud Firestore を有効にする

Cloud Firestore を有効にする必要があります。

Firebase コンソールの [ビルド] セクションで、[Firestore] をクリックします。次に、[データベースを作成] をクリックします。

5c0b4abf4410ffcf.png

Cloud Firestore 内のデータへのアクセスは、セキュリティ ルールによって制御されます。まず、データに関する基本的なルールを設定する必要があります。[Firestore] をクリックし、Firebase コンソールの [ルール] タブで次のルールを追加して、[公開] をクリックします。

次のルールは、データアクセスをログインしているユーザーに制限し、認証されていないユーザーによる読み取りや書き込みを防ぎます。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      //
      // WARNING: These rules are insecure! We will replace them with
      // more secure rules later in the codelab
      //
      allow read, write: if request.auth != null;
    }
  }
}

9. スペルミス単語データを Cloud Firestore に追加する

このステップでは、スペルミス単語データを Cloud Firestore に書き込んで、アシスタント(およびゲーム)用の単語のリストを生成します。

Cloud Firestore のデータは、コレクション、ドキュメント、フィールド、サブコレクションで構成されます。ゲームの各単語は、wordlist という最上位のコレクションに独自のドキュメントとして保存されます。Firestore コレクションに新しいドキュメントが作成されるたびに、createSpellingPracticeWord 関数がトリガーされ、Dictionary API サービスから単語の詳細が取得されます。

Cloud Firestore コレクションを作成する

  1. Firebase コンソールで Cloud Firestore セクションに移動します。
  2. [+ コレクションを開始] をクリックします。
  3. [コレクション ID] テキスト ボックスに「wordlist」と入力し、[次へ] をクリックします。

1b4ccadb90f52f02.png

次に、単語のドキュメントを作成します。agreement

  1. [ドキュメント ID] テキスト ボックスに「agreement」と入力します。
  2. [フィールド] テキスト ボックスに「word」と入力し、[] テキスト ボックスに「agreement」と入力します。
  3. [保存] をクリックします。

379037e011e8511e.png

このドキュメントを Cloud Firestore に追加すると、createSpellingPracticeWord 関数がトリガーされ、単語の定義の詳細が取得されます。単語ごとに新しいドキュメントを作成して、単語を追加します(例: awe、car、true、を向上させる、もっと良い、通勤、...)。

10. Google アシスタントを設定する

以降のセクションでは、Google アシスタントの開発環境をセットアップして Actions プロジェクトを作成する方法について説明します。

Google の権限の設定を確認する

この Codelab で構築するアクションをテストするには、必要な権限を有効にしてシミュレータがアクションにアクセスできるようにする必要があります。権限を有効にする手順は次のとおりです。

  1. [アクティビティ管理] ページに移動します。
  2. まだログインしていない場合は、Google アカウントにログインします。
  3. 次の権限を有効にします。
  • ウェブとアプリのアクティビティ
  • [ウェブとアプリのアクティビティ] で、[Chrome の履歴と Google サービスを使用するサイト、アプリ、デバイスでのアクティビティを含める] の横にあるチェックボックスをオンにします。

c988e1e639e6d6e1.png

Actions プロジェクトを作成する

Actions プロジェクトは、アクションのコンテナの役割を果たします。この Codelab の Actions プロジェクトを作成する手順は次のとおりです。

  1. Actions Console を開きます。
  2. [新しいプロジェクト] をクリックします。
  3. 利用規約に同意する

b174d45710b8086b.png

  1. Firebase コンソールを使用して作成した spelling-practice-codelab を入力または選択します。(この名前は内部参照用です。後でプロジェクトの表示名を設定することもできます)。

a2951de5d2001fac.png

  1. [Import project] をクリックします。
  2. [What kind of Action do you want to build?](アクションの種類を選んでください)画面で [Custom](カスタム)カードを選択します。
  3. [次へ] をクリックします。
  4. [空のプロジェクト] カードを選択します。
  5. [Start building](始める)をクリックします。
  6. 表示名に「スペルチェックの練習」と入力し、[保存] をクリックします。

ユーザーは、呼び出しによってアクションとの会話を開始します。たとえば、「OK Google, スペル練習に話しかけて」というフレーズで、Spelling Practice というアクションを呼び出すことができます。この場合は、Spelling Practice がアクションの「表示名」です。

アクションを本番環境にデプロイするには、表示名が必要です。ただし、アクションをテストするために表示名を定義する必要はありません。代わりに、シミュレータで「Talk to my test app」(テスト用アプリにつないで)というフレーズを使ってアクションを呼び出すことができます。

フルフィルメントの構成

この Codelab で作成してデプロイした Cloud Functions のイベント ハンドラをアシスタントに接続する必要があります。

フルフィルメントを構成する手順は次のとおりです。

  1. サイドバーの [Webhook] をクリックします。
  2. フルフィルメント オプションとして [Https エンドポイント] を選択します。

d523bf003e96e66f.png

  1. [HTTPS エンドポイント] テキスト ボックスに関数のエンドポイントの URL を入力し、[保存] をクリックします。

be53e2cd0d914d54.png

次のセクションでは、Actions Console でメイン呼び出しのプロンプトをカスタマイズします。

メイン呼び出しを設定する

メイン呼び出しを編集して、ユーザーがアクションを呼び出した後の動作を定義する必要があります。

Actions Builder のデフォルトでは、呼び出しがトリガーされたときの応答として汎用のプロンプト「Start building your Action by defining main invocation.」(アクションを構築するには、最初にメイン呼び出しを定義します。」)が返されます。

ユーザーから呼び出されたときにアクションが応答として送信するプロンプトを変更する手順は、次のとおりです。

  1. ナビゲーションで [Main invocation](メイン呼び出し)をクリックします。

9ff088c04c995cde.png

  1. Call your webhook をオンにして、テキスト ボックスにイベント ハンドラ名 getSpellingWordList を追加します。
  2. コードエディタで、speech フィールドのテキストを、次のウェルカム メッセージに置き換えます。Welcome to Spelling Practice

注: プロンプトの編集には、YAML 形式または JSON 形式のいずれかを使用できます。

  1. [保存] をクリックします。

シミュレータでメイン呼び出しをテストする

Actions Console には、アクションのテストに使用できる「シミュレータ」というウェブツールが用意されています。インターフェースはハードウェア デバイスとその設定をシミュレートするため、スマートディスプレイ、スマートフォン、スピーカー、KaiOS で実行されているかのようにアクションと会話できます。

シミュレータでアクションのメイン呼び出しをテストする手順は次のとおりです。

  1. 上部のナビゲーション バーにある [Test](テスト)をクリックしてシミュレータに移動します。
  2. シミュレータでアクションを呼び出すには、左上の入力フィールドに「Talk to Spelling Practice」と入力してから、キーボードの Enter キーを押します。

651fc8da1ac9aa0a.png

アクションのメイン呼び出しをトリガーすると、カスタマイズされたウェルカム メッセージでアシスタントが応答します。この段階では、アシスタントが挨拶で応答して会話が終了します。

イベントログを表示する

[Test] タブを開くと、右側のパネルに会話の履歴が「イベントログ」として表示されます。各イベントログには、会話のターン中に発生したイベントが表示されます。イベントログを表示するには、イベントの前のグレーのアイコンをクリックします。

作成中のアクションのイベントログは 1 つのみで、ユーザーの入力(「Talk to Spelling Practice」)とアクションからの応答の両方が表示されます。次のスクリーンショットは、アクションのイベントログを示しています。

a6fb192f94426824.png

11. スペルの練習のための会話を構築する

前のセクションでは、ユーザーがアクションを呼び出した直後の動作を定義しました。このセクションでは、アクションによる会話の続きを作成します。スペルチェックの練習には 4 つのシーンがあり、実行する前に各シーンを有効にする必要があります。シーンをアクティブにする方法として最も一般的なのは、そのシーンに遷移するときにアクティブにする方法です。ユーザー入力がシーンのユーザー インテントに一致したら、そのインテントが別のシーンへの遷移をトリガーするときにアクティブにするようにアクションを設定します。

メイン呼び出しから開始シーンに遷移する

このセクションでは、Start という新しいシーンを作成し、スペル プラクティスを開始するかどうかをユーザーに尋ねるプロンプトを送信できるようにします。また、メイン呼び出しからこの Start シーンへの遷移も追加します。

シーンを作成して遷移を追加する手順は次のとおりです。

  1. 上部のナビゲーションで [Develop] をクリックします。次に、左側のナビゲーションで [Main invocation] をクリックします。
  2. 右側の [移行] セクションでプルダウン メニューをクリックし、テキスト フィールドに「Start」と入力します。

dd4f1807a57f794d.png

  1. [追加] をクリックします。これにより、Start というシーンが作成され、アクションがユーザーにウェルカム プロンプトを送った後に Start シーンに移行するよう指示します。
  2. 左側のナビゲーションで [Scenes] をクリックして、シーンのリストを表示します。
  3. [Scenes] で [Start] をクリックして Start シーンを表示します。
  4. Start シーンの [On Enter] セクションで [+] をクリックします。
  5. [Send prompts] をオンにします。
  6. speech フィールド(Enter the response that users will see or hear...)の文を、ユーザーに尋ねる質問(Use phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?)に置き換えます。

候補ワードには、アクションがユーザー入力として処理するクリック可能な候補が表示されます。このセクションでは、先ほど設定したプロンプト(Do you want to play

Spelling Practice

?)を追加して、画面付きデバイスのユーザーをサポートします。

Start シーンのプロンプトに候補ワードを追加する手順は次のとおりです。

  1. Start シーンで、コードエディタの下にある候補をクリックします。この操作で、候補ワードが 1 つ追加されます。
  2. title フィールドで、Suggested Response'Yes' に置き換えます。
  3. 同じ形式を使用して、'No''Help with Phonetics' という候補ワードを手入力で追加します。コードの該当部分は次のようになります。
  4. [保存] をクリックします。

5ff2ecdc56801b91.png

シミュレータでアクションをテストする

ここまでの変更により、メイン呼び出しから 開始シーンに遷移し、続行するかどうかをユーザーに尋ねることができるようになりました。シミュレーション ディスプレイには候補ワードも表示されます。

シミュレータでアクションをテストする手順は次のとおりです。

  1. ナビゲーション バーで [Test] をクリックしてシミュレータに移動します。
  2. シミュレータでアクションをテストするには、[入力] 欄に「Talk to Spelling Practice」と入力します。
  3. Enter キーを押すと、アクションは Main invocation プロンプトで応答し、先ほど追加した Start シーンのプロンプトを使って「Welcome to Spelling Practice. フォネティック コードを使用して単語のスペルを入力します。たとえば、a は alpha、b は bravo、c は charlie などです。続行しますか?」

このやり取りを次のスクリーンショットに示します。

338c9570b02a618e.png

  1. 候補ワードの [Yes] または [No] または [Help with Phonetics] をクリックしてプロンプトに応答します。(「Yes」(はい)または「No」(いいえ)または「Help with Phonetics」(音声入力のサポート)と音声で応答するか、入力欄に「Yes」または「No」または「Help with Phonetics」と入力することもできます)。

プロンプトに応答すると、アクションから入力を認識できないことを示すメッセージ「Sorry, I didn't catch that. Can you try again?」(認識できませんでした。もう一度お願いします)が返されます。アクションがまだ「Yes」や「No」を認識して応答できるようには設定されていないため、入力に一致するのは NO_MATCH インテントとなります。

デフォルトでは、NO_MATCH システム インテントは汎用的なレスポンスを提供しますが、これらのレスポンスをカスタマイズして、ユーザーが入力を理解できなかったことをユーザーに示すことができます。ユーザー入力が 3 回連続で一致しない場合、アシスタントはユーザーとアクションの会話を終了します。

no と音声文字変換のインテントを追加する

アクションが提起した質問にユーザーが回答できるようになったので、次はユーザーの質問内容が(「はい」「いいえ」発音記号に関するヘルプ)。以下のセクションでは、ユーザーが「はい」「いいえ」、または「発音記号に関するヘルプ」と言った場合に一致するユーザー インテントを作成します。Start シーンに追加します。ここではシステム インテント yes を使用し、その他のインテントも作成します。

no インテントを作成する

次に、no インテントを作成して、ユーザーがゲームをプレイしたくないユーザーを把握し、それに応答できるようにする必要があります。このインテントを作成する手順は次のとおりです。

  1. ナビゲーションで [Develop] をクリックします。
  2. ナビゲーションで [Custom Intents] をクリックし、インテントのリストを開きます。
  3. インテントのリストの下部にある [+](プラス記号)をクリックします。新しいインテントに no という名前を付けて、Enter キーを押します。
  4. [no] をクリックして no インテント ページを開きます。
  5. [トレーニング フレーズを追加] セクションで、[フレーズを入力] テキスト ボックスをクリックして、次のフレーズを入力します。
  • No
  • N
  • I don't want
  • nope

98b0c9a7b67ea9b9.png

  1. [保存] をクリックします。

no インテントを Start シーンに追加する

これで、アクションはユーザーが「no」や「no」(「nope」など)に似た内容を表していることを認識できるようになりました。ユーザーが応答しているのは Start プロンプト(「Welcome to Spelling Practice. 単語のつづりには、発音文字を使用します。たとえば、a は alpha、b は bravo、c は charlie などです。続行しますか?」)。

このインテントを Start シーンに追加する手順は次のとおりです。

  1. ナビゲーションで [Start] シーンをクリックします。
  2. Start シーンで、ユーザー インテントの処理の横にある +(プラス記号)をクリックします。
  3. [Intent](インテント)のプルダウンで [no] を選択します。

51f752e78c8b4942.png

  1. [Send prompts] をクリックし、speech フィールドのテキストを次のメッセージに置き換えます。Good Bye

エディタのコードの該当部分は次のようになります。

candidates:
  - first_simple:
      variants:
        - speech: >-
             Goodbye.
  1. [Transition] のプルダウンで、[End conversation] を選択します。
  2. [保存] をクリックします。

シミュレータで no インテントをテストする

この時点で、アクションはユーザーがゲームをプレイしたくないタイミングを理解し、適切なレスポンスを返します。

シミュレータでこのインテントをテストする手順は次のとおりです。

  1. ナビゲーション バーで、[Test] をクリックします。
  2. 入力欄に「Talk to Spelling Practice」と入力し、Enter キーを押します。
  3. [入力] フィールドに「No」と入力して、Enter キーを押します。または、[候補なし] チップをクリックします。

7727a456b522f31b.png

システム YES インテントを Start シーンに追加する

ユーザーが Start プロンプト(「Welcome to Spelling Practice. 単語のつづりには、発音文字を使用します。たとえば、a は alpha、b は bravo、c は charlie などです。続行しますか?」)。

このユーザー インテントを Start シーンに追加する手順は次のとおりです。

  1. ナビゲーションで [Start] シーンをクリックします。
  2. Start シーンで [User intent handling] の横にある [+](プラス記号)をクリックします。
  3. [All System Intents] で、インテントのプルダウンで [YES] を選択します。

f6cbe789cde49e8f.png

  1. [Call your webhook] をクリックし、event handler テキスト ボックスを、先ほど作成した関数 getSpellingWordList に置き換えます。
  2. [切り替え] セクションでプルダウンをクリックし、[会話を終了] を選択します。
  3. [保存] をクリックします。

シミュレータで YES インテントをテストする

この時点で、アクションはユーザーがゲームをプレイしたいタイミングを理解し、適切なレスポンスを返します。

シミュレータでこのインテントをテストする手順は次のとおりです。

  1. ナビゲーション バーで、[Test] をクリックします。
  2. シミュレータでアクションをテストするには、[Input] フィールドに「Talk to Spelling Practice」と入力して Enter キーを押します。
  3. [入力] 欄に「Yes」と入力し、Enter キーを押します。または、候補ワード Yes をクリックします。

アクションは、スペル練習用のすべての単語のリストを取得し、セッションに保存します。その後、セッションが終了します。先ほどの設定で YES インテントの遷移として End conversation を選択したためです。

Phonetics インテントを作成する

Phonetics インテントを作成する手順は次のとおりです。

  1. ナビゲーションで [Develop] をクリックします。
  2. ナビゲーションで [Custom Intents] をクリックし、インテントのリストを開きます。
  3. インテントのリストの下部にある [+](プラス記号)をクリックします。新しいインテントに phonetics という名前を付け、Enter キーを押します。
  4. phonetics インテントをクリックして、phonetics インテント ページを開きます。
  5. [Add training phrases] セクションで、[Enter Phrase] テキスト ボックスをクリックし、次のフレーズを入力します。
  • how do I spell words
  • phonetics
  • help me with phonetics
  • phonetic alphabet

1455bdfca8dae46.png

  1. [保存] をクリックします。

phonetics インテントを Start シーンに追加する

これで、アクションはユーザーが「phonetics」インテントを返したときに理解できるようになりました。ユーザーが応答しているのは Start プロンプト(「Welcome to Spelling Practice. フォネティック コードを使用して単語を綴ります。たとえば、a はアルファ、b はブラボー、c はチャーリーなどです。続行しますか?」)が表示されます。

このユーザー インテントを Start シーンに追加する手順は次のとおりです。

  1. ナビゲーションで [Start] シーンをクリックします。
  2. Start シーンで、[User intent handle] の横にある [+](プラス記号)をクリックします。
  3. インテントのプルダウンで [phonetics] を選択します。

67ee2e08000b2aee.png

  1. [切り替え] セクションでプルダウンをクリックし、[会話を終了] を選択します。
  2. [保存] をクリックします。

開始シーンからつづりシーンへの移行

このセクションでは、スペルという新しいシーンを作成し、音声文字変換を使用して単語のスペルを入力するようユーザーにプロンプトを送信します。

このシーンを作成して遷移を追加する手順は次のとおりです。

  1. 上部のナビゲーションにある [Develop](開発)をクリックし、左側のナビゲーションで [Start] シーンをクリックします。
  2. [ユーザーの意図の処理] セクションで when actions.intent.YES is matched をクリックし、右側の [遷移] セクションでプルダウン メニューをクリックし、テキスト フィールドに「Spelling」と入力します。
  3. [追加] をクリックします。これで、Spelling というシーンが作成され、YES インテントとの一致後に Spelling シーンに遷移するようにアクションに指示されます。
  4. 左側のナビゲーションで [Scenes] を開き、シーンのリストを表示します。
  5. [Scenes] で [Spelling] をクリックし、Spelling シーンを表示します。
  6. Spelling シーンの [On enter](開始時)で [+] をクリックします。
  7. [Webhook を呼び出す] をクリックし、イベント ハンドラのテキスト ボックスに「get スペルチェック Word」と入力します。
  8. [Send prompts] を選択します。
  9. speech フィールドEnter the response that users will see or hear...)の文を {} に置き換えます。実際のプロンプトは Webhook によって入力されます。

候補ワードには、アクションがユーザー入力として処理するクリック可能な候補が表示されます。

Spelling シーンのプロンプトに候補ワードを追加する手順は次のとおりです。

  1. Spelling シーンで、コードエディタの下にある [suggestions](候補)をクリックします。この操作により、候補ワードが 3 つ追加されます。
  2. title フィールドで、Suggested Response'Repeat' に置き換えます。
  3. 同じ形式を使用して、'Skip' という候補ワードを手入力で追加します。
  4. 同じ書式を使用して、「'Quit'」という名前の候補チップを手動で追加します。コードは次のスニペットのようになります。
  5. [保存] をクリックします。
suggestions:
      - title: 'Repeat'
      - title: 'Skip'
      - title: 'Quit'

e1d437f714ea1539.png

Repeat インテントを作成する

repeat インテントを作成する手順は次のとおりです。

  1. ナビゲーションで [Develop] をクリックします。
  2. ナビゲーションで [Custom Intents] をクリックし、インテントのリストを開きます。
  3. インテントのリストの最後にある +(プラス記号)をクリックします。新しいインテントに repeat という名前を付け、Enter キーを押します。
  4. repeat インテントをクリックして、definition インテント ページを開きます。
  5. [Add training phrases](トレーニング フレーズを追加)で、[Enter Phrase](フレーズを入力)テキスト ボックスをクリックし、次のフレーズを入力します。
  • one more time please
  • say the word again
  • repeat the word
  • tell me again
  • repeat

e61f0b9f80510bc9.png

  1. [保存] をクリックします。

repeat インテントを Spelling シーンに追加する

これで、アクションはユーザーが「repeat」インテントを返したときに理解できるようになりました。ユーザーが応答しているのは Spelling プロンプト(「スペルをフォニック アルファベットで入力してください」)であるため、repeat ユーザー インテントを Spelling シーンに追加しましょう。

このユーザー インテントを Spelling シーンに追加する手順は次のとおりです。

  1. ナビゲーションで [スペルチェック] シーンをクリックします。
  2. Spelling シーンで、[User intent handle] の横にある [+](プラス記号)をクリックします。
  3. インテントのプルダウンで [Repeat] を選択します。

5cfd623b25bedbed.png

  1. [Webhook を呼び出す] をオンにして、イベント ハンドラのテキスト ボックスに「repeatSpellingWord」と入力して、単語の定義を取得します。
  2. [Send prompts] をオンにします。
  3. speech フィールドの文(Enter the response that users will see or hear...)を「'」に置き換えます。実際のプロンプトは Webhook によって入力されます。

[繰り返しが一致したとき] に候補ワードを追加

  1. 繰り返しが一致したとき」[ユーザー インテントの処理] で、コードエディタの下にある [提案] をクリックします。この操作により、候補ワードが 3 つ追加されます。
  2. title フィールドで、Suggested Response'Skip' に置き換えます。
  3. 同じ書式を使用して、「'Quit'」という名前の候補チップを手動で追加します。コードは次のスニペットのようになります。
suggestions:
      - title: 'Skip'
      - title: 'Quit'

ab40e4b0c432b97c.png

  1. [保存] をクリックします。

definition インテントを作成する

definition インテントを作成する手順は次のとおりです。

  1. ナビゲーションで [Develop] をクリックします。
  2. ナビゲーションで [Custom Intents] をクリックし、インテントのリストを開きます。
  3. インテントのリストの下部にある [+](プラス記号)をクリックします。新しいインテントに definition という名前を付けて、Enter キーを押します。
  4. definition インテントをクリックして、definition インテント ページを開きます。
  5. [Add training phrases](トレーニング フレーズを追加)で、[Enter Phrase](フレーズを入力)テキスト ボックスをクリックし、次のフレーズを入力します。
  • I would like to know the definition
  • tell me the definition
  • what does it mean
  • meaning
  • definition
  • what is the definition?

c1b88a9c0b1ac082.png

  1. [保存] をクリックします。

definition インテントを Spelling シーンに追加する

これで、アクションはユーザーが「定義」インテントを返したときに理解できるようになりました。definition ユーザー インテントは Spelling シーンに追加できます。これは、ユーザーが Spelling プロンプト(「発音文字を使って単語をつづる」など)に応答するためです。

このユーザー インテントを Spelling シーンに追加する手順は次のとおりです。

  1. ナビゲーションで [スペルチェック] シーンをクリックします。
  2. Spelling シーンで、[User intent handle] の横にある [+](プラス記号)をクリックします。
  3. インテントのプルダウンで [definition] を選択します。

646bdcac3ad3eb0c.png

  1. [Webhook を呼び出す] をオンにして、イベント ハンドラのテキスト ボックスに「definitionOfSpellingWord」と入力して、単語の定義を取得します。
  2. [Send prompts] チェックボックスをオンにします。
  3. speech フィールドの文(Enter the response that users will see or hear...)を「‘」に置き換えます。実際のプロンプトは Webhook によって入力されます。

Webhook レスポンスに候補ワードを追加する

  1. Start シーンで、コードエディタの下にある [suggestions](候補)をクリックします。この操作で、候補ワードが 3 つ追加されます。
  2. title フィールドで、Suggested Response'Skip' に置き換えます。
  3. 同じ書式を使用して、「'Quit'」という名前の候補チップを手動で追加します。コードは次のスニペットのようになります。
suggestions:
      - title: 'Skip'
      - title: 'Quit'

25227545839d933f.png

  1. [保存] をクリックします。

skip インテントを作成する

skip インテントを作成する手順は次のとおりです。

  1. ナビゲーションで [Develop] をクリックします。
  2. ナビゲーションで [Intents] をクリックし、インテントのリストを開きます。
  3. インテントのリストの下部にある [+](プラス記号)をクリックします。新しいインテントに skip という名前を付けて、Enter キーを押します。
  4. skip インテントをクリックして、skip インテント ページを開きます。
  5. [Add training phrases](トレーニング フレーズを追加)で、[Enter Phrase](フレーズを入力)テキスト ボックスをクリックし、次のフレーズを入力します。
  • next word
  • go next
  • next
  • skip
  • skip word

d1c4908a3d7882f8.png

  1. [保存] をクリックします。

Skip インテントを Spelling シーンに追加する

これで、アクションはユーザーが「スキップ」のインテントを返したときに理解できるようになりました。skip ユーザー インテントは Spelling シーンに追加できます。これは、ユーザーが Spelling プロンプト(「発音文字を使って単語を綴る」など)に応答するためです。

このユーザー インテントを Spelling シーンに追加する手順は次のとおりです。

  1. ナビゲーションで [スペルチェック] シーンをクリックします。
  2. Spelling シーンで [User intent handling] の横にある [+](プラス記号)をクリックします。
  3. インテントのプルダウンで [skip] を選択します。

5465f97542217964.png

  1. 右側の [移行] セクションで、プルダウン メニューをクリックして [Spelling] を選択します。

c8072485ca82bd3f.png

  1. [保存] をクリックします。

quit インテントを作成する

Quit インテントを作成する手順は次のとおりです。

  1. ナビゲーションで [Develop] をクリックします。
  2. ナビゲーションで [Intents] をクリックし、インテントのリストを開きます。
  3. インテントのリストの下部にある [+](プラス記号)をクリックします。新しいインテントに Quit という名前を付け、Enter キーを押します。
  4. Quit インテントをクリックして、定義インテント ページを開きます。
  5. [トレーニング フレーズの追加] セクションで、[フレーズを入力] テキスト ボックスをクリックして、次のフレーズを入力します。
  • I quit
  • Goodbye
  • Cancel
  • Exit
  • Quit

9916f77b8766541e.png

  1. [保存] をクリックします。

Quit インテントを Spelling シーンに追加する

これで、アクションはユーザーが「quit」インテントを返したときに理解できるようになりました。ユーザーが応答しているのは Spelling プロンプト(「スペルをフォニック アルファベットで入力してください」)であるため、quit ユーザー インテントを Spelling シーンに追加しましょう。

このユーザー インテントを Spelling シーンに追加する手順は次のとおりです。

  1. ナビゲーションで [スペルチェック] シーンをクリックします。
  2. Spelling シーンで [User intent handling] の横にある [+](プラス記号)をクリックします。
  3. インテントのプルダウンで [quit] を選択します。

5f62fb18a3653d66.png

  1. 右側の [移行] セクションで、プルダウン メニューをクリックして [End conversation] を選択します。1ffbe35a7bbbb4b0.png
  2. [保存] をクリックします。

phonetic_alphabet 型を作成する

このセクションでは、phonetic_alphabet という新しい型を作成します。この型は、単語のスペルを選択できる音標文字のオプションを指定します。また、選択肢の類義語が返された場合に備え、それぞれに似ている言葉もいくつか定義します。後のセクションで phonetic_alphabet 型をスロットに追加し、ユーザーの回答を取得できるようにします。

phonetic_alphabet 型を作成する手順は次のとおりです。

  1. ナビゲーションで [Develop] をクリックします。
  2. [Types] の [+](プラス記号)をクリックします。
  3. phonetic_alphabet」と入力して Enter キーを押します。
  4. phonetic_alphabet をクリックしてオプションを開きます。
  5. [この型がサポートする値の種類] セクションで、[単語と類義語] オプションを選択します。
  6. [エントリを追加] セクションに、次のエントリと対応する値を入力します。

a

アルファ、リンゴ、アムステルダム

b

ブラボー、バター、ボルチモア

c

charlie, cat, casablanca

d

delta、dog、denmark

e

echo, edward, edison

F

foxtrot, fox, florida

g

golf, george, gallipoli

h

hotel, harry, havana

i

india, ink, italia

J

ジュリエット、ジョニー、エルサレム

k

kilo、king、kilogramme

l

リマ、ラブ、ロンドン

m

マイク、お金、マダガスカル

n

november, new york, nancy

o

oscar、orange、oslo

p

papa, paris, peter

q

ケベック、クイーン

r

romeo、roma、robert

s

シエラ、砂糖、サンティアゴ

t

タンゴ、トミー、トリポリ

u

制服、傘、おじ

v

victor, vinegar, Valencia

w

whiskey, william, washington

×

X 線

y

ヤンキー、黄、ヨーカー

z

ズールー、シマウマ、チューリッヒ

Key-Value テーブルは以下のようになります。

5b5a5cd9fa557e1b.png

  1. [保存] をクリックします。

スロット充填を構成する

次に、スペルチェック シーンにスロットフィルを設定する必要があります。スロット充填ロジックを構成する手順は次のとおりです。

  1. ナビゲーションで [Spelling] シーンをクリックします。
  2. Spelling シーンで [Slot filling](スロットフィル)の [+](プラス記号)をクリックします。
  3. [スロット名を入力] フィールドに、スロット名として userresponse を追加します。
  4. [Select type] プルダウンで、スロットタイプとして [phonetic_alphabet] を選択します。
  5. [このスロットは値のリストを受け入れる] をオンにします
  6. [このスロットは必須です] チェックボックスをオンにします。
  7. [スロット値のライトバックをカスタマイズする] オプションを選択し、セッション パラメータのテキスト ボックスに userresponse を入力します。

ba57a419877a07f3.png

  1. [保存] をクリックします。

Spelling 画面に条件を追加

Spelling シーンに Condition を追加する手順は次のとおりです。

  1. ナビゲーションで [スペルチェック] シーンをクリックします。
  2. Spelling シーンで [Condition] の横にある +(プラス記号)をクリックします。
  3. 条件として「scene.slots.status == "FINAL"」と入力します
  4. [Call your webhook](Webhook を呼び出す)にチェックを入れ、イベント ハンドラのテキスト ボックスに「verify スペルチェック Word」と入力して、ユーザーのレスポンスを確認します。
  5. [Send prompts] チェックボックスをオンにします。
  6. speech フィールド(Enter the response that users will see or hear...)の文を {} に置き換えます。実際のプロンプトは Webhook によって入力されます。

Webhook レスポンスに候補ワードを追加する

  1. Start シーンで、コードエディタの下にある [suggestions](候補)をクリックします。この操作により、候補ワードが 3 つ追加されます。
  2. title フィールドで、Suggested Response'Next' に置き換えます。
  3. 同じ形式を使用して、'Quit' という候補ワードを手入力で追加します。コードは次のようになります。
suggestions:
      - title: 'Next'
      - title: 'Quit'

ac3d7a9366ebc1b1.png

  1. [保存] をクリックします。

12. シミュレータでスペルの練習をテストする

シミュレータでアクションをテストする手順は次のとおりです。

  1. ナビゲーション バーで [Test] をクリックしてシミュレータに移動します。
  2. シミュレータでアクションをテストするには、[入力] 欄に「Talk to Spelling Practice」と入力します。
  3. Enter キーを押すと、アクションは、Main invocation プロンプトと、追加された Start シーン プロンプト「Welcome to スペルチェックの練習。フォネティック コードを使用して単語を綴ります。たとえば、a は alpha、b は bravo、c は charlie などです。続行しますか?」
  4. はい」と話しかけて続行します
  5. シミュレータが単語の音声を再生してスペルを表示します
  6. 単語のつづりとして、音標文字を使用できます。たとえば「better」の場合は、「bravo echo tango tango echo romeo」と発音するか、入力します。
  7. シミュレータから、正解または不正解の回答が返されます。
  8. 次へ」と話しかけて次の単語に進むか、「終了」と話しかけてゲームループを終了します。

13. 完了

これで、スペルチェックの演習ゲームの作成が完了しました。

Cloud Firestore、Cloud Functions、Google Assistant Action Builder を使ってゲームを開発するために必要な主な手順を学習しました。

学習した内容

  • Cloud Firestore を操作する方法
  • スロットを使用してユーザーからデータを収集する方法
  • ユーザーの入力を処理して応答を返す
  • 条件を使用してシーンにロジックを追加する方法
  • ゲームループを追加する方法

その他の学習リソース

Google アシスタントのアクションの構築については、以下のリソースをご覧ください。

プロジェクトをクリーンアップする [推奨]

料金が発生するのを避けるため、使用する予定のないプロジェクトは削除することをおすすめします。この Codelab で作成したプロジェクトを削除する手順は次のとおりです。

  1. Firebase プロジェクトとリソースを削除する手順については、プロジェクトのシャットダウン(削除)をご覧ください。

注意: Google Cloud コンソールの [設定] ページで、削除するプロジェクトが正しく選択されていることを確認してください。

  1. 省略可: Actions Console からプロジェクトをすぐに削除するには、プロジェクトの削除セクションに記載されている手順を行います。この手順で削除していないプロジェクトは、約 30 日後に自動的に削除されます。

@ActionsOnGoogle とTwitter で @Firebase を使用して最新のお知らせをチェックしてください。作成したものは、#GoogleIO でツイートしてください。