Игра для тренировки правописания с использованием Google Assistant и Cloud Firestore

1. Обзор

Платформа разработчиков Google Assistant позволяет создавать программное обеспечение для расширения функциональности Google Assistant, виртуального личного помощника, на более чем 1 миллиарде устройств, включая интеллектуальные колонки, телефоны, автомобили, телевизоры, наушники и многое другое. Пользователи вовлекают Ассистента в разговор, чтобы сделать что-то, например купить продукты или заказать поездку. Как разработчик, вы можете использовать платформу разработчика Assistant, чтобы легко создавать и управлять восхитительными и эффективными диалогами между пользователями и вашей собственной сторонней службой выполнения заказов.

В этой лаборатории кода рассматриваются концепции среднего уровня для разработки с помощью Google Assistant, Cloud Functions и Cloud Firestore. В этой лаборатории кода вы создадите игру под названием «Практика правописания», которая использует Google Assistant, чтобы просить пользователей произносить слова по буквам.

Что ты построишь

В этой лаборатории кода вы создадите сложную игру со следующей функциональностью:

  • Получает от пользователя ответы на вопросы по правописанию и, в зависимости от значения, изменяет диалоговые подсказки.
  • Отвечает подсказками, связанными с написанием слова, например его определением или повторением слова.
  • Создает игровой цикл, чтобы пользователь мог снова взаимодействовать с Ассистентом после написания слова.

Прежде чем приступить к созданию, вы можете взаимодействовать с живым действием на своем устройстве с поддержкой Google Assistant, сказав: «Эй, Google, поговори с практикой правописания». Путь по умолчанию для этого действия для возвращающегося пользователя выглядит следующим образом:

Когда вы закончите эту кодовую работу, завершенное действие будет иметь следующий диалоговый поток:

2e9f94dc0ceafc96.png

Что вы узнаете

  • Как взаимодействовать с Cloud Firestore
  • Как использовать слоты для сбора данных от пользователя
  • Как обработать ввод пользователя и вернуть ответ
  • Как использовать условия для добавления логики в сцену
  • Как добавить игровой цикл

Что вам понадобится

Предварительные требования для этой лаборатории кода включают следующее:

  • Веб-браузер, например Google Chrome.
  • IDE для написания облачных функций.
  • Способ оплаты. В этой лаборатории кода используются облачные функции для 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 Analytics, поскольку вы не будете использовать Analytics для этого приложения.

Дополнительные сведения о проектах Firebase см. в разделе Общие сведения о проектах Firebase .

Перейти на тарифный план Blaze

Чтобы использовать Cloud Functions для Firebase, вам необходимо обновить свой проект Firebase до тарифного плана Blaze , что означает, что вы прикрепите к своему проекту платежный аккаунт Google Cloud. Для этого вам потребуется предоставить кредитную карту или другой способ оплаты.

Все проекты Firebase, в том числе включенные в план Blaze, по-прежнему имеют доступ к бесплатным квотам использования облачных функций. Шаги, описанные в этой кодовой лаборатории, будут соответствовать ограничениям на бесплатное использование. Однако вы увидите небольшую плату ( около 0,03 доллара США ) от облачного хранилища, которое используется для размещения образов сборок облачных функций.

4. Установите интерфейс командной строки Firebase.

Firebase CLI (интерфейс командной строки) позволяет вам развертывать облачные функции.

Существует несколько вариантов установки Firebase CLI в зависимости от вашей операционной системы и варианта использования. Следующие шаги описывают наиболее распространенный вариант, если вы также используете облачные функции.

  1. Убедитесь, что вы установили npm , который обычно поставляется с Node.js.
  2. Установите или обновите CLI, выполнив следующую команду npm:
$ npm -g install firebase-tools
  1. Убедитесь, что CLI установлен правильно, выполнив:
$ firebase --version

Убедитесь, что версия Firebase CLI — 9.0.0 или новее, чтобы в нем были все новейшие функции, необходимые для облачных функций. Если нет, запустите npm install -g firebase-tools для обновления, как показано выше.

  1. Авторизуйте Firebase CLI, выполнив:
$ firebase login
  1. В каталоге правописания-функций-start настройте интерфейс командной строки Firebase для использования вашего проекта Firebase. Запустите следующую команду, выберите идентификатор проекта и следуйте инструкциям. При появлении запроса вы можете выбрать любой псевдоним, например, codelab .
$ firebase use --add

5. Каталог функций

Теперь вы добавите функциональность с помощью Firebase SDK для облачных функций для создания серверной части игры Spelling Practice .

Облачные функции позволяют вам иметь код, который работает в облаке без необходимости настраивать сервер. Эта лаборатория покажет вам, как создавать функции, которые реагируют на события аутентификации Firebase, облачного хранилища и базы данных Firebase Realtime. Начнем с аутентификации.

При использовании Firebase SDK для облачных функций код вашей функции будет находиться в каталоге functions (по умолчанию). Чтобы вам было проще, мы уже создали файл functions/index.js , в котором будет размещаться ваш код. Не стесняйтесь проверить каталог functions , прежде чем двигаться дальше.

$ cd functions
$ ls

Код вашей функции также является приложением Node.js , поэтому ему нужен package.json , который предоставляет некоторую информацию о вашем приложении и перечисляет зависимости.

Если вы не знакомы с Node.js , вам будет полезно узнать о нем больше, прежде чем продолжить изучение кода.

В файле package.json уже перечислены две необходимые зависимости: Firebase SDK для облачных функций и Firebase Admin SDK . Чтобы установить их локально, запустите npm install из каталога functions :

$ 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. Перейдите к следующему шагу лаборатории кода, чтобы импортировать модули.

6. Импортируйте необходимые модули.

Для этой лаборатории кода требуется три модуля.

  • Модуль firebase-functions позволяет нам писать триггеры для наших облачных функций.
  • Модуль firebase-admin позволяет нам использовать платформу Firebase на сервере с доступом администратора, например, для записи в Cloud Firestore.
  • Библиотека выполнения Actions SDK Node.js выполняет обработчики Actions SDK для Google Assistant.
  1. Установите Actions SDK, выполнив следующую команду npm:
$ npm install @assistant/conversation
  1. В файле index.js замените первое TODO следующим.

Эти изменения импортируют каждый из необходимых модулей.

Кроме того, Firebase Admin SDK можно настроить автоматически при развертывании в среде Cloud Functions или другом облачном контейнере Google. Вот что происходит, когда мы вызываем 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.

Вы будете использовать общедоступный API dictionaryapi.dev для получения определений слов.

В файле index.js замените TODO для getWordDetailsFromDictionaryAPI следующим:

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 создается новый документ. Он вызовет API dictionaryapi.dev для получения определений слов с помощью функции getWordDetailsFromDictionaryAPI , которую мы написали чуть выше.

В файле index.js замените TODO для createSpellingPracticeWord следующим:

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 для Ассистента. Для этого мы используем обработчик приложения.

В файле index.js замените TODO для getSpellingWordList следующим.

Добавление этой функции в специальный 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;
    });
  });
})

Получить слово из сеанса Ассистента

Вы можете написать облачную функцию, которая возвращает следующее написанное слово из списка слов.

В файле index.js замените TODO для getSpellingWord на следующее:

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');
});

Включите игру, чтобы повторить слово

Вы можете написать облачную функцию, которая повторяет текущее слово для игры.

В файле index.js замените TODO для repeatSpellingWord следующим:

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');
});

Получить определение слова

Вы можете написать облачную функцию, которая дает определение текущего слова для игры.

В файле index.js замените TODO для definitionOfSpellingWord следующим образом:

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);
});

Проверьте орфографическую реакцию пользователя

Вы можете написать облачную функцию, которая проверяет реакцию пользователя на то, как написать текущее слово для игры.

В файле index.js замените TODO verifySpellingWord следующим:

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);

Разверните все свои функции

Ваши облачные функции станут активными только после того, как вы развернете их в 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

Запишите URL-адрес конечной точки Http функции ActionsOnGoogleFulfillment для дальнейшего использования. Чтобы получить конечную точку, откройте консоль Firebase и выберите проект практики правописания . Откройте панель мониторинга функций, чтобы просмотреть конечную точку функции.

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. В текстовом поле «Идентификатор коллекции» введите wordlist и нажмите «Далее» .

1b4ccadb90f52f02.png

Далее создадим документ для слова: соглашение.

  1. В текстовом поле «Идентификатор документа» введите agreement .
  2. В текстовом поле Поле введите word , а в текстовом поле Значение введите agreement .
  3. Нажмите Сохранить .

379037e011e8511e.png

Когда вы добавляете этот документ в Cloud Firestore, он запускает функцию createSpellingPracticeWord для получения сведений об определении слова. Добавьте больше слов (например: трепет, машина, правда, скажите, лучше, ездить на работу, ...), создав новый документ для каждого слова.

10. Настройте Google Ассистент

В следующих разделах описано, как настроить среду разработки Google Assistant и создать проект Actions.

Проверьте настройки разрешений Google

Чтобы протестировать действие, которое вы создаете в этой лаборатории кода, вам необходимо включить необходимые разрешения, чтобы симулятор мог получить доступ к вашему действию. Чтобы включить разрешения, выполните следующие действия:

  1. Перейдите на страницу управления активностью .
  2. Войдите в свою учетную запись Google, если вы еще этого не сделали.
  3. Включите следующие разрешения:
  • Активность в Интернете и приложениях
  • В разделе «Активность в Интернете и приложениях» установите флажок «Включить историю и активность Chrome на сайтах, приложениях и устройствах, использующих службы Google» .

c988e1e639e6d6e1.png

Создать проект действий

Ваш проект Actions — это контейнер для вашего Action. Чтобы создать проект Actions для этой лаборатории кода, выполните следующие действия:

  1. Откройте консоль действий .
  2. Нажмите Новый проект .
  3. Принять условия обслуживания

b174d45710b8086b.png

  1. Введите или выберите spelling-practice-codelab , созданную с помощью Firebase Console. (Это имя предназначено для вашей внутренней ссылки. Позже вы можете установить внешнее имя для своего проекта.)

a2951de5d2001fac.png

  1. Нажмите Импортировать проект .
  2. В разделе «Какое действие вы хотите построить?» экране выберите Пользовательскую карту.
  3. Нажмите Далее .
  4. Выберите пустую карточку проекта .
  5. Нажмите Начать сборку .
  6. Введите «Практика правописания» для отображаемого имени и нажмите «Сохранить».

Пользователи начинают разговор с вашего действия посредством вызова . Например, пользователи могут вызвать ваше действие, произнеся фразу типа «Эй, Google, поговори с практикой правописания», где практика правописания — это отображаемое имя.

Ваше действие должно иметь отображаемое имя, если вы хотите развернуть его в рабочей среде; однако для проверки вашего действия вам не нужно определять отображаемое имя. Вместо этого вы можете использовать фразу «Поговорите с моим тестовым приложением» в симуляторе, чтобы вызвать свое действие.

Настроить выполнение

Вам необходимо подключить к Ассистенту обработчики событий для облачных функций, которые вы написали и развернули ранее в этой лаборатории кода.

Чтобы настроить выполнение, выполните следующие действия:

  1. Нажмите «Вебхук» на боковой панели навигации.
  2. Выберите конечную точку HTTPS в качестве варианта выполнения:

d523bf003e96e66f.png

  1. Введите URL-адрес конечной точки вашей функции в текстовое поле конечной точки HTTPs , затем нажмите «Сохранить» .

be53e2cd0d914d54.png

В следующем разделе вы настроите приглашение для основного вызова в консоли действий.

Настройка основного вызова

Вы должны отредактировать основной вызов , чтобы определить, что происходит после того, как пользователь вызывает ваше действие.

По умолчанию Actions Builder предоставляет общий запрос при запуске вашего вызова ( «Начните создавать действие с определения основного вызова»).

Чтобы изменить приглашение, которое ваше действие отправляет обратно пользователю, когда он вызывает ваше действие, выполните следующие действия:

  1. Нажмите «Основной вызов» в навигации.

9ff088c04c995cde.png

  1. Установите Call your webhook и добавьте имя обработчика событий getSpellingWordList в текстовое поле.
  2. В редакторе кода замените текст в поле speech следующим приветственным сообщением: Welcome to Spelling Practice

Примечание. Для редактирования подсказок можно использовать форматирование YAML или JSON .

  1. Нажмите Сохранить .

Проверьте основной вызов в симуляторе.

Консоль Actions предоставляет веб-инструмент для тестирования вашего Action, называемый симулятором . Интерфейс имитирует аппаратные устройства и их настройки, поэтому вы можете общаться с вашим действием так, как если бы оно работало на интеллектуальном дисплее, телефоне, динамике или KaiOS.

Чтобы протестировать основной вызов вашего действия в симуляторе, выполните следующие действия:

  1. На верхней панели навигации нажмите «Тест» , чтобы перейти к симулятору.
  2. Чтобы вызвать действие в симуляторе, введите Talk to Spelling Practice в поле ввода в левом верхнем углу, затем нажмите Enter на клавиатуре.

651fc8da1ac9aa0a.png

Когда вы запускаете основной вызов вашего действия, Ассистент отвечает вашим персонализированным приветственным сообщением. На этом этапе разговор заканчивается после того, как Ассистент отвечает приветствием.

Просмотр журналов событий

Когда вы находитесь на вкладке «Тест» , на панели справа отображаются журналы событий , в которых история разговоров отображается в виде журналов событий. В каждом журнале событий отображаются события, произошедшие во время этого этапа разговора. Чтобы просмотреть журнал событий, щелкните серый значок перед событием.

В настоящее время у вашего действия есть один журнал событий, в котором показаны как действия пользователя ( «Поговорите с практиком правописания» ), так и ответ вашего действия. На следующем снимке экрана показан журнал событий вашего действия:

a6fb192f94426824.png

11. Постройте разговор для практики правописания.

Теперь, когда вы определили, что происходит после того, как пользователь вызывает ваше действие, вы можете построить остальную часть диалога вашего действия. В Spelling Practice есть четыре сцены, и вы должны активировать каждую сцену, прежде чем она сможет запуститься. Самый распространенный способ активации сцены — настроить действие таким образом, чтобы, когда пользователь соответствует намерению пользователя в сцене, это намерение запускало переход к другой сцене и активировало ее.

Переход от основного вызова к начальной сцене

В этом разделе вы создаете новую сцену под названием Start , которая отправляет пользователю приглашение с вопросом, хотят ли они начать играть в «Практику правописания» . Вы также добавляете переход от основного вызова к новой Start сцене.

Чтобы создать эту сцену и добавить к ней переход, выполните следующие действия:

  1. Нажмите «Разработать» в верхней части навигации. Затем нажмите «Основной вызов» на левой панели навигации.
  2. В разделе «Переход» справа щелкните раскрывающееся меню, затем введите « Start в текстовом поле.

dd4f1807a57f794d.png

  1. Нажмите Добавить . Это создает сцену с именем Start и сообщает Action о переходе к сцене Start после того, как Action доставляет пользователю приветственное приглашение.
  2. Нажмите «Сцены» на левой панели навигации, чтобы отобразить список сцен.
  3. В разделе «Сцены» нажмите «Пуск» , чтобы увидеть Start сцену.
  4. Нажмите + в разделе «При входе» сцены Start .
  5. Выберите Отправить подсказки .
  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 сцене щелкните предложения под редактором кода. Это действие добавляет одну фишку предложения.
  2. В поле title замените Suggested Response на 'Yes' .
  3. Используя то же форматирование, вручную добавьте чип предложения под названием 'No' и 'Help with Phonetics' . Ваш код должен выглядеть как следующий фрагмент:
  4. Нажмите Сохранить .

5ff2ecdc56801b91.png

Проверьте свои действия в симуляторе

На этом этапе ваше действие должно перейти от основного вызова к сцене «Начало» и спросить пользователя, хотят ли они продолжить. Фишки предложений также должны появиться на смоделированном дисплее.

Чтобы проверить свое действие в симуляторе, выполните следующие действия:

  1. На панели навигации нажмите «Тест» , чтобы перейти к симулятору.
  2. Чтобы проверить свое действие в симуляторе, введите Talk to Spelling Practice в поле ввода.
  3. Нажмите Enter . Ваше действие должно ответить Main invocation и добавленным приглашением Start сцены: «Добро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для b, Чарли для c и т. д. Хотите ли вы продолжать?" .

На следующем снимке экрана показано это взаимодействие:

338c9570b02a618e.png

  1. Нажмите кнопку Yes , « No или Help with Phonetics , чтобы ответить на запрос. (Вы также можете сказать «Да» , «Нет» или «Помощь с фонетикой» или ввести Yes , « No или Help with Phonetics в поле ввода .)

Когда вы отвечаете на запрос, ваше действие отвечает сообщением о том, что оно не может понять ваш ввод: «Извините, я этого не уловил. Можете ли вы попробовать еще раз?» Поскольку вы еще не настроили свое действие для понимания и ответа на ввод «Да» или «Нет» , ваше действие сопоставляет ваш ввод с намерением NO_MATCH .

По умолчанию системное намерение NO_MATCH предоставляет общие ответы, но вы можете настроить эти ответы, чтобы указать пользователю, что вы не поняли его ввод. Помощник завершает разговор пользователя вашим действием после того, как ему не удалось трижды сопоставить вводимые пользователем данные.

Добавить намерения «нет» и «фонетика»

Теперь, когда пользователи могут отвечать на вопрос, который задает ваше действие, вы можете настроить свое действие так, чтобы понимать ответы пользователей ( «Да» , «Нет» или «Помощь с фонетикой» ). В следующих разделах вы создаете намерения пользователя, которые совпадают, когда пользователь говорит «Да» , «Нет» или «Помощь по фонетике», и добавляете эти намерения в Start сцену. Мы будем использовать системное намерение yes и создадим другие намерения.

no создавать намерения

Теперь вам нужно создать no намерения, чтобы понимать пользователя и реагировать на него, когда он не хочет играть в игру. Чтобы создать это намерение, выполните следующие действия:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
  3. Нажмите + (знак плюса) в конце списка намерений. Назовите новый no намерения и нажмите Enter .
  4. Нажмите «Нет» , чтобы открыть страницу no намерений.
  5. В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
  • No
  • N
  • I don't want
  • nope

98b0c9a7b67ea9b9.png

  1. Нажмите Сохранить .

no добавлять намерение в Start сцену

Теперь Действие может понимать, когда пользователь выражает «нет» или что-то похожее на «нет» , например «нет» . Вам необходимо добавить намерение пользователя no в сцену Start , поскольку пользователь отвечает на приглашение StartДобро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для b, Чарли для c). и т. д. Хотите продолжить?» ).

Чтобы добавить это намерение для Start сцены, выполните следующие действия:

  1. Нажмите сцену «Начать» в навигации.
  2. Нажмите + (знак плюса) на Start сцене рядом с надписью «Обработка намерений пользователя».
  3. В разделе «Намерение» выберите «Нет» в раскрывающемся списке.

51f752e78c8b4942.png

  1. Нажмите « Отправить подсказки» и обновите поле speech следующим текстом: Good Bye .

Код в вашем редакторе должен выглядеть следующим образом:

candidates:
  - first_simple:
      variants:
        - speech: >-
             Goodbye.
  1. В разделе «Переход» выберите «Завершить разговор» в раскрывающемся списке.
  2. Нажмите Сохранить .

Проверьте no намерений в симуляторе

На этом этапе ваше действие понимает, когда пользователь не хочет играть в игру, и возвращает соответствующий ответ.

Чтобы проверить это намерение в симуляторе, выполните следующие действия:

  1. На панели навигации нажмите «Тест» .
  2. Введите Talk to Spelling Practice в поле ввода и нажмите Enter .
  3. Введите No в поле ввода и нажмите Enter. Либо нажмите кнопку «Нет предложений».

7727a456b522f31b.png

Добавить системное намерение YES в Start сцену

Теперь мы добавим СИСТЕМНОЕ намерение «ДА» в сцену Start , поскольку пользователь отвечает «да» на приглашение StartДобро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для б, Чарли вместо в и т. д. Продолжить?" ).

Чтобы добавить это намерение пользователя в Start сцену, выполните следующие действия:

  1. Нажмите сцену «Начать» в навигации.
  2. Нажмите + (знак плюса) на Start сцене рядом с надписью «Обработка намерений пользователя» .
  3. В разделе «Все системные намерения» выберите «ДА» в раскрывающемся списке намерений.

f6cbe789cde49e8f.png

  1. Нажмите «Вызов веб-перехватчика» и обновите текстовое поле event handler используя созданную ранее функцию: getSpellingWordList .
  2. В разделе «Переход» щелкните раскрывающийся список и выберите « Завершить разговор» .
  3. Нажмите Сохранить .

Проверьте намерение YES в симуляторе

На этом этапе ваше действие понимает, когда пользователь хочет поиграть в игру, и возвращает соответствующий ответ.

Чтобы проверить это намерение в симуляторе, выполните следующие действия:

  1. На панели навигации нажмите «Тест» .
  2. Чтобы проверить свое действие в симуляторе, введите Talk to Spelling Practice в поле ввода и нажмите Enter .
  3. Введите Yes в поле ввода и нажмите Enter . Либо нажмите кнопку Yes .

Ваше действие извлекает список всех слов для практики правописания и сохраняет их в сеансе. Затем ваше действие завершает сеанс, поскольку вы выбрали переход End conversation для намерения YES .

Создать намерение Phonetics

Чтобы создать намерение Phonetics , выполните следующие действия:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
  3. Нажмите + (знак плюса) в конце списка намерений. Назовите новую phonetics намерения и нажмите Enter .
  4. Щелкните намерение phonetics , чтобы открыть страницу намерения phonetics .
  5. В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
  • how do I spell words
  • phonetics
  • help me with phonetics
  • phonetic alphabet

1455bdfca8dae46.png

  1. Нажмите Сохранить .

Добавить phonetics намерение в Start сцену

Теперь Действие может понимать, когда пользователь выражает «фонетическое» намерение. Вы можете добавить намерение пользователя phonetics в сцену Start , поскольку пользователь отвечает на приглашение StartДобро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для b, Чарли для c). и т. д. Хотите продолжить?» ).

Чтобы добавить это намерение пользователя в Start сцену, выполните следующие действия:

  1. Нажмите сцену «Начать» в навигации.
  2. Нажмите + (знак плюса) на Start сцене рядом с надписью «Обработка намерений пользователя».
  3. Выберите фонетику в раскрывающемся списке намерений.

67ee2e08000b2aee.png

  1. В разделе «Переход» щелкните раскрывающийся список и выберите « Завершить разговор».
  2. Нажмите Сохранить .

Переход от сцены «Начало» к сцене «Правописание»

В этом разделе вы создаете новую сцену под названием «Правописание» , которая отправляет пользователю приглашение написать слово, используя фонетический алфавит.

Чтобы создать эту сцену и добавить к ней переход, выполните следующие действия:

  1. Нажмите «Разработать» в верхней части навигации. Затем нажмите «Начать сцену» на левой панели навигации.
  2. В разделе «Обработка намерений пользователя» щелкните when actions.intent.YES is matched , а справа в разделе перехода щелкните раскрывающееся меню и введите Spelling в текстовое поле.
  3. Нажмите Добавить . Это создает сцену под названием Spelling и сообщает Action о переходе к сцене Spelling после сопоставления с намерением YES.
  4. Разверните «Сцены» в левой навигационной панели, чтобы отобразить список сцен.
  5. В разделе «Сцены» нажмите «Правописание», чтобы просмотреть сцену Spelling .
  6. Нажмите + в разделе «При вводе» сцены Spelling .
  7. Нажмите «Вызов веб-перехватчика» и введите getSpellingWord в текстовом поле обработчика событий.
  8. Выберите Отправить подсказки .
  9. Замените предложение в поле speech ( Enter the response that users will see or hear... ) на {} . Фактическое приглашение будет заполнено веб-перехватчиком.

Чипы предложений предлагают пользователю интерактивные предложения, которые ваше действие обрабатывает как вводимые пользователем данные.

Чтобы добавить фишки подсказок в подсказку сцены Spelling , выполните следующие действия:

  1. В сцене Spelling щелкните предложения под редактором кода. Это действие добавляет три фишки предложения.
  2. В поле title замените Suggested Response » на 'Repeat' .
  3. Используя то же форматирование, вручную добавьте фишку предложения под названием 'Skip' .
  4. Используя то же форматирование, вручную добавьте фишку предложения под названием 'Quit' . Ваш код должен выглядеть как следующий фрагмент:
  5. Нажмите Сохранить .
suggestions:
      - title: 'Repeat'
      - title: 'Skip'
      - title: 'Quit'

e1d437f714ea1539.png

Создать намерение Repeat

Чтобы создать намерение repeat , выполните следующие действия:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
  3. Нажмите + (знак плюса) в конце списка намерений. Назовите новое repeat намерения и нажмите Enter .
  4. Щелкните намерение repeat , чтобы открыть страницу намерения definition .
  5. В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
  • one more time please
  • say the word again
  • repeat the word
  • tell me again
  • repeat

e61f0b9f80510bc9.png

  1. Нажмите Сохранить .

Добавить намерение repeat в сцену Spelling

Теперь Действие может понимать, когда пользователь выражает намерение «повторить» . Вы можете добавить repeat намерение пользователя в сцену Spelling , поскольку пользователь отвечает на запрос SpellingНазовите слово, используя фонетический алфавит »).

Чтобы добавить это намерение пользователя в сцену Spelling , выполните следующие действия:

  1. Нажмите сцену «Правописание» в навигации.
  2. Нажмите + (знак плюса) в сцене Spelling рядом с пунктом «Обработка намерений пользователя» .
  3. Выберите повтор в раскрывающемся списке намерений.

5cfd623b25bedbed.png

  1. Установите флажок «Вызов веб-перехватчика» и введите «repeateSpellingWord» в текстовом поле обработчика событий, чтобы получить определение слова.
  2. Установите флажок «Отправить подсказки» .
  3. Замените предложение в поле speech ( Enter the response that users will see or hear... ) на ''. Фактическое приглашение будет заполнено веб-перехватчиком.

Добавьте фишки предложений в «При совпадении повтора».

  1. В разделе « При совпадении повторения » в разделе «Обработка намерений пользователя» щелкните предложения под редактором кода. Это действие добавляет три фишки предложения.
  2. В поле title замените Suggested Response на 'Skip' .
  3. Используя то же форматирование, вручную добавьте чип предложения под названием 'Quit' . Ваш код должен выглядеть как следующий фрагмент:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

ab40e4b0c432b97c.png

  1. Нажмите «Сохранить».

Создать намерение definition

Чтобы создать намерение definition , выполните следующие действия:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
  3. Нажмите + (знак плюса) в конце списка намерений. Назовите новое definition намерения и нажмите Enter .
  4. Щелкните намерение definition , чтобы открыть страницу намерения definition .
  5. В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
  • 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 рядом с пунктом «Обработка намерений пользователя» .
  3. Выберите определение в раскрывающемся списке намерений.

646bdcac3ad3eb0c.png

  1. Установите флажок «Вызов веб-перехватчика» и введите определениеOfSpellingWord в текстовом поле обработчика событий, чтобы получить определение слова.
  2. Установите флажок «Отправить подсказки» .
  3. Замените предложение в поле speech ( Enter the response that users will see or hear... ) на ''`. Фактическое приглашение будет заполнено веб-перехватчиком.

Добавьте чипы предложений в ответ вебхука

  1. В Start сцене щелкните предложения под редактором кода. Это действие добавляет три фишки предложения.
  2. В поле title замените Suggested Response » на 'Skip' .
  3. Используя то же форматирование, вручную добавьте чип предложения под названием 'Quit' . Ваш код должен выглядеть как следующий фрагмент:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

25227545839d933f.png

  1. Нажмите Сохранить .

Создать намерение skip

Чтобы создать намерение skip , выполните следующие действия:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите «Намерения» в навигации, чтобы открыть список намерений.
  3. Нажмите + (знак плюса) в конце списка намерений. Назовите новый skip намерения и нажмите Enter .
  4. Нажмите намерение skip , чтобы открыть страницу намерения skip .
  5. В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
  • next word
  • go next
  • next
  • skip
  • skip word

d1c4908a3d7882f8.png

  1. Нажмите Сохранить .

Добавить намерение Skip в сцену Spelling

Теперь Действие может понимать, когда пользователь выражает намерение «пропустить» . Вы можете добавить намерение пользователя skip в сцену Spelling , поскольку пользователь отвечает на подсказку SpellingНазовите слово, используя фонетический алфавит »).

Чтобы добавить это намерение пользователя в сцену Spelling , выполните следующие действия:

  1. Нажмите на сцену орфографии в навигации.
  2. Нажмите на + (плюс знак) в сцене Spelling рядом с намерением пользователя handlin g.
  3. Выберите Skip в раскрывающемся списке.

5465F97542217964.png

  1. В разделе «Переход справа» нажмите на раскрывающееся меню и выберите Spelling .

C8072485CA82BD3F.PNG

  1. Нажмите Сохранить .

Создать quit

Чтобы создать Quit , выполните эти шаги:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите на навигацию, чтобы открыть список намерений.
  3. Нажмите + (плюс знак) в конце списка намерений. Назовите новое намерение Quit и нажмите Enter .
  4. Нажмите на намерение Quit от страницы намерения определения .
  5. В разделе «Добавить тренировочные фразы» нажмите текстовое поле «Введите фразу» и введите следующие фразы:
  • I quit
  • Goodbye
  • Cancel
  • Exit
  • Quit

9916F77B8766541E.PNG

  1. Нажмите «Сохранить».

Добавить Quit намерения к Spelling сцены

Теперь действие может понять, когда пользователь выражает намерение «уйти» . Вы можете добавить намерение quit в сцену Spelling , так как пользователь отвечает на подсказку SpellingЗаклинание слова с использованием фонетического алфавита »).

Чтобы добавить это намерение пользователя в сцену Spelling , выполните следующие действия:

  1. Нажмите на сцену орфографии в навигации.
  2. Нажмите + (плюс знак) в сцене Spelling рядом с обработкой намерений пользователя .
  3. Выберите «Выйти» в раскрывающемся списке.

5F62FB18A3653D66.PNG

  1. В разделе «Переход справа» нажмите на раскрывающееся меню и выберите End conversation . 1ffbe35a7bbbb4b0.png
  2. Нажмите Сохранить .

Создать тип phonetic_alphabet

В этом разделе вы создаете новый тип под названием phonetic_alphabet , который указывает параметры фонетического алфавита, которые пользователи могут выбрать писать слово. Вы также можете определить несколько синонимов для этих вариантов, если пользователь говорит что -то подобное. В более позднем разделе вы добавляете тип phonetic_alphabet в слот, чтобы указать, что вы хотите получить ответ пользователя.

Чтобы создать тип phonetic_alphabet , выполните следующие действия:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите + (плюс знак) под типами .
  3. Введите phonetic_alphabet и нажмите Enter .
  4. Нажмите phonetic_alphabet чтобы открыть параметры.
  5. В каких значениях будет поддержать этот тип? Раздел, выберите опцию «Слова и синонимы»
  6. Введите следующие записи и соответствующие значения в разделе «Добавить записи» :

а

Альфа, Apple, Амстердам

б

Браво, масло, Балтимор

с

Чарли, кошка, Касабланка

д

Дельта, собака, Дания

е

Эхо, Эдвард, Эдисон

ж

Foxtrot, Fox, Флорида

г

Гольф, Джордж, Галлиполи

час

Отель, Гарри, Гавана

я

Индия, чернила, Италия

дж

Джульетта, Джонни, Иерусалим

к

Кило, король, килограмм

л

Лима, любовь, Лондон

м

Майк, деньги, Мадагаскар

н

Ноябрь, Нью -Йорк, Нэнси

о

Оскар, оранжевый, Осло

п

Папа, Париж, Петр

д

Квебек, королева

р

Ромео, Рома, Роберт

с

Сьерра, сахар, Сантьяго

т

Танго, Томми, Триполи

ты

униформа, зонтик, дядя

в

Виктор, уксус, Валенсия

ш

Виски, Уильям, Вашингтон

х

рентген

й

Янки, желтый, йорк

я

Зулу, зебра, Цюрих

Ваша таблица ключей должна выглядеть следующим образом:

5B5A5CD9FA557E1B.PNG

  1. Нажмите Сохранить .

Настройка заполнения слота

Затем вам нужно настроить заполнение слотов в сцене орфографии. Чтобы настроить логику заполнения слотов, выполните следующие действия:

  1. Нажмите на сцену орфографии в навигации.
  2. Нажмите на + (плюс знак) в сцене Spelling для заполнения слота .
  3. В поле Enter SLOT имени слот добавьте userresponse в качестве имени слота.
  4. В раскрывающемся спине Select Type выберите Phonetic_alphabet в качестве типа слота.
  5. Проверьте этот слот, принимает список значений
  6. Проверьте этот слот .
  7. Выберите «Настроить вариант записи слота» и введите UnderResponse в текстовый поток параметра сеанса.

BA57A419877A07F3.PNG

  1. Нажмите Сохранить .

Добавить условие к экрану Spelling

Чтобы добавить условие к сцене Spelling , следуйте этим шагам:

  1. Нажмите на сцену орфографии в навигации.
  2. Нажмите + (плюс знак) в сцене Spelling рядом с условием.
  3. Введите scene.slots.status == "FINAL" как условие
  4. Проверьте Call Your Webhook и введите VerifyspellingWord в текстовом поле обработчика событий, чтобы проверить ответ пользователя.
  5. Проверьте Отправить подсказки.
  6. Замените предложение в поле speech ( Enter the response that users will see or hear... ) с помощью {} . Фактическая подсказка будет заполнена Webhook.

Добавить чипы предложений в ответ WebHook

  1. На Start сцене нажмите предложения под редактором кода. Это действие добавляет три чипа предложения.
  2. В поле title замените Suggested Response на 'Next' .
  3. Используя то же форматирование, вручную добавьте чип предложения под названием 'Quit' . Ваш код должен выглядеть как следующий фрагмент:
suggestions:
      - title: 'Next'
      - title: 'Quit'

AC3D7A9366EBC1B1.PNG

  1. Нажмите Сохранить .

12. Проверка орфографической практики в симуляторе

Чтобы проверить ваше действие в симуляторе, выполните следующие действия:

  1. В панели навигации нажмите тест , чтобы доставить вас на симулятор.
  2. Чтобы проверить свое действие в симуляторе, введите Talk to Spelling Practice в поле ввода.
  3. Нажмите Enter . Ваше действие должно ответить Main invocation и добавленной Start сценой: «Добро пожаловать в орфографическую практику. Используйте фонетический алфавит, чтобы написать слово. продолжать?" .
  4. Скажи да , чтобы продолжить
  5. Симулятор воспроизводит звук слова, чтобы повепить
  6. Вы можете написать слово, используя фонетические алфавиты. Например, для получения лучшего сказы или введите "Bravo Echo Tango Tango Echo Romeo"
  7. Симулятор ответит либо правильным, либо неправильным ответом.
  8. Скажите дальше , чтобы продолжить следующее слово или скажем, перестаньте выйти из петли игры.

13. Поздравляю

Поздравляю, вы успешно построили свою игру, орфографическую практику !

Теперь вы знаете ключевые шаги, необходимые для создания игры с использованием Cloud Firestore, облачных функций и Google Assistant Action Builder.

Что вы покрыли

  • Как взаимодействовать с Cloud Firestore
  • Как использовать слоты для сбора данных от пользователя
  • Как обработать ввод пользователя и вернуть ответ
  • Как использовать условия, чтобы добавить логику в сцену
  • Как добавить игровой цикл

Дополнительные учебные ресурсы

Вы можете изучить эти ресурсы для изучения построения действий для Google Assistant:

Очистите свой проект [рекомендуется]

Чтобы избежать возможных сборов, рекомендуется удалять проекты, которые вы не собираетесь использовать. Чтобы удалить созданные вами проекты в этом коделабе, выполните следующие действия:

  1. Чтобы удалить свой проект Firebase и ресурсы, выполните шаги, перечисленные в разделе «Выключение» (удаление) .

Осторожно: убедитесь, что вы выбираете правильный проект для удаления на странице настроек Google Cloud Console.

  1. Необязательно: Чтобы немедленно удалить свой проект из консоли действий, выполните шаги, перечисленные в разделе «Удаление проекта» . Если вы не выполните этот шаг, ваш проект будет автоматически удален примерно через 30 дней.

Следите за @actionsongoogle & @firebase в Twitter, чтобы следить за обновлениями на наши последние объявления и твитнуть #googleio, чтобы поделиться тем, что вы создали!

,

1. Обзор

Платформа разработчика Google Assistant позволяет создавать программное обеспечение для расширения функциональности Google Assistant, виртуального личного помощника, на более чем 1 миллиардах устройств, включая умные динамики, телефоны, автомобили, телевизоры, наушники и многое другое. Пользователи вовлекают помощника в разговор, чтобы добиться успеха, например, покупка продуктов или бронирование поездки. Как разработчик, вы можете использовать платформу помощника разработчика, чтобы легко создать и управлять восхитительным и эффективным разговорным опытом между пользователями и вашей собственной сторонней службой выполнения.

Этот CodeLab охватывает концепции промежуточного уровня для разработки с помощью Google Assistant, облачных функций и Cloud Firestore. В этом коделабе вы создадите игру, называемую «Практикой правописания», в которой используется Google Assistant, чтобы попросить пользователей писать слова.

Что ты построишь

В этом коделабе вы создадите сложную игру со следующей функциональностью:

  • Получает ответ на орфографию от пользователя и, в зависимости от значения, изменяет разговорные подсказки
  • Отвечает с подсказками, связанными с написанием слова, например, его определение или повторение слова
  • Создает игровой цикл, чтобы пользователь мог снова взаимодействовать с помощником после написания слова

Прежде чем начать строительство, вы можете взаимодействовать с живым действием на своем устройстве с поддержкой Google Assipant, сказав: «Привет, Google, поговорить с практикой орфографии». Путь по умолчанию через это действие для возвращающегося пользователя выглядит как следующее взаимодействие:

Когда вы закончите эту кодовую работу, завершенное действие будет иметь следующий диалоговый поток:

2e9f94dc0ceafc96.png

Что вы узнаете

  • Как взаимодействовать с Cloud Firestore
  • Как использовать слоты для сбора данных от пользователя
  • Как обработать ввод пользователя и вернуть ответ
  • Как использовать условия, чтобы добавить логику в сцену
  • Как добавить игровой цикл

Что вам понадобится

Предварительные требования для этой лаборатории кода включают следующее:

  • Веб-браузер, например Google Chrome.
  • IDE, чтобы написать облачные функции.
  • Способ оплаты. Этот Codelab использует облачные функции для 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 Project Spelling-Practice .

66ae8d1894f4477.png

  1. Просмотрите параметры создания проекта. Примите условия Firebase, если будет предложено. Пропустить настройку Google Analytics, потому что вы не будете использовать аналитику для этого приложения.

Чтобы узнать больше о проектах Firebase, см. Понять проекты Firebase .

Обновить до плана ценообразования

Чтобы использовать облачные функции для Firebase, вам нужно будет обновить свой проект Firebase до плана ценообразования Blaze , что означает, что вы прикрепите учетную запись Google Cloud Billing к вашему проекту. Это требует, чтобы вы предоставили кредитную карту или другой способ оплаты.

Все проекты Firebase, в том числе в плане пламени, по-прежнему имеют доступ к квотам без учета использования для облачных функций. Шаги, изложенные в этом CodeLab, подпадают под ограничения по недорогим использованию. Тем не менее, вы увидите небольшие сборы ( около 0,03 долл. США ) от облачного хранилища, которая используется для размещения ваших облачных функций. Создание изображений.

4. Установите CLI Firebase

CLI Firebase CLI (интерфейс командной строки) позволяет развернуть ваши облачные функции.

Есть несколько вариантов установки CLI Firebase в зависимости от вашей операционной системы и варианта использования. В следующих шагах описывается наиболее распространенный вариант, если вы также используете облачные функции.

  1. Убедитесь, что вы установили NPM , который обычно поставляется с node.js.
  2. Установите или обновите CLI, выполнив следующую команду NPM:
$ npm -g install firebase-tools
  1. Убедитесь, что CLI был правильно установлен путем запуска:
$ firebase --version

Убедитесь, что версия CLI Firebase составляет 9,0,0 или более поздней версии, чтобы иметь все последние функции, необходимые для облачных функций. Если нет, запустите npm install -g firebase-tools для обновления, как показано выше.

  1. Авторизуйте Firebase CLI, выполнив:
$ firebase login
  1. Из каталога орфографических функций-Start настройте CLI Firebase для использования вашего проекта Firebase. Запустите следующую команду, выберите идентификатор проекта, затем следуйте инструкциям. При запросе вы можете выбрать любой псевдоним, например, codelab например.
$ firebase use --add

5. Каталог функций

Теперь вы добавите функциональность, используя SDK Firebase для облачных функций, чтобы построить бэкэнд для игры, правописания .

Облачные функции позволяют вам иметь код, который работает в облаке без необходимости настраивания сервера. Этот Codelab покажет вам, как создавать функции, которые реагируют на аутентификацию Firebase, облачное хранилище и события базы данных Firebase Realtime. Давайте начнем с аутентификации.

При использовании SDK Firebase для облачных функций код ваших функций будет жить в каталоге functions (по умолчанию). Чтобы вам было проще, мы уже создали файл functions/index.js , в котором будет размещаться ваш код. Не стесняйтесь проверять каталог functions , прежде чем двигаться вперед.

$ cd functions
$ ls

Код ваших функций также является приложением node.js , и поэтому нуждается в package.json

Если вы не знакомы с node.js , это поможет узнать больше об этом, прежде чем продолжить CodeLab.

В файле package.json уже перечислены две необходимые зависимости: Firebase SDK для облачных функций и Firebase Admin SDK . Чтобы установить их локально, запустите npm install из каталога functions :

$ 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.

Сначала вы импортируете необходимые модули, а затем напишите четыре функции вместо Todos. Перейдите к следующему шагу CodeLab, чтобы импортировать модули.

6. Импортируйте необходимые модули

Этот CodeLab требует трех модулей.

  • Модуль firebase-functions позволяет нам писать триггеры для наших облачных функций
  • Модуль firebase-admin позволяет нам использовать платформу Firebase на сервере с доступом к администратору, например, для записи в Cloud Firestore.
  • Действия SDK Node.js Библиотека выполнения выполняет действия SDK обработчиков для помощника Google.
  1. Установите действия SDK, выполнив следующую команду NPM:
$ npm install @assistant/conversation
  1. В файле index.js замените первый TODO на следующее.

Эти изменения импортируют каждый из необходимых модулей.

Кроме того, SDK Admin Firebase может быть настроен автоматически при развертывании в среде облачных функций или в другом контейнере 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

Вы используете Public API dictionaryapi.dev чтобы получить определения слова.

В файле index.js замените Todo для getWordDetailsFromDictionaryAPI на следующее:

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();
}

Добавить триггер Firestore Cloud

Затем вы создадите облачную функцию, которая запускает всякий раз, когда новый документ создается в Cloud Firestore. Он позвонит в API dictionaryapi.dev , чтобы получить определения слов через функцию getWordDetailsFromDictionaryAPI , которую мы написали чуть выше.

В файле index.js замените TODO для createSpellingPracticeWord следующим образом:

index.js

// Firestore Trigger, который получает определения слов через GetWordDetailsFromDictionaryApi для каждого нового документа Firestore

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

Получите список слов для игры

Вы можете написать облачную функцию, которая получает список слов орфографии из Cloud Firestore для помощника. Для этого мы используем обработчик приложений.

В файле index.js замените TODO для getSpellingWordList следующим образом.

Добавление этой функции в Special 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;
    });
  });
})

Получите слово от помощника сеанса

Вы можете написать облачную функцию, которая возвращает следующее слово правописания из списка слов.

В файле index.js замените Todo для getSpellingWord следующим образом:

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');
});

Включить игру повторить слово

Вы можете написать облачную функцию, которая повторяет текущее слово для игры.

В файле index.js замените TODO на repeatSpellingWord на следующее:

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');
});

Получить определение слова

Вы можете написать облачную функцию, которая предоставляет определение текущего слова для игры.

В файле index.js замените TODO для definitionOfSpellingWord на следующее:

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);
});

Проверьте ответ на орфографию пользователя

Вы можете написать облачную функцию, которая проверяет ответ пользователя о том, как написать текущее слово для игры.

В файле index.js замените TODO для verifySpellingWord следующим образом:

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);

Развернуть все свои функции

Ваши облачные функции будут активны только после того, как вы развернули их в 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

Запомните функцию ActionOngOglefulFillment HTTP Endpoint URL для последующего использования. Чтобы получить конечную точку, откройте консоль Firebase , а затем нажмите проект орфографической практики . Откройте функции панели панели для просмотра конечной точки функций.

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 будет запускается, чтобы получить слово «Слова» из Службы API словаря .

Создайте коллекцию Cloud Firestore

  1. В консоли Firebase перейдите в раздел Cloud Firestore.
  2. Нажмите + Start Collection .
  3. В TextBox ID коллекции введите wordlist , затем нажмите «Далее» .

1B4CCADB90F52F02.png

Далее мы создадим документ для слова: соглашение

  1. В TextBox ID документа введите agreement .
  2. В поле Textbox введите word и в Textbox Value Textbox Введите agreement .
  3. Нажмите Сохранить .

379037E011E8511E.PNG

Когда вы добавляете этот документ в Cloud Firestore, он запускает вашу функцию CreateSpellingPracticeword, чтобы получить подробные данные для слова. Добавьте больше слов (например: благоговение, автомобиль, верно, скажите, лучше, поездка, ...), создав новый документ для каждого слова.

10. Настройте Google Assistant

В следующих разделах описывается, как настроить вашу среду разработки Google Assistant и создать проект вашего действия.

Проверьте настройки разрешений Google

Чтобы проверить действие, которое вы создаете в этом CodeLab, вам необходимо включить необходимые разрешения, чтобы симулятор мог получить доступ к вашему действию. Чтобы включить разрешения, выполните следующие действия:

  1. Перейдите на страницу управления деятельностью .
  2. Войдите в свою учетную запись Google, если вы еще этого не сделали.
  3. Включите следующие разрешения:
  • Активность в Интернете и приложениях
  • В рамках активности Web & App выберите флажок, чтобы включить историю и деятельность Chrome с сайтов, приложений и устройств, которые используют сервисы Google .

c988e1e639e6d6e1.png

Создать проект действий

Ваш проект Actions — это контейнер для вашего Action. Чтобы создать проект Actions для этой лаборатории кода, выполните следующие действия:

  1. Откройте консоль действий .
  2. Нажмите Новый проект .
  3. Принять условия обслуживания

B174D45710B8086B.PNG

  1. Введите или выберите spelling-practice-codelab , который вы создали с помощью консоли Firebase. (Имя для вашей внутренней ссылки. Позже вы можете установить внешнее имя для своего проекта.)

A2951DE5D2001FAC.PNG

  1. Нажмите «Импортный проект» .
  2. В разделе «Какое действие вы хотите построить?» экран, выберите пользовательскую карту.
  3. Нажмите Далее .
  4. Выберите пустую карточку проекта .
  5. Нажмите Начать сборку .
  6. Введите практику орфографии для отображения имени и нажмите «Сохранить».

Пользователи начинают разговор с вашим действием посредством вызова . Например, пользователи могут вызвать ваше действие, сказав такую ​​фразу, как «Привет, Google, поговорить с практикой правописания», где практика орфографии - это имя.

Ваше действие должно иметь отображаемое имя, если вы хотите развернуть его в производстве; Однако, чтобы проверить ваше действие, вам не нужно определять имя дисплея. Вместо этого вы можете использовать фразу «поговорить с моим тестовым приложением» в симуляторе, чтобы вызвать ваше действие.

Настройка выполнения

Вам необходимо подключиться к помощнику обработчиков событий для облачных функций, которые вы написали и развернули ранее в этом коделабе.

Чтобы настроить ваше выполнение, выполните следующие действия:

  1. Нажмите Webhook в боковой навигации.
  2. Выберите Https Endpoint в качестве опции выполнения:

D523BF003E96E66F.PNG

  1. Введите URL -адрес конечной точки вашей функции в Textbox Https Endpoint , затем нажмите «Сохранить» .

be53e2cd0d914d54.png

В следующем разделе вы настроите подсказку для вашего основного вызова в консоли действий.

Настройка основного вызова

Вы должны отредактировать основной вызов , чтобы определить, что происходит после того, как пользователь вызывает ваше действие.

По умолчанию, Action Builder предоставляет общую подсказку , когда ваш вызов запускается ( «Начните создавать свое действие, определяя основное вызов».).

Чтобы изменить подсказку, которую ваше действие отправляет обратно пользователю, когда они вызывают ваше действие, следуйте этим шагам:

  1. Нажмите «Основной развод» в навигации.

9ff088c04c995cde.png

  1. Проверьте Call your webhook и добавьте имя обработчика событий getSpellingWordList в текстовом поле.
  2. В редакторе кода замените текст в поле speech на следующее приветственное сообщение: Welcome to Spelling Practice

Примечание. Вы можете использовать форматирование YAML или JSON для редактирования ваших подсказок.

  1. Нажмите Сохранить .

Проверьте основной вызов в симуляторе

Консоль действий предоставляет веб -инструмент для тестирования вашего действия, называемого симулятором . Интерфейс моделирует аппаратные устройства и их настройки, поэтому вы можете общаться с вашим действием, как будто он работал на интеллектуальном дисплее, телефонах, динамике или кайосе.

Чтобы проверить основной вызов вашего действия в симуляторе, выполните следующие действия:

  1. В верхней панели навигации нажмите тест , чтобы перейти к симулятору.
  2. Чтобы вызвать свое действие в симуляторе, введите Talk to Spelling Practice в поле ввода в верхнем левом углу, затем нажмите Enter на клавиатуре.

651FC8DA1AC9AA0A.PNG

Когда вы запускаете основной вызов вашего действия, помощник отвечает вашим настроенным приветственным сообщением. На данный момент разговор заканчивается после того, как помощник отвечает приветствием.

Просмотреть журналы событий

Когда вы находитесь на вкладке Test , на панели справа показывается журналы событий , которые отображают историю разговора в качестве журналов событий. Каждый журнал событий отображает события, которые происходят во время этой очереди разговора. Чтобы просмотреть журнал событий, нажмите на значок Grey перед событием.

В настоящее время в вашем действии есть один журнал событий, который показывает как ввод пользователя ( «поговорите с практикой правописания» ) и ответом вашего действия. На следующем скриншоте показывает журнал событий вашего действия:

A6FB192F94426824.png

11. Создайте разговор для орфографической практики

Теперь, когда вы определили, что происходит после того, как пользователь вызывает ваше действие, вы можете создать оставшуюся часть разговора вашего действия. Практика орфографии имеет четыре сцены, и вы должны активировать каждую сцену, прежде чем она сможет запустить. Наиболее распространенный способ активировать сцену - это настроить ваше действие, чтобы, когда пользователь соответствует намерению пользователя в сцене, это намерение запускает переход к другой сцене и активировал ее.

Переход от основного вызова на начало сцены

В этом разделе вы создаете новую сцену под названием Start , которая отправляет пользователю подсказку, спрашивая, не хотят ли он начать играть в орфографическую практику . Вы также добавляете переход от основного вызова на новую Start сцену.

Чтобы создать эту сцену и добавить переход к ней, выполните следующие действия:

  1. Нажмите «Разработать» в верхней навигации. Затем нажмите «Основное призыв» в левой навигации.
  2. В разделе «Переход справа» нажмите на раскрывающееся меню, затем введите Start в текстовом поле.

DD4F1807A57F794D.PNG

  1. Нажмите Добавить . Это создает сцену под названием Start и сообщает действию, чтобы перейти на Start сцену после того, как действие предоставит пользователю приглашение приветствия.
  2. Нажмите сцены в левой навигации, чтобы показать список сцен.
  3. Под сценами нажмите « Начать» , чтобы увидеть Start сцену.
  4. Нажмите + в разделе Enter Enter Start сцены.
  5. Выберите «Отправить подсказки» .
  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 сцене нажмите предложения под редактором кода. Это действие добавляет один чип предложения.
  2. В поле title замените Suggested Response на 'Yes' .
  3. Используя то же форматирование, вручную добавьте чип предложения под названием 'No' и 'Help with Phonetics' . Ваш код должен выглядеть как следующий фрагмент:
  4. Нажмите Сохранить .

5ff2ecdc56801b91.png

Проверьте свои действия в симуляторе

На этом этапе ваше действие должно перейти от основного призывого к начальной сцене и спросить пользователя, хотят ли он продолжить. Чипы предложений также должны появляться на смоделированном дисплее.

Чтобы проверить ваше действие в симуляторе, выполните следующие действия:

  1. В панели навигации нажмите тест , чтобы доставить вас на симулятор.
  2. Чтобы проверить свое действие в симуляторе, введите Talk to Spelling Practice в поле ввода.
  3. Нажмите Enter . Ваше действие должно ответить Main invocation и добавленной Start сценой: «Добро пожаловать в орфографическую практику. Используйте фонетический алфавит, чтобы написать слово. продолжать?" .

На следующем скриншоте показано это взаимодействие:

338C9570B02A618E.PNG

  1. Нажмите Yes или No или Help with Phonetics чтобы ответить на подсказку. (Вы также можете сказать «да» или «нет» или «помощь с фонетикой» , или ввести Yes или No или Help with Phonetics в ​​поле ввода .)

Когда вы отвечаете на подсказку, ваше действие отвечает сообщением, указывающим, что оно не может понять ваш ввод: «Извините, я не поймал этого. Вы можете попробовать еще раз?» Поскольку вы еще не настроили свое действие, чтобы понять и ответить на «да» или «нет» , ваше действие соответствует вашему вводу с намерением NO_MATCH .

По умолчанию System NO_MATCH намерение предоставляет общие ответы, но вы можете настроить эти ответы, чтобы указать пользователю, что вы не понимали их ввод. Помощник заканчивает разговор пользователя с вашим действием после того, как он не может сопоставить пользовательский ввод три раза.

Добавить нет и фонетические намерения

Теперь, когда пользователи могут ответить на вопрос, который задает ваше действие, вы можете настроить свое действие, чтобы понять ответы пользователей ( «да» или «нет» или «помощь с фонетикой» ). В следующих разделах вы создаете пользовательские намерения, которые соответствуют, когда пользователь говорит «да» или «нет» или «помощь с фонетикой», и добавляете эти намерения к Start сцене. Мы будем использовать системные намерения yes и будем создавать другие намерения.

no создавать намерения

Теперь вам нужно создать no намерение понимать и ответить пользователю, когда он не хочет играть в игру. Чтобы создать это намерение, следуйте этим шагам:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите на пользовательские намерения в навигации, чтобы открыть список намерений.
  3. Нажмите + (плюс знак) в конце списка намерений. Назовите новое намерение no и нажмите Enter .
  4. Нажмите «Нет» , чтобы открыть страницу no намерений.
  5. В разделе «Добавить тренировочные фразы» нажмите на текстовое поле «Введите фразу» и введите следующие фразы:
  • No
  • N
  • I don't want
  • nope

98b0c9a7b67ea9b9.png

  1. Нажмите Сохранить .

no добавляйте намерения Start сцену

Теперь действие может понять, когда пользователь выражает «нет» или что -то похожее на «нет» , как «нет» . Вам нужно добавить намерение no пользователя к Start сцене, потому что пользователь отвечает на Start подсказку (« Добро пожаловать на практику орфографии. Используйте фонетический алфавит, чтобы написать слово. и т.д. Вы хотите продолжить? » ).

Чтобы добавить это намерение для Start сцены, следуйте этим шагам:

  1. Нажмите на начальную сцену в навигации.
  2. Нажмите + (плюс знак) в Start сцене рядом с обработкой намерений пользователя.
  3. В разделе «Намерения» выберите «Нет» в раскрывающемся списке.

51F752E78C8B4942.png

  1. Нажмите Отправить подсказки и обновить поле speech со следующим текстом: Good Bye .

Код в вашем редакторе должен выглядеть как следующий фрагмент:

candidates:
  - first_simple:
      variants:
        - speech: >-
             Goodbye.
  1. В разделе «Переход» выберите «Конец разговора» из раскрывающегося списка.
  2. Нажмите Сохранить .

no тестировать намерения в симуляторе

На этом этапе ваше действие понимает, когда пользователь не хочет играть в игру, и возвращает соответствующий ответ.

Чтобы проверить это намерение в симуляторе, выполните следующие действия:

  1. На панели навигации нажмите «Тест» .
  2. Введите Talk to Spelling Practice в поле ввода и нажмите Enter .
  3. Введите No в поле ввода и нажмите ENTER. В качестве альтернативы щелкните чип без предложений.

7727A456B522F31B.PNG

Добавить систему YES намерение Start сцену

Теперь мы добавим системные намерения «да» на Start сцену, поскольку пользователь отвечает «да» в StartДобро пожаловать на правописание. Используйте фонетический алфавит, чтобы написать слово. Например, альфа для, браво для B, Чарли для C и т. Д. Вы хотите продолжить? » ).

Чтобы добавить это намерение пользователя к Start сцене, выполните следующие действия:

  1. Нажмите на начальную сцену в навигации.
  2. Нажмите + (плюс знак) в Start сцене рядом с обработкой намерений пользователя .
  3. Под всеми намерениями системы выберите «Да» в раскрывающемся списке.

F6CBE789CDE49E8F.PNG

  1. Нажмите «Позвоните в свой WebHook» и обновите текстовое поле event handler с помощью функции, которую вы создали ранее: getSpellingWordList
  2. В разделе «Переход» нажмите «Раскрытие» и выберите «Конец разговора» .
  3. Нажмите Сохранить .

Тест YES намерения в симуляторе

На этом этапе ваше действие понимает, когда пользователь хочет играть в игру, и возвращает соответствующий ответ.

Чтобы проверить это намерение в симуляторе, выполните следующие действия:

  1. На панели навигации нажмите «Тест» .
  2. Чтобы проверить свое действие в симуляторе, введите Talk to Spelling Practice в поле ввода и нажмите Enter .
  3. Введите Yes в поле ввода и нажмите Enter . В качестве альтернативы, нажмите на чип предложения Yes .

Ваше действие получает список всех слов орфографической практики и хранит их на сессии. Затем ваше действие заканчивает сеанс, потому что вы выбрали End conversation для намерения YES .

Создать Phonetics намерения

Чтобы создать Phonetics намерения, следуйте этим шагам:

  1. Нажмите «Разработать» в навигации.
  2. Нажмите на пользовательские намерения в навигации, чтобы открыть список намерений.
  3. Нажмите + (плюс знак) в конце списка намерений. Назовите новую phonetics и нажмите Enter .
  4. Click the phonetics intent to open the phonetics intent page.
  5. In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
  • how do I spell words
  • phonetics
  • help me with phonetics
  • phonetic alphabet

1455bdfca8dae46.png

  1. Нажмите Сохранить .

Add phonetics intent to Start scene

Now, the Action can understand when a user is expressing a "phonetics" intent. You can add the phonetics user intent to the Start scene, since the user is responding to the Start prompt (" Welcome to Spelling Practice. Use the phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?" ).

To add this user intent to the Start scene, follow these steps:

  1. Click the Start scene in the navigation.
  2. Click the + (plus sign) in the Start scene next to User intent handling.
  3. Select phonetics in the intent drop-down.

67ee2e08000b2aee.png

  1. In the Transition section, click the drop-down and select End conversation.
  2. Нажмите Сохранить .

Transition from Start scene to Spelling scene

In this section, you create a new scene called Spelling , which sends a prompt to the user to spell the word using the phonetic alphabet.

To create this scene and add a transition to it, follow these steps:

  1. Click Develop in the top navigation. Then, click Start scene in the left navigation.
  2. In the User intent handling section click when actions.intent.YES is matched and on the right in the transition section, click the drop-down menu and type Spelling in the text field.
  3. Нажмите Добавить . This creates a scene called Spelling , and tells the Action to transition to the Spelling scene after the matching with YES intent.
  4. Expand Scenes in the left navigation to show the list of scenes.
  5. Under Scenes , click Spelling to see the Spelling scene.
  6. Click + in the On enter section of the Spelling scene.
  7. Click Call your webhook and enter getSpellingWord in the event handler textbox.
  8. Select Send prompts .
  9. Replace the sentence in the speech field ( Enter the response that users will see or hear... ) with {} . The actual prompt will be populated by webhook.

Suggestion chips offer clickable suggestions for the user that your Action processes as user input.

To add suggestion chips to the Spelling scene's prompt, follow these steps:

  1. In the Spelling scene, click suggestions below the code editor. This action adds three suggestion chips.
  2. In the title field, replace Suggested Response with 'Repeat' .
  3. Using the same formatting, manually add a suggestion chip titled 'Skip' .
  4. Using the same formatting, manually add a suggestion chip titled 'Quit' . Your code should look like the following snippet:
  5. Нажмите Сохранить .
suggestions:
      - title: 'Repeat'
      - title: 'Skip'
      - title: 'Quit'

e1d437f714ea1539.png

Create Repeat intent

To create the repeat intent, follow these steps:

  1. Click Develop in the navigation.
  2. Click Custom Intents in the navigation to open the list of intents.
  3. Click + (plus sign) at the end of the list of intents. Name the new intent repeat and press Enter .
  4. Click the repeat intent to open the definition intent page.
  5. In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
  • one more time please
  • say the word again
  • repeat the word
  • tell me again
  • repeat

e61f0b9f80510bc9.png

  1. Нажмите Сохранить .

Add repeat intent to Spelling scene

Now, the Action can understand when a user is expressing a "repeat" intent. You can add the repeat user intent to the Spelling scene, since the user is responding to the Spelling prompt (" Spell the word using phonetic alphabet ").

To add this user intent to the Spelling scene, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene next to User intent handling .
  3. Select repeat in the intent drop-down.

5cfd623b25bedbed.png

  1. Checkthe Call your webhook and enter repeatSpellingWord in the event handler textbox to get the word definition.
  2. Check Send prompts .
  3. Replace the sentence in the speech field ( Enter the response that users will see or hear... ) with ''. The actual prompt will be populated by webhook.

Add suggestion chips to "When Repeat is matched"

  1. In " When Repeat is matched " under User Intent handling, click suggestions below the code editor. This action adds three suggestion chips.
  2. In the title field, replace Suggested Response with 'Skip' .
  3. Using the same formatting, manually add a suggestion chip titled 'Quit' .Your code should look like the following snippet:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

ab40e4b0c432b97c.png

  1. Нажмите «Сохранить».

Create definition intent

To create the definition intent, follow these steps:

  1. Click Develop in the navigation.
  2. Click Custom Intents in the navigation to open the list of intents.
  3. Click + (plus sign) at the end of the list of intents. Name the new intent definition and press Enter .
  4. Click the definition intent to open the definition intent page.
  5. In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
  • I would like to know the definition
  • tell me the definition
  • what does it mean
  • meaning
  • definition
  • what is the definition?

c1b88a9c0b1ac082.png

  1. Нажмите Сохранить .

Add definition intent to Spelling scene

Now, the Action can understand when a user is expressing a "definition" intent. You can add the definition user intent to the Spelling scene, since the user is responding to the Spelling prompt (" Spell the word using phonetic alphabet ").

To add this user intent to the Spelling scene, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene next to User intent handling .
  3. Select definition in the intent drop-down.

646bdcac3ad3eb0c.png

  1. Check the Call your webhook and enter definitionOfSpellingWord in the event handler textbox to get the word definition.
  2. Check Send prompts .
  3. Replace the sentence in the speech field ( Enter the response that users will see or hear... ) with ''`. The actual prompt will be populated by webhook.

Add suggestion chips to the webhook response

  1. In the Start scene, click suggestions below the code editor. This action adds three suggestion chips.
  2. In the title field, replace Suggested Response with 'Skip' .
  3. Using the same formatting, manually add a suggestion chip titled 'Quit' .Your code should look like the following snippet:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

25227545839d933f.png

  1. Нажмите Сохранить .

Create skip intent

To create the skip intent, follow these steps:

  1. Click Develop in the navigation.
  2. Click Intents in the navigation to open the list of intents.
  3. Click + (plus sign) at the end of the list of intents. Name the new intent skip and press Enter .
  4. Click the skip intent to open the skip intent page.
  5. In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
  • next word
  • go next
  • next
  • skip
  • skip word

d1c4908a3d7882f8.png

  1. Нажмите Сохранить .

Add Skip intent to Spelling scene

Now, the Action can understand when a user is expressing a "skip" intent. You can add the skip user intent to the Spelling scene, since the user is responding to the Spelling prompt (" Spell the word using phonetic alphabet ").

To add this user intent to the Spelling scene, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene next to User intent handlin g.
  3. Select skip in the intent drop-down.

5465f97542217964.png

  1. In the Transition section on the right, click the drop-down menu and select Spelling .

c8072485ca82bd3f.png

  1. Нажмите Сохранить .

Create quit intent

To create the Quit intent, follow these steps:

  1. Click Develop in the navigation.
  2. Click Intents in the navigation to open the list of intents.
  3. Click + (plus sign) at the end of the list of intents. Name the new intent Quit and press Enter .
  4. Click the Quit intent to open the definition intent page.
  5. In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
  • I quit
  • Goodbye
  • Cancel
  • Exit
  • Quit

9916f77b8766541e.png

  1. Нажмите «Сохранить».

Add Quit intent to Spelling scene

Now, the Action can understand when a user is expressing a "quit" intent. You can add the quit user intent to the Spelling scene, since the user is responding to the Spelling prompt (" Spell the word using phonetic alphabet ").

To add this user intent to the Spelling scene, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene next to User intent handling .
  3. Select quit in the intent drop-down.

5f62fb18a3653d66.png

  1. In the Transition section on the right, click the drop-down menu and select End conversation . 1ffbe35a7bbbb4b0.png
  2. Нажмите Сохранить .

Create phonetic_alphabet type

In this section, you create a new type called phonetic_alphabet , which specifies the phonetic alphabet options the users can choose to spell the word. You can also define a few synonyms for these options in case a user says something similar. In a later section, you add the phonetic_alphabet type to a slot to specify that you want to obtain the user's response.

To create the phonetic_alphabet type, follow these steps:

  1. Click Develop in the navigation.
  2. Click the + (plus sign) under Types .
  3. Type phonetic_alphabet and press Enter .
  4. Click phonetic_alphabet to open the options.
  5. In the What kind of values will this Type support? section, select the Words and synonyms option
  6. Enter the following entries and corresponding values in the Add entries section:

а

alpha, apple, amsterdam

б

bravo, butter, baltimore

с

charlie, cat, casablanca

д

delta, dog, denmark

е

echo, edward, edison

ж

foxtrot, fox, florida

г

golf, george, gallipoli

час

hotel, harry, havana

я

india, ink, italia

дж

juliette, johnny, jerusalem

к

kilo, king, kilogramme

л

lima, love, london

м

mike, money, madagascar

н

november, new york, nancy

о

oscar, orange, oslo

п

papa, paris, peter

д

quebec, queen

р

romeo, roma, robert

с

sierra, sugar, santiago

т

tango, tommy, tripoli

ты

uniform, umbrella, uncle

в

victor, vinegar, Valencia

ш

whiskey, william, washington

х

рентген

й

yankee, yellow, yorker

я

zulu, zebra, zurich

Your key-value table should look like the following:

5b5a5cd9fa557e1b.png

  1. Нажмите Сохранить .

Configure slot filling

Next, you need to configure slot filling in the Spelling scene. To configure the slot-filling logic, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene for Slot filling .
  3. In the Enter slot name field, add userresponse as the slot name.
  4. In the Select type drop-down, select phonetic_alphabet as the slot type.
  5. Check This slot accepts a list of values
  6. Check This slot is required .
  7. Select Customize slot value writeback option and enter userresponse in the session parameter textbox.

ba57a419877a07f3.png

  1. Нажмите Сохранить .

Add Condition to Spelling screen

To add Condition to the Spelling scene, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene next to Condition.
  3. Enter scene.slots.status == "FINAL" as condition
  4. Check the Call your webhook and enter verifySpellingWord in the event handler textbox to verify the user response.
  5. Check Send prompts.
  6. Replace the sentence in the speech field ( Enter the response that users will see or hear... ) with {} . The actual prompt will be populated by webhook.

Add suggestion chips to the webhook response

  1. In the Start scene, click suggestions below the code editor. This action adds three suggestion chips.
  2. In the title field, replace Suggested Response with 'Next' .
  3. Using the same formatting, manually add a suggestion chip titled 'Quit' .Your code should look like the following snippet:
suggestions:
      - title: 'Next'
      - title: 'Quit'

ac3d7a9366ebc1b1.png

  1. Нажмите Сохранить .

12. Test Spelling Practice in the simulator

To test your Action in the simulator, follow these steps:

  1. In the navigation bar, click Test to take you to the simulator.
  2. To test your Action in the simulator, type Talk to Spelling Practice in the Input field.
  3. Нажмите Enter . Your Action should respond with the Main invocation prompt and the added Start scene prompt, "Welcome to Spelling Practice. Use the phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to продолжать?" .
  4. Say Yes to continue
  5. Simulator will play a word sound to spell
  6. You can spell the word using phonetic alphabets. For example, for better say or type "bravo echo tango tango echo romeo"
  7. Simulator will respond with either the correct or incorrect response.
  8. Say next to continue to the next word or say quit to exit the game loop.

13. Congratulations

Congratulations, you've successfully built your game, Spelling Practice !

You now know the key steps required to build a game using Cloud Firestore, Cloud Functions, and Google Assistant Action Builder.

Что вы покрыли

  • How to interact with Cloud Firestore
  • How to use slots to gather data from the user
  • How to process a user's input and return a response
  • How to use conditions to add logic to a scene
  • How to add a game loop

Additional learning resources

You can explore these resources for learning about building Actions for Google Assistant:

Очистите свой проект [рекомендуется]

Чтобы избежать возможных сборов, рекомендуется удалять проекты, которые вы не собираетесь использовать. Чтобы удалить созданные вами проекты в этом коделабе, выполните следующие действия:

  1. To delete your Firebase project and resources, complete the steps listed in the Shutting down (deleting) projects section.

Caution: Ensure that you select the correct project for deletion on the Google Cloud Console's Settings page.

  1. Optional: To immediately remove your project from the Actions console, complete the steps listed in the Deleting a project section. Если вы не выполните этот шаг, ваш проект будет автоматически удален примерно через 30 дней.

Follow @ActionsOnGoogle & @Firebase on Twitter to stay tuned to our latest announcements and tweet to #GoogleIO to share what you have built!