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

1. Обзор

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

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

Что вы построите

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

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

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

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

2e9f94dc0ceafc96.png

Чему вы научитесь

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

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

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

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

Дополнительную информацию о проектах Firebase см. в разделе Понимание проектов Firebase .

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

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

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

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

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

Существует несколько вариантов установки Firebase CLI в зависимости от вашей операционной системы и варианта использования. Ниже описан наиболее распространённый вариант, если вы также используете Cloud Functions.

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

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

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

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

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

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

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

$ cd functions
$ ls

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

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

В файле package.json уже перечислены две необходимые зависимости: Firebase SDK for Cloud Functions и 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 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.

Для получения определений слов вы будете использовать общедоступный 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 и выберите проект «Spelling-Practice» . Откройте панель управления «Функции», чтобы просмотреть конечную точку функции.

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 для получения определения слова. Добавьте больше слов (например, awe, car, true, tell, better, commute и т. д.), создав новый документ для каждого слова.

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, поговори с Spelling Practice», где Spelling Practiceотображаемое имя.

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

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

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

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

  1. Нажмите Webhook в боковой навигационной панели.
  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. Нажмите «Сохранить» .

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

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

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

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

651fc8da1ac9aa0a.png

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

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

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

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

a6fb192f94426824.png

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

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

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

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

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

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

dd4f1807a57f794d.png

  1. Нажмите кнопку «Добавить» . Это создаст сцену « Start » и предложит действию перейти к сцене Start после того, как действие отобразит пользователю приветственное сообщение.
  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 сцены: «Добро пожаловать в раздел «Практика правописания». Используйте фонетический алфавит для написания слова. Например, «альфа» для «а», «браво» для «б», «чарли» для «в» и т. д. Хотите продолжить?» .

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

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Добро пожаловать в раздел «Практика правописания». Используйте фонетический алфавит для написания слова. Например, «альфа» для «а», «браво» для «б», «чарли» для «с» и т. д. Хотите продолжить?» ).

Чтобы добавить это намерение для 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 » (« Добро пожаловать в раздел «Практика правописания». Используйте фонетический алфавит для написания слова. Например, альфа для «а», браво для «б», чарли для «в» и т. д. Хотите продолжить?» ).

Чтобы добавить это намерение пользователя в 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 » (« Добро пожаловать в раздел «Практика правописания». Используйте фонетический алфавит для написания слова. Например, «альфа» для «а», «браво» для «б», «чарли» для «с» и т. д. Хотите продолжить?» ).

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

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

67ee2e08000b2aee.png

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

Переход от начальной сцены к сцене правописания

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

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

  1. Нажмите «Разработка» в верхней панели навигации. Затем нажмите «Начать сцену» в левой панели навигации.
  2. В разделе Обработка намерений пользователя щелкните when actions.intent.YES is matched , а справа в разделе переходов щелкните раскрывающееся меню и введите Spelling в текстовое поле.
  3. Нажмите «Добавить» . Это создаст сцену Spelling и передаст действию команду перейти к сцене Spelling после совпадения с намерением «ДА».
  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. Установите флажок Вызовите свой веб-перехватчик и введите repeatSpellingWord в текстовое поле обработчика событий, чтобы получить определение слова.
  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 рядом с пунктом « Обработка намерений пользователя ».
  3. Выберите «Пропустить» в раскрывающемся списке намерений.

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. Введите следующие записи и соответствующие значения в разделе «Добавить записи» :

а

альфа, яблоко, Амстердам

б

браво, сливочное масло, Балтимор

с

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

д

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

е

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

ф

фокстрот, лиса, Флорида

г

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

час

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

я

Индия, тушь, Италия

дж

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

к

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

л

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

м

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

н

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

о

Оскар, Апельсин, Осло

п

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

д

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

р

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

с

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

т

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

ты

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

в

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

в

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

х

рентген

у

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

з

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

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

5b5a5cd9fa557e1b.png

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

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

Далее необходимо настроить заполнение слотов в сцене «Правописание». Чтобы настроить логику заполнения слотов, выполните следующие действия:

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

ba57a419877a07f3.png

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

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

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

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

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

  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 сцены: «Добро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для b, Чарли для c и т. д. Хотите продолжить?» .
  4. Скажите «Да» , чтобы продолжить
  5. Симулятор будет воспроизводить звук слова для его написания.
  6. Вы можете написать слово, используя фонетический алфавит. Например, лучше скажите или напишите «браво эхо танго танго эхо ромео».
  7. Симулятор ответит правильным или неправильным ответом.
  8. Скажите «Далее» , чтобы перейти к следующему слову, или скажите «Выход» , чтобы выйти из игрового цикла.

13. Поздравления

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

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

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

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

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

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

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

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

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

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

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

Подпишитесь на @ActionsOnGoogle и @Firebase в Твиттере, чтобы оставаться в курсе наших последних объявлений, и пишите в Твиттере #GoogleIO, чтобы поделиться тем, что вы создали!