1. Обзор
Платформа разработчиков Google Assistant позволяет создавать программное обеспечение для расширения функциональности Google Assistant, виртуального личного помощника, на более чем 1 миллиарде устройств, включая интеллектуальные колонки, телефоны, автомобили, телевизоры, наушники и многое другое. Пользователи вовлекают Ассистента в разговор, чтобы сделать что-то, например купить продукты или заказать поездку. Как разработчик, вы можете использовать платформу разработчика Assistant, чтобы легко создавать и управлять восхитительными и эффективными диалогами между пользователями и вашей собственной сторонней службой выполнения заказов.
В этой лаборатории кода рассматриваются концепции среднего уровня для разработки с помощью Google Assistant, Cloud Functions и Cloud Firestore. В этой лаборатории кода вы создадите игру под названием «Практика правописания», которая использует Google Assistant, чтобы просить пользователей произносить слова по буквам.
Что ты построишь
В этой лаборатории кода вы создадите сложную игру со следующей функциональностью:
- Получает от пользователя ответы на вопросы по правописанию и, в зависимости от значения, изменяет диалоговые подсказки.
- Отвечает подсказками, связанными с написанием слова, например его определением или повторением слова.
- Создает игровой цикл, чтобы пользователь мог снова взаимодействовать с Ассистентом после написания слова.
Прежде чем приступить к созданию, вы можете взаимодействовать с живым действием на своем устройстве с поддержкой Google Assistant, сказав: «Эй, Google, поговори с практикой правописания». Путь по умолчанию для этого действия для возвращающегося пользователя выглядит следующим образом:
Когда вы закончите эту кодовую работу, завершенное действие будет иметь следующий диалоговый поток:
Что вы узнаете
- Как взаимодействовать с 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
- Войдите в Firebase .
- В консоли Firebase нажмите «Добавить проект» (или «Создать проект» ), затем назовите свой проект Firebase
Spelling-Practice
.
- Просмотрите параметры создания проекта. Примите условия Firebase, если будет предложено. Пропустите настройку Google Analytics, поскольку вы не будете использовать Analytics для этого приложения.
Дополнительные сведения о проектах Firebase см. в разделе Общие сведения о проектах Firebase .
Перейти на тарифный план Blaze
Чтобы использовать Cloud Functions для Firebase, вам необходимо обновить свой проект Firebase до тарифного плана Blaze , что означает, что вы прикрепите к своему проекту платежный аккаунт Google Cloud. Для этого вам потребуется предоставить кредитную карту или другой способ оплаты.
Все проекты Firebase, в том числе включенные в план Blaze, по-прежнему имеют доступ к бесплатным квотам использования облачных функций. Шаги, описанные в этой кодовой лаборатории, будут соответствовать ограничениям на бесплатное использование. Однако вы увидите небольшую плату ( около 0,03 доллара США ) от облачного хранилища, которое используется для размещения образов сборок облачных функций.
4. Установите интерфейс командной строки Firebase.
Firebase CLI (интерфейс командной строки) позволяет вам развертывать облачные функции.
Существует несколько вариантов установки Firebase CLI в зависимости от вашей операционной системы и варианта использования. Следующие шаги описывают наиболее распространенный вариант, если вы также используете облачные функции.
- Убедитесь, что вы установили npm , который обычно поставляется с Node.js.
- Установите или обновите CLI, выполнив следующую команду npm:
$ npm -g install firebase-tools
- Убедитесь, что CLI установлен правильно, выполнив:
$ firebase --version
Убедитесь, что версия Firebase CLI — 9.0.0 или новее, чтобы в нем были все новейшие функции, необходимые для облачных функций. Если нет, запустите npm install -g firebase-tools для обновления, как показано выше.
- Авторизуйте Firebase CLI, выполнив:
$ firebase login
- В каталоге правописания-функций-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.
- Установите Actions SDK, выполнив следующую команду npm:
$ npm install @assistant/conversation
- В файле
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 и выберите проект практики правописания . Откройте панель мониторинга функций, чтобы просмотреть конечную точку функции.
Вы завершили добавление всех необходимых функций. Теперь перейдем к настройке Cloud Firestore.
8. Включите Cloud Firestore.
Вам нужно будет включить Cloud Firestore.
В разделе «Сборка» консоли Firebase нажмите Firestore . Затем нажмите Создать базу данных .
Доступ к данным в 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.
- В консоли Firebase перейдите в раздел Cloud Firestore.
- Нажмите + Начать сбор .
- В текстовом поле «Идентификатор коллекции» введите
wordlist
и нажмите «Далее» .
Далее создадим документ для слова: соглашение.
- В текстовом поле «Идентификатор документа» введите
agreement
. - В текстовом поле Поле введите
word
, а в текстовом поле Значение введитеagreement
. - Нажмите Сохранить .
Когда вы добавляете этот документ в Cloud Firestore, он запускает функцию createSpellingPracticeWord для получения сведений об определении слова. Добавьте больше слов (например: трепет, машина, правда, скажите, лучше, ездить на работу, ...), создав новый документ для каждого слова.
10. Настройте Google Ассистент
В следующих разделах описано, как настроить среду разработки Google Assistant и создать проект Actions.
Проверьте настройки разрешений Google
Чтобы протестировать действие, которое вы создаете в этой лаборатории кода, вам необходимо включить необходимые разрешения, чтобы симулятор мог получить доступ к вашему действию. Чтобы включить разрешения, выполните следующие действия:
- Перейдите на страницу управления активностью .
- Войдите в свою учетную запись Google, если вы еще этого не сделали.
- Включите следующие разрешения:
- Активность в Интернете и приложениях
- В разделе «Активность в Интернете и приложениях» установите флажок «Включить историю и активность Chrome на сайтах, приложениях и устройствах, использующих службы Google» .
Создать проект действий
Ваш проект Actions — это контейнер для вашего Action. Чтобы создать проект Actions для этой лаборатории кода, выполните следующие действия:
- Откройте консоль действий .
- Нажмите Новый проект .
- Принять условия обслуживания
- Введите или выберите
spelling-practice-codelab
, созданную с помощью Firebase Console. (Это имя предназначено для вашей внутренней ссылки. Позже вы можете установить внешнее имя для своего проекта.)
- Нажмите Импортировать проект .
- В разделе «Какое действие вы хотите построить?» экране выберите Пользовательскую карту.
- Нажмите "Далее .
- Выберите пустую карточку проекта .
- Нажмите Начать сборку .
- Введите «Практика правописания» для отображаемого имени и нажмите «Сохранить».
Пользователи начинают разговор с вашего действия посредством вызова . Например, пользователи могут вызвать ваше действие, произнеся фразу типа «Эй, Google, поговори с практикой правописания», где практика правописания — это отображаемое имя.
Ваше действие должно иметь отображаемое имя, если вы хотите развернуть его в рабочей среде; однако для проверки вашего действия вам не нужно определять отображаемое имя. Вместо этого вы можете использовать фразу «Поговорите с моим тестовым приложением» в симуляторе, чтобы вызвать свое действие.
Настроить выполнение
Вам необходимо подключить к Ассистенту обработчики событий для облачных функций, которые вы написали и развернули ранее в этой лаборатории кода.
Чтобы настроить выполнение, выполните следующие действия:
- Нажмите «Вебхук» на боковой панели навигации.
- Выберите конечную точку HTTPS в качестве варианта выполнения:
- Введите URL-адрес конечной точки вашей функции в текстовое поле конечной точки HTTPs , затем нажмите «Сохранить» .
В следующем разделе вы настроите приглашение для основного вызова в консоли действий.
Настройка основного вызова
Вы должны отредактировать основной вызов , чтобы определить, что происходит после того, как пользователь вызывает ваше действие.
По умолчанию Actions Builder предоставляет общий запрос при запуске вашего вызова ( «Начните создавать действие с определения основного вызова»).
Чтобы изменить приглашение, которое ваше действие отправляет обратно пользователю, когда он вызывает ваше действие, выполните следующие действия:
- Нажмите «Основной вызов» в навигации.
- Установите
Call your webhook
и добавьте имя обработчика событийgetSpellingWordList
в текстовое поле. - В редакторе кода замените текст в поле
speech
следующим приветственным сообщением:Welcome to Spelling Practice
Примечание. Для редактирования подсказок можно использовать форматирование YAML или JSON .
- Нажмите Сохранить .
Проверьте основной вызов в симуляторе.
Консоль Actions предоставляет веб-инструмент для тестирования вашего Action, называемый симулятором . Интерфейс имитирует аппаратные устройства и их настройки, поэтому вы можете общаться с вашим действием, как если бы оно работало на интеллектуальном дисплее, телефоне, динамике или KaiOS.
Чтобы протестировать основной вызов вашего действия в симуляторе, выполните следующие действия:
- На верхней панели навигации нажмите «Тест» , чтобы перейти к симулятору.
- Чтобы вызвать действие в симуляторе, введите
Talk to Spelling Practice
в поле ввода в левом верхнем углу, затем нажмите Enter на клавиатуре.
Когда вы запускаете основной вызов вашего действия, Ассистент отвечает вашим персонализированным приветственным сообщением. На этом этапе разговор заканчивается после того, как Ассистент отвечает приветствием.
Просмотр журналов событий
Когда вы находитесь на вкладке «Тест» , на панели справа отображаются журналы событий , в которых история разговоров отображается в виде журналов событий. В каждом журнале событий отображаются события, произошедшие во время этого этапа разговора. Чтобы просмотреть журнал событий, щелкните серый значок перед событием.
В настоящее время у вашего действия есть один журнал событий, в котором отображаются как действия пользователя ( «Поговорите с практиком правописания» ), так и ответ вашего действия. На следующем снимке экрана показан журнал событий вашего действия:
11. Постройте разговор для практики правописания.
Теперь, когда вы определили, что происходит после того, как пользователь вызывает ваше действие, вы можете построить остальную часть диалога вашего действия. В Spelling Practice есть четыре сцены, и вы должны активировать каждую сцену, прежде чем она сможет запуститься. Самый распространенный способ активации сцены — настроить действие таким образом, чтобы, когда пользователь соответствует намерению пользователя в сцене, это намерение запускало переход к другой сцене и активировало ее.
Переход от основного вызова к начальной сцене
В этом разделе вы создаете новую сцену под названием « Start
, которая отправляет пользователю приглашение с вопросом, хотят ли они начать играть в «Практику правописания» . Вы также добавляете переход от основного вызова к новой Start
сцене.
Чтобы создать эту сцену и добавить к ней переход, выполните следующие действия:
- Нажмите «Разработать» в верхней части навигации. Затем нажмите «Основной вызов» на левой панели навигации.
- В разделе «Переход» справа щелкните раскрывающееся меню, затем введите
Start
в текстовом поле.
- Нажмите Добавить . Это создает сцену с именем
Start
и сообщает Action о переходе к сценеStart
после того, как Action доставит пользователю приветственное приглашение. - Нажмите «Сцены» на левой панели навигации, чтобы отобразить список сцен.
- В разделе «Сцены» нажмите «Пуск» , чтобы увидеть
Start
сцену. - Нажмите + в разделе «При входе» сцены
Start
. - Выберите Отправить подсказки .
- Замените предложение в поле
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
сцены, выполните следующие действия:
- В
Start
сцене щелкните предложения под редактором кода. Это действие добавляет одну фишку предложения. - В поле
title
заменитеSuggested Response
на'Yes'
. - Используя то же форматирование, вручную добавьте чип предложения под названием
'No'
и'Help with Phonetics'
. Ваш код должен выглядеть как следующий фрагмент: - Нажмите Сохранить .
Проверьте свои действия в симуляторе
На этом этапе ваше действие должно перейти от основного вызова к сцене «Начало» и спросить пользователя, хотят ли они продолжить. Фишки предложений также должны появиться на смоделированном дисплее.
Чтобы проверить свое действие в симуляторе, выполните следующие действия:
- На панели навигации нажмите «Тест» , чтобы перейти к симулятору.
- Чтобы проверить свое действие в симуляторе, введите
Talk to Spelling Practice
в поле ввода. - Нажмите Ввод . Ваше действие должно ответить
Main invocation
и добавленным приглашениемStart
сцены: «Добро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для b, Чарли для c и т. д. Хотите ли вы продолжать?" .
На следующем снимке экрана показано это взаимодействие:
- Нажмите кнопку
Yes
, «No
илиHelp with Phonetics
», чтобы ответить на запрос. (Вы также можете сказать «Да» , «Нет» или «Помощь с фонетикой» или ввестиYes
», «No
илиHelp with Phonetics
в поле ввода .)
Когда вы отвечаете на запрос, ваше действие отвечает сообщением о том, что оно не может понять ваш ввод: «Извините, я этого не уловил. Можете ли вы попробовать еще раз?» Поскольку вы еще не настроили свое действие для понимания и ответа на ввод «Да» или «Нет» , ваше действие сопоставляет ваш ввод с намерением NO_MATCH
.
По умолчанию системное намерение NO_MATCH
предоставляет общие ответы, но вы можете настроить эти ответы, чтобы указать пользователю, что вы не поняли его ввод. Помощник завершает разговор пользователя вашим действием после того, как ему не удалось трижды сопоставить вводимые пользователем данные.
Добавить намерения «нет» и «фонетика»
Теперь, когда пользователи могут отвечать на вопрос, который задает ваше действие, вы можете настроить свое действие так, чтобы понимать ответы пользователей ( «Да» , «Нет» или «Помощь с фонетикой» ). В следующих разделах вы создаете намерения пользователя, которые совпадают, когда пользователь говорит «Да» , «Нет» или «Помощь по фонетике», и добавляете эти намерения в Start
сцену. Мы будем использовать системное намерение yes
и создадим другие намерения.
no
создавать намерения
Теперь вам нужно создать no
намерения, чтобы понимать пользователя и реагировать на него, когда он не хочет играть в игру. Чтобы создать это намерение, выполните следующие действия:
- Нажмите «Разработать» в навигации.
- Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
- Нажмите + (знак плюса) в конце списка намерений. Назовите новый
no
намерения и нажмите Enter . - Нажмите «Нет» , чтобы открыть страницу
no
намерений. - В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
-
No
-
N
-
I don't want
-
nope
- Нажмите Сохранить .
no
добавлять намерение в Start
сцену
Теперь Действие может понимать, когда пользователь выражает «нет» или что-то похожее на «нет» , например «нет» . Вам необходимо добавить намерение пользователя no
в сцену Start
, поскольку пользователь отвечает на приглашение « Start
» (« Добро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для b, Чарли для c). и т. д. Хотите продолжить?» ).
Чтобы добавить это намерение для Start
сцены, выполните следующие действия:
- Нажмите сцену «Начать» в навигации.
- Нажмите + (знак плюса) на
Start
сцене рядом с надписью «Обработка намерений пользователя». - В разделе «Намерение» выберите «Нет» в раскрывающемся списке.
- Нажмите «Отправить подсказки» и обновите поле
speech
следующим текстом:Good Bye
.
Код в вашем редакторе должен выглядеть следующим образом:
candidates: - first_simple: variants: - speech: >- Goodbye.
- В разделе «Переход» выберите «Завершить разговор» в раскрывающемся списке.
- Нажмите Сохранить .
Проверьте no
намерений в симуляторе
На этом этапе ваше действие понимает, когда пользователь не хочет играть в игру, и возвращает соответствующий ответ.
Чтобы проверить это намерение в симуляторе, выполните следующие действия:
- На панели навигации нажмите «Тест» .
- Введите
Talk to Spelling Practice
в поле ввода и нажмитеEnter
. - Введите
No
в поле ввода и нажмите Enter. Либо нажмите кнопку «Нет предложений».
Добавить системное намерение YES
в Start
сцену
Теперь мы добавим СИСТЕМНОЕ намерение «ДА» в сцену Start
», поскольку пользователь отвечает «да» на приглашение « Start
» (« Добро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для б, Чарли вместо в и т. д. Продолжить?" ).
Чтобы добавить это намерение пользователя в Start
сцену, выполните следующие действия:
- Нажмите сцену «Начать» в навигации.
- Нажмите + (знак плюса) на
Start
сцене рядом с надписью «Обработка намерений пользователя ». - В разделе «Все системные намерения» выберите «ДА» в раскрывающемся списке намерений.
- Нажмите «Вызов веб-перехватчика» и обновите текстовое поле
event handler
, используя созданную ранее функцию:getSpellingWordList
. - В разделе «Переход» щелкните раскрывающийся список и выберите «Завершить разговор» .
- Нажмите Сохранить .
Проверьте намерение YES
в симуляторе
На этом этапе ваше действие понимает, когда пользователь хочет поиграть в игру, и возвращает соответствующий ответ.
Чтобы проверить это намерение в симуляторе, выполните следующие действия:
- На панели навигации нажмите «Тест» .
- Чтобы проверить свое действие в симуляторе, введите
Talk to Spelling Practice
в поле ввода и нажмите Enter . - Введите
Yes
в поле ввода и нажмите Enter . Либо нажмите кнопкуYes
.
Ваше действие извлекает список всех слов для практики правописания и сохраняет их в сеансе. Затем ваше действие завершает сеанс, поскольку вы выбрали переход End conversation
для намерения YES
.
Создать намерение Phonetics
Чтобы создать намерение Phonetics
, выполните следующие действия:
- Нажмите «Разработать» в навигации.
- Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
- Нажмите + (знак плюса) в конце списка намерений. Назовите новую
phonetics
намерения и нажмитеEnter
. - Щелкните намерение
phonetics
, чтобы открыть страницу намеренияphonetics
. - В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
-
how do I spell words
-
phonetics
-
help me with phonetics
-
phonetic alphabet
- Нажмите Сохранить .
Добавить phonetics
намерение в Start
сцену
Теперь Действие может понимать, когда пользователь выражает «фонетическое» намерение. Вы можете добавить намерение пользователя phonetics
в сцену Start
, поскольку пользователь отвечает на приглашение « Start
» (« Добро пожаловать в практику правописания. Используйте фонетический алфавит для написания слова. Например, альфа для a, браво для b, Чарли для c). и т. д. Хотите продолжить?» ).
Чтобы добавить это намерение пользователя в Start
сцену, выполните следующие действия:
- Нажмите сцену «Начать» в навигации.
- Нажмите + (знак плюса) на
Start
сцене рядом с надписью «Обработка намерений пользователя». - Выберите фонетику в раскрывающемся списке намерений.
- В разделе «Переход» щелкните раскрывающийся список и выберите «Завершить разговор».
- Нажмите Сохранить .
Переход от сцены «Начало» к сцене «Правописание»
В этом разделе вы создаете новую сцену под названием «Правописание» , которая отправляет пользователю приглашение написать слово, используя фонетический алфавит.
Чтобы создать эту сцену и добавить к ней переход, выполните следующие действия:
- Нажмите «Разработать» в верхней части навигации. Затем нажмите «Начать сцену» на левой панели навигации.
- В разделе «Обработка намерений пользователя» щелкните
when actions.intent.YES is matched
, а справа в разделе перехода щелкните раскрывающееся меню и введитеSpelling
в текстовое поле. - Нажмите Добавить . Это создает сцену под названием
Spelling
и сообщает Action о переходе к сценеSpelling
после сопоставления с намерением YES. - Разверните «Сцены» в левой навигационной панели, чтобы отобразить список сцен.
- В разделе «Сцены» нажмите «Правописание», чтобы просмотреть сцену
Spelling
. - Нажмите + в разделе «При вводе» сцены
Spelling
. - Нажмите «Вызов веб-перехватчика» и введите getSpellingWord в текстовом поле обработчика событий.
- Выберите Отправить подсказки .
- Замените предложение в поле
speech
(Enter the response that users will see or hear...
) на {} . Фактическое приглашение будет заполнено веб-перехватчиком.
Чипы предложений предлагают пользователю интерактивные предложения, которые ваше действие обрабатывает как вводимые пользователем данные.
Чтобы добавить фишки подсказок в подсказку сцены Spelling
, выполните следующие действия:
- В сцене
Spelling
щелкните предложения под редактором кода. Это действие добавляет три фишки предложения. - В поле
title
заменитеSuggested Response
» на'Repeat'
. - Используя то же форматирование, вручную добавьте фишку предложения под названием
'Skip'
. - Используя то же форматирование, вручную добавьте фишку предложения под названием
'Quit'
. Ваш код должен выглядеть как следующий фрагмент: - Нажмите Сохранить .
suggestions: - title: 'Repeat' - title: 'Skip' - title: 'Quit'
Создать намерение Repeat
Чтобы создать намерение repeat
, выполните следующие действия:
- Нажмите «Разработать» в навигации.
- Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
- Нажмите + (знак плюса) в конце списка намерений. Назовите новое
repeat
намерения и нажмитеEnter
. - Щелкните намерение
repeat
, чтобы открыть страницу намеренияdefinition
. - В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
-
one more time please
-
say the word again
-
repeat the word
-
tell me again
-
repeat
- Нажмите Сохранить .
Добавить намерение repeat
в сцену Spelling
Теперь Действие может понимать, когда пользователь выражает намерение «повторить» . Вы можете добавить repeat
намерение пользователя в сцену Spelling
, поскольку пользователь отвечает на запрос « Spelling
» (« Напишите слово, используя фонетический алфавит »).
Чтобы добавить это намерение пользователя в сцену Spelling
, выполните следующие действия:
- Нажмите сцену «Правописание» в навигации.
- Нажмите + (знак плюса) в сцене
Spelling
рядом с пунктом «Обработка намерений пользователя ». - Выберите повтор в раскрывающемся списке намерений.
- Установите флажок «Вызов веб-перехватчика» и введите «repeateSpellingWord» в текстовом поле обработчика событий, чтобы получить определение слова.
- Установите флажок «Отправить подсказки» .
- Замените предложение в поле
speech
(Enter the response that users will see or hear...
) на ''. Фактическое приглашение будет заполнено веб-перехватчиком.
Добавьте фишки предложений в «При совпадении повтора».
- В разделе « При совпадении повторения » в разделе «Обработка намерений пользователя» щелкните предложения под редактором кода. Это действие добавляет три фишки предложения.
- В поле
title
заменитеSuggested Response
» на'Skip'
. - Используя то же форматирование, вручную добавьте чип предложения под названием
'Quit'
. Ваш код должен выглядеть как следующий фрагмент:
suggestions: - title: 'Skip' - title: 'Quit'
- Нажмите «Сохранить».
Создать намерение definition
Чтобы создать намерение definition
, выполните следующие действия:
- Нажмите «Разработать» в навигации.
- Нажмите «Пользовательские намерения» в навигации, чтобы открыть список намерений.
- Нажмите + (знак плюса) в конце списка намерений. Назовите новое
definition
намерения и нажмитеEnter
. - Щелкните намерение
definition
, чтобы открыть страницу намеренияdefinition
. - В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
-
I would like to know the definition
-
tell me the definition
-
what does it mean
-
meaning
-
definition
-
what is the definition?
- Нажмите Сохранить .
Добавить намерение definition
в сцену Spelling
Теперь Действие может понимать, когда пользователь выражает намерение «определения» . Вы можете добавить definition
намерения пользователя в сцену Spelling
, поскольку пользователь отвечает на запрос « Spelling
(« Назовите слово, используя фонетический алфавит »).
Чтобы добавить это намерение пользователя в сцену Spelling
, выполните следующие действия:
- Нажмите сцену «Правописание» в навигации.
- Нажмите + (знак плюса) в сцене
Spelling
рядом с пунктом «Обработка намерений пользователя ». - Выберите определение в раскрывающемся списке намерений.
- Проверьте Call Your Webhook и введите DefinitionOfpellingWord в текстовом поле обработчика событий, чтобы получить определение слова.
- Проверьте Отправить подсказки .
- Замените предложение в поле
speech
(Enter the response that users will see or hear...
) с '' `. Фактическая подсказка будет заполнена Webhook.
Добавить чипы предложений в ответ WebHook
- На
Start
сцене нажмите предложения под редактором кода. Это действие добавляет три чипа предложения. - В поле
title
заменитеSuggested Response
на'Skip'
. - Используя то же форматирование, вручную добавьте чип предложения под названием
'Quit'
. Ваш код должен выглядеть как следующий фрагмент:
suggestions: - title: 'Skip' - title: 'Quit'
- Нажмите Сохранить .
Создать намерение skip
Чтобы создать намерение skip
, выполните эти шаги:
- Нажмите «Разработать» в навигации.
- Нажмите на навигацию , чтобы открыть список намерений.
- Нажмите + (плюс знак) в конце списка намерений. Назовите новое намерение
skip
и нажмитеEnter
. - Нажмите на намерение
skip
, чтобы открыть страницуskip
Intent. - В разделе «Добавить тренировочные фразы» нажмите текстовое поле «Введите фразу» и введите следующие фразы:
-
next word
-
go next
-
next
-
skip
-
skip word
- Нажмите Сохранить .
Добавьте намерение Skip
к Spelling
сцены
Теперь действие может понять, когда пользователь выражает намерение «пропустить» . Вы можете добавить намерение пользователя skip
в сцену Spelling
, поскольку пользователь отвечает на подсказку Spelling
(« Заклинание слова с использованием фонетического алфавита »).
Чтобы добавить это намерение пользователя в сцену Spelling
, выполните следующие действия:
- Нажмите на сцену орфографии в навигации.
- Нажмите на + (плюс знак) в сцене
Spelling
рядом с намерением пользователя handlin g. - Выберите Skip в раскрывающемся списке.
- В разделе «Переход справа» нажмите на раскрывающееся меню и выберите
Spelling
.
- Нажмите Сохранить .
Создать quit
Чтобы создать Quit
, выполните эти шаги:
- Нажмите «Разработать» в навигации.
- Нажмите на навигацию , чтобы открыть список намерений.
- Нажмите + (плюс знак) в конце списка намерений. Назовите новое намерение
Quit
и нажмитеEnter
. - Нажмите на намерение
Quit
от страницы намерения определения . - В разделе «Добавить тренировочные фразы» нажмите текстовое поле «Введите фразу» и введите следующие фразы:
-
I quit
-
Goodbye
-
Cancel
-
Exit
-
Quit
- Нажмите «Сохранить».
Добавить Quit
намерения к Spelling
сцены
Теперь действие может понять, когда пользователь выражает намерение «уйти» . Вы можете добавить намерение quit
в сцену Spelling
, так как пользователь отвечает на подсказку Spelling
(« Заклинание слова с использованием фонетического алфавита »).
Чтобы добавить это намерение пользователя в сцену Spelling
, выполните следующие действия:
- Нажмите на сцену орфографии в навигации.
- Нажмите + (плюс знак) в сцене
Spelling
рядом с обработкой намерений пользователя . - Выберите «Выйти» в раскрывающемся списке.
- В разделе «Переход справа» нажмите на раскрывающееся меню и выберите
End conversation
. - Нажмите Сохранить .
Создать тип phonetic_alphabet
В этом разделе вы создаете новый тип под названием phonetic_alphabet
, который указывает параметры фонетического алфавита, которые пользователи могут выбрать писать слово. Вы также можете определить несколько синонимов для этих вариантов, если пользователь говорит что -то подобное. В более позднем разделе вы добавляете тип phonetic_alphabet
в слот, чтобы указать, что вы хотите получить ответ пользователя.
Чтобы создать тип phonetic_alphabet
, выполните следующие действия:
- Нажмите «Разработать» в навигации.
- Нажмите + (плюс знак) под типами .
- Введите
phonetic_alphabet
и нажмитеEnter
. - Нажмите
phonetic_alphabet
, чтобы открыть параметры. - В каких значениях будет поддержать этот тип? Раздел, выберите опцию «Слова и синонимы»
- Введите следующие записи и соответствующие значения в разделе «Добавить записи» :
а | Альфа, Apple, Амстердам |
б | Браво, масло, Балтимор |
с | Чарли, кошка, Касабланка |
д | Дельта, собака, Дания |
е | Эхо, Эдвард, Эдисон |
ж | Foxtrot, Fox, Флорида |
г | Гольф, Джордж, Галлиполи |
час | Отель, Гарри, Гавана |
я | Индия, чернила, Италия |
дж | Джульетта, Джонни, Иерусалим |
к | Кило, король, килограмм |
л | Лима, любовь, Лондон |
м | Майк, деньги, Мадагаскар |
н | Ноябрь, Нью -Йорк, Нэнси |
о | Оскар, оранжевый, Осло |
п | Папа, Париж, Петр |
д | Квебек, королева |
р | Ромео, Рома, Роберт |
с | Сьерра, сахар, Сантьяго |
т | Танго, Томми, Триполи |
ты | униформа, зонтик, дядя |
в | Виктор, уксус, Валенсия |
ш | Виски, Уильям, Вашингтон |
Икс | Рентгеновский |
у | Янки, желтый, йорк |
я | Зулу, зебра, Цюрих |
Ваша таблица ключей должна выглядеть следующим образом:
- Нажмите Сохранить .
Настройка заполнения слота
Затем вам нужно настроить заполнение слотов в сцене орфографии. Чтобы настроить логику заполнения слотов, выполните следующие действия:
- Нажмите на сцену орфографии в навигации.
- Нажмите на + (плюс знак) в сцене
Spelling
для заполнения слота . - В поле Enter SLOT имени слот добавьте
userresponse
в качестве имени слота. - В раскрывающемся спине Select Type выберите Phonetic_alphabet в качестве типа слота.
- Проверьте этот слот, принимает список значений
- Проверьте этот слот .
- Выберите «Настроить вариант записи слота» и введите UnderResponse в текстовый поток параметра сеанса.
- Нажмите Сохранить .
Добавить условие к экрану Spelling
Чтобы добавить условие к сцене Spelling
, следуйте этим шагам:
- Нажмите на сцену орфографии в навигации.
- Нажмите + (плюс знак) в сцене
Spelling
рядом с условием. - Введите
scene.slots.status == "FINAL"
как условие - Проверьте Call Your Webhook и введите VerifyspellingWord в текстовом поле обработчика событий, чтобы проверить ответ пользователя.
- Проверьте Отправить подсказки.
- Замените предложение в поле
speech
(Enter the response that users will see or hear...
) с помощью {} . Фактическая подсказка будет заполнена Webhook.
Добавить чипы предложений в ответ WebHook
- На
Start
сцене нажмите предложения под редактором кода. Это действие добавляет три чипа предложения. - В поле
title
заменитеSuggested Response
на'Next'
. - Используя то же форматирование, вручную добавьте чип предложения под названием
'Quit'
. Ваш код должен выглядеть как следующий фрагмент:
suggestions: - title: 'Next' - title: 'Quit'
- Нажмите Сохранить .
12. Проверка орфографической практики в симуляторе
Чтобы проверить ваше действие в симуляторе, выполните следующие действия:
- В панели навигации нажмите тест , чтобы доставить вас на симулятор.
- Чтобы проверить свое действие в симуляторе, введите
Talk to Spelling Practice
в поле ввода. - Нажмите Ввод . Ваше действие должно ответить
Main invocation
и добавленнойStart
сценой : «Добро пожаловать в орфографическую практику. Используйте фонетический алфавит, чтобы написать слово. продолжать?" . - Скажи да, чтобы продолжить
- Симулятор воспроизводит звук слова, чтобы повепить
- Вы можете написать слово, используя фонетические алфавиты. Например, для получения лучшего сказы или введите "Bravo Echo Tango Tango Echo Romeo"
- Симулятор ответит либо правильным, либо неправильным ответом.
- Скажите дальше , чтобы продолжить следующее слово или скажем, перестаньте выйти из петли игры.
13. Поздравляю
Поздравляю, вы успешно построили свою игру, орфографическую практику !
Теперь вы знаете ключевые шаги, необходимые для создания игры с использованием Cloud Firestore, облачных функций и Google Assistant Action Builder.
Что вы покрыли
- Как взаимодействовать с Cloud Firestore
- Как использовать слоты для сбора данных от пользователя
- Как обработать ввод пользователя и вернуть ответ
- Как использовать условия, чтобы добавить логику в сцену
- Как добавить игровой цикл
Дополнительные учебные ресурсы
Вы можете изучить эти ресурсы для изучения построения действий для Google Assistant:
- Документация по разработке действий для Google Assistant
- Действия на странице Google GitHub для примера кода и библиотек
- Официальное сообщество Reddit для разработчиков, работающих с помощником Google
- Руководство по проектированию разговоров для лучших практик и руководящих принципов, касающихся разговорных действий
- Введение в Cloud Firestore
Очистите свой проект [рекомендуется]
Чтобы избежать возможных сборов, рекомендуется удалять проекты, которые вы не собираетесь использовать. Чтобы удалить созданные вами проекты в этом коделабе, выполните следующие действия:
- Чтобы удалить свой проект Firebase и ресурсы, выполните шаги, перечисленные в разделе «Выключение» (удаление) .
Осторожно: убедитесь, что вы выбираете правильный проект для удаления на странице настроек Google Cloud Console.
- Необязательно: Чтобы немедленно удалить свой проект из консоли действий, выполните шаги, перечисленные в разделе «Удаление проекта» . Если вы не выполните этот шаг, ваш проект будет автоматически удален примерно через 30 дней.
Следите за @actionsongoogle & @firebase в Twitter, чтобы следить за обновлениями на наши последние объявления и твитнуть #googleio, чтобы поделиться тем, что вы создали!