Игра для тренировки правописания с использованием 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. Нажмите Ввод . Ваше действие должно ответить 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. Проверьте Call Your Webhook и введите DefinitionOfpellingWord в текстовом поле обработчика событий, чтобы получить определение слова.
  2. Проверьте Отправить подсказки .
  3. Замените предложение в поле speech ( Enter the response that users will see or hear... ) с '' `. Фактическая подсказка будет заполнена Webhook.

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

  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 Intent.
  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. Нажмите Ввод . Ваше действие должно ответить 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, чтобы поделиться тем, что вы создали!