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
в поле ввода. - Нажмите Enter . Ваше действие должно ответить
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
рядом с пунктом «Обработка намерений пользователя» . - Выберите определение в раскрывающемся списке намерений.
- Установите флажок «Вызов веб-перехватчика» и введите определениеOfSpellingWord в текстовом поле обработчика событий, чтобы получить определение слова.
- Установите флажок «Отправить подсказки» .
- Замените предложение в поле
speech
(Enter the response that users will see or hear...
) на ''`. Фактическое приглашение будет заполнено веб-перехватчиком.
Добавьте чипы предложений в ответ вебхука
- В
Start
сцене щелкните предложения под редактором кода. Это действие добавляет три фишки предложения. - В поле
title
заменитеSuggested Response
» на'Skip'
. - Используя то же форматирование, вручную добавьте чип предложения под названием
'Quit'
. Ваш код должен выглядеть как следующий фрагмент:
suggestions: - title: 'Skip' - title: 'Quit'
- Нажмите Сохранить .
Создать намерение skip
Чтобы создать намерение skip
, выполните следующие действия:
- Нажмите «Разработать» в навигации.
- Нажмите «Намерения» в навигации, чтобы открыть список намерений.
- Нажмите + (знак плюса) в конце списка намерений. Назовите новый
skip
намерения и нажмитеEnter
. - Нажмите намерение
skip
, чтобы открыть страницу намеренияskip
. - В разделе «Добавить обучающие фразы» щелкните текстовое поле «Ввести фразу» и введите следующие фразы:
-
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
в поле ввода. - Нажмите Enter . Ваше действие должно ответить
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, чтобы поделиться тем, что вы создали!
1. Обзор
Платформа разработчика Google Assistant позволяет создавать программное обеспечение для расширения функциональности Google Assistant, виртуального личного помощника, на более чем 1 миллиардах устройств, включая умные динамики, телефоны, автомобили, телевизоры, наушники и многое другое. Пользователи вовлекают помощника в разговор, чтобы добиться успеха, например, покупка продуктов или бронирование поездки. Как разработчик, вы можете использовать платформу помощника разработчика, чтобы легко создать и управлять восхитительным и эффективным разговорным опытом между пользователями и вашей собственной сторонней службой выполнения.
Этот CodeLab охватывает концепции промежуточного уровня для разработки с помощью Google Assistant, облачных функций и Cloud Firestore. В этом коделабе вы создадите игру, называемую «Практикой правописания», в которой используется Google Assistant, чтобы попросить пользователей писать слова.
Что ты построишь
В этом коделабе вы создадите сложную игру со следующей функциональностью:
- Получает ответ на орфографию от пользователя и, в зависимости от значения, изменяет разговорные подсказки
- Отвечает с подсказками, связанными с написанием слова, например, его определение или повторение слова
- Создает игровой цикл, чтобы пользователь мог снова взаимодействовать с помощником после написания слова
Прежде чем начать строительство, вы можете взаимодействовать с живым действием на своем устройстве с поддержкой Google Assipant, сказав: «Привет, Google, поговорить с практикой орфографии». Путь по умолчанию через это действие для возвращающегося пользователя выглядит как следующее взаимодействие:
Когда вы закончите эту кодовую работу, завершенное действие будет иметь следующий диалоговый поток:
Что вы узнаете
- Как взаимодействовать с Cloud Firestore
- Как использовать слоты для сбора данных от пользователя
- Как обработать ввод пользователя и вернуть ответ
- Как использовать условия, чтобы добавить логику в сцену
- Как добавить игровой цикл
Что вам понадобится
Предварительные требования для этой лаборатории кода включают следующее:
- Веб-браузер, например Google Chrome.
- IDE, чтобы написать облачные функции.
- Способ оплаты. Этот Codelab использует облачные функции для Firebase, которые требуют, чтобы ваш проект был в плане ценообразования Firebase Blaze ( узнайте больше ).
- Терминал для запуска команд оболочки
- Node.js 10 или позже
2. Получить код функций
Клонируйте репозиторий GitHub из командной строки:
$ git clone https://github.com/FirebaseExtended/codelab-actions-firestore
3. Создайте проект Firebase и настройте свое приложение.
Создать проект Firebase
- Войдите в Firebase .
- В консоли Firebase нажмите «Добавить проект» (или создать проект ), затем назовите свой проект Firebase Project
Spelling-Practice
.
- Просмотрите параметры создания проекта. Примите условия Firebase, если будет предложено. Пропустить настройку Google Analytics, потому что вы не будете использовать аналитику для этого приложения.
Чтобы узнать больше о проектах Firebase, см. Понять проекты Firebase .
Обновить до плана ценообразования
Чтобы использовать облачные функции для Firebase, вам нужно будет обновить свой проект Firebase до плана ценообразования Blaze , что означает, что вы прикрепите учетную запись Google Cloud Billing к вашему проекту. Это требует, чтобы вы предоставили кредитную карту или другой способ оплаты.
Все проекты Firebase, в том числе в плане пламени, по-прежнему имеют доступ к квотам без учета использования для облачных функций. Шаги, изложенные в этом CodeLab, подпадают под ограничения по недорогим использованию. Тем не менее, вы увидите небольшие сборы ( около 0,03 долл. США ) от облачного хранилища, которая используется для размещения ваших облачных функций. Создание изображений.
4. Установите CLI Firebase
CLI Firebase CLI (интерфейс командной строки) позволяет развернуть ваши облачные функции.
Есть несколько вариантов установки CLI Firebase в зависимости от вашей операционной системы и варианта использования. В следующих шагах описывается наиболее распространенный вариант, если вы также используете облачные функции.
- Убедитесь, что вы установили NPM , который обычно поставляется с node.js.
- Установите или обновите CLI, выполнив следующую команду NPM:
$ npm -g install firebase-tools
- Убедитесь, что CLI был правильно установлен путем запуска:
$ firebase --version
Убедитесь, что версия CLI Firebase составляет 9,0,0 или более поздней версии, чтобы иметь все последние функции, необходимые для облачных функций. Если нет, запустите npm install -g firebase-tools для обновления, как показано выше.
- Авторизуйте Firebase CLI, выполнив:
$ firebase login
- Из каталога орфографических функций-Start настройте CLI Firebase для использования вашего проекта Firebase. Запустите следующую команду, выберите идентификатор проекта, затем следуйте инструкциям. При запросе вы можете выбрать любой псевдоним, например,
codelab
например.
$ firebase use --add
5. Каталог функций
Теперь вы добавите функциональность, используя SDK Firebase для облачных функций, чтобы построить бэкэнд для игры, правописания .
Облачные функции позволяют вам иметь код, который работает в облаке без необходимости настраивания сервера. Этот Codelab покажет вам, как создавать функции, которые реагируют на аутентификацию Firebase, облачное хранилище и события базы данных Firebase Realtime. Давайте начнем с аутентификации.
При использовании SDK Firebase для облачных функций код ваших функций будет жить в каталоге functions
(по умолчанию). Чтобы вам было проще, мы уже создали файл functions/index.js
, в котором будет размещаться ваш код. Не стесняйтесь проверять каталог functions
, прежде чем двигаться вперед.
$ cd functions $ ls
Код ваших функций также является приложением node.js , и поэтому нуждается в package.json
Если вы не знакомы с node.js , это поможет узнать больше об этом, прежде чем продолжить CodeLab.
В файле package.json
уже перечислены две необходимые зависимости: Firebase SDK для облачных функций и Firebase Admin SDK . Чтобы установить их локально, запустите npm install
из каталога functions
:
$ npm install
Давайте теперь посмотрим на файл index.js
:
index.js
/** * Copyright 2021 Google Inc. All Rights Reserved. * ... */ // TODO(DEVELOPER): Import the Cloud Functions for Firebase and Firebase Admin modules here. Also import the Actions SDK here. // TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here. // TODO(DEVELOPER): Write the createSpellingPracticeWord function here. // TODO(DEVELOPER): Write the app Handle getSpellingWordList function here. // TODO(DEVELOPER): Write the app Handle getSpellingWord function here. // TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here. // TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here. // TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.
Сначала вы импортируете необходимые модули, а затем напишите четыре функции вместо Todos. Перейдите к следующему шагу CodeLab, чтобы импортировать модули.
6. Импортируйте необходимые модули
Этот CodeLab требует трех модулей.
- Модуль
firebase-functions
позволяет нам писать триггеры для наших облачных функций - Модуль
firebase-admin
позволяет нам использовать платформу Firebase на сервере с доступом к администратору, например, для записи в Cloud Firestore. - Действия SDK Node.js Библиотека выполнения выполняет действия SDK обработчиков для помощника Google.
- Установите действия SDK, выполнив следующую команду NPM:
$ npm install @assistant/conversation
- В файле
index.js
замените первый TODO на следующее.
Эти изменения импортируют каждый из необходимых модулей.
Кроме того, SDK Admin Firebase может быть настроен автоматически при развертывании в среде облачных функций или в другом контейнере Google Cloud. Это то, что происходит, когда мы называем admin.initializeApp();
В изменениях ниже.
index.js
/** * Copyright 2021 Google Inc. All Rights Reserved. * ... */ // Import the Actions SDK const {conversation} = require('@assistant/conversation'); const https = require('https'); const app = conversation(); const cors = require('cors')({origin: true}); // Import the Firebase SDK for Cloud Functions. const functions = require('firebase-functions'); // Import and initialize the Firebase Admin SDK. const admin = require('firebase-admin'); admin.initializeApp(); // To access Cloud Firestore const db = admin.firestore(); // TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here. // TODO(DEVELOPER): Write the createSpellingPracticeWord function here. // TODO(DEVELOPER): Write the shuffleWordList function here. // TODO(DEVELOPER): Write the app Handle getSpellingWordList function here. // TODO(DEVELOPER): Write the app Handle getSpellingWord function here. // TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here. // TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here. // TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.
Теперь давайте добавим бизнес -логику, используя функции для поддержки действий помощника.
7. Создайте функции
Получите слова и напишите их в Cloud Firestore
Вы используете Public API dictionaryapi.dev
чтобы получить определения слова.
В файле index.js
замените Todo для getWordDetailsFromDictionaryAPI
на следующее:
index.js
// Retrieves word definition and audio pronunciation from api.dictionaryapi.dev service // Function uses service provided by https://dictionaryapi.dev/ async function getWordDetailsFromDictionaryAPI(word) { let responseData=""; let req = https.request({ host: 'api.dictionaryapi.dev', port: 443, path:'/api/v2/entries/en/' + word, method:'GET' }, (res) => { res.setEncoding('utf8'); res.on('data', d => { responseData+=d; }) res.on('end',function(){ let object = JSON.parse(responseData) const wordListRef = db.collection('wordlist'); wordListRef.doc(object[0].word).set( object[0] ); return responseData; }); }); req.end(); }
Добавить триггер Firestore Cloud
Затем вы создадите облачную функцию, которая запускает всякий раз, когда новый документ создается в Cloud Firestore. Он позвонит в API dictionaryapi.dev
, чтобы получить определения слов через функцию getWordDetailsFromDictionaryAPI
, которую мы написали чуть выше.
В файле index.js
замените TODO для createSpellingPracticeWord
следующим образом:
index.js
// Firestore Trigger, который получает определения слов через GetWordDetailsFromDictionaryApi для каждого нового документа Firestore
exports.createSpellingPracticeWord = functions.firestore .document('wordlist/{word}') .onCreate((snap, context) => { const newValue = snap.data(); const word = newValue.word; getWordDetailsFromDictionaryAPI(word); });
Получите список слов для игры
Вы можете написать облачную функцию, которая получает список слов орфографии из Cloud Firestore для помощника. Для этого мы используем обработчик приложений.
В файле index.js
замените TODO для getSpellingWordList
следующим образом.
Добавление этой функции в Special app.handle
- это способ сделать функцию доступной от помощника.
index.js
// Store the list of spelling words in Assistant session app.handle('getSpellingWordList', conv => { const wordListRef = db.collection('wordlist').limit(50); const snapshot = wordListRef; if (snapshot.empty) { console.log('No matching documents.'); return; } VocabularyList = [] return snapshot.get().then(snapshot => { snapshot.forEach(doc => { if (doc.data().word) { let definition = 'unknown'; let audio = 'unknown'; try { if(doc.data().hasOwnProperty('meanings')) { if(doc.data().meanings[0].hasOwnProperty('definitions')) { definition = doc.data().meanings[0].definitions[0].definition; } } if(doc.data().hasOwnProperty('phonetics')) { if(doc.data().phonetics.length > 0) audio = doc.data().phonetics[0].audio; } } catch (error) { console.log(error); } let obj = { word: doc.data().word, answer: doc.data().word.split("").join(" "), definition: definition, audio: audio } VocabularyList.push(obj); } // Shuffle the array let currentIndex = VocabularyList.length, temporaryValue, randomIndex; while (0 !== currentIndex) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1; temporaryValue = VocabularyList[currentIndex]; VocabularyList[currentIndex] = VocabularyList[randomIndex]; VocabularyList[randomIndex] = temporaryValue; } conv.session.params.vocabWord = VocabularyList; conv.session.params.vocabWordIndex = 0; }); }); })
Получите слово от помощника сеанса
Вы можете написать облачную функцию, которая возвращает следующее слово правописания из списка слов.
В файле index.js
замените Todo для getSpellingWord
следующим образом:
index.js
// Returns a spelling practice word to Google Assistant and uses Speech Synthesis Markup Language (SSML) to format the response app.handle('getSpellingWord', conv => { if (!conv.session.params.vocabWord.empty) { conv.session.params.vocabWordIndex+=1; const ssml = '<speak>' + '<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word.</audio> ' + '</speak>'; conv.add(ssml); } else conv.add('Great job! You completed the Spelling practice'); });
Включить игру повторить слово
Вы можете написать облачную функцию, которая повторяет текущее слово для игры.
В файле index.js
замените TODO на repeatSpellingWord
на следующее:
index.js
// Returns current spelling word app.handle('repeatSpellingWord', conv => { if (!conv.session.params.vocabWord.empty) { const ssml = '<speak>' + '<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word. </audio> ' + '</speak>'; conv.add(ssml); } else conv.add('Great job! You completed the Spelling practice'); });
Получить определение слова
Вы можете написать облачную функцию, которая предоставляет определение текущего слова для игры.
В файле index.js
замените TODO для definitionOfSpellingWord
на следующее:
index.js
// Returns spelling word definition from Assistant session parameter app.handle('definitionOfSpellingWord', conv => { conv.add( 'It means ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].definition); });
Проверьте ответ на орфографию пользователя
Вы можете написать облачную функцию, которая проверяет ответ пользователя о том, как написать текущее слово для игры.
В файле index.js
замените TODO для verifySpellingWord
следующим образом:
index.js
// Verifies user spelling response app.handle('verifySpellingWord', conv => { try { userResponse = conv.intent.params.userresponse.resolved.join(""); if (userResponse.toLowerCase() === conv.session.params.vocabWord[conv.session.params.vocabWordIndex].word.toLowerCase()) { conv.add('You are correct. Say next to continue.'); } else { conv.add('Sorry, wrong answer. The correct answer is ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].answer + ' . Say next to continue.'); } } catch (error) { conv.add('Sorry. I did not understand your response' ); } }); exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
Развернуть все свои функции
Ваши облачные функции будут активны только после того, как вы развернули их в Firebase.
Из корня каталога spelling-functions-start
запустите следующую команду:
$ firebase deploy --only functions
Это вывод консоли, который вы должны увидеть:
i deploying functions i functions: ensuring necessary APIs are enabled... ⚠ functions: missing necessary APIs. Enabling now... i env: ensuring necessary APIs are enabled... ⚠ env: missing necessary APIs. Enabling now... i functions: waiting for APIs to activate... i env: waiting for APIs to activate... ✔ env: all necessary APIs are enabled ✔ functions: all necessary APIs are enabled i functions: preparing functions directory for uploading... i functions: packaged functions (X.XX KB) for uploading ✔ functions: functions folder uploaded successfully i starting release process (may take several minutes)... i functions: creating function createSpellingPracticeWord(us-central1)... ✔ functions[createSpellingPracticeWord(us-central1)]: Successful create operation. i functions: creating function ActionsOnGoogleFulfillment(us-central1)... ✔ functions[ActionsOnGoogleFulfillment(us-central1)]: Successful create operation. ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/spelling-practice-1234/overview
Запомните функцию ActionOngOglefulFillment HTTP Endpoint URL для последующего использования. Чтобы получить конечную точку, откройте консоль Firebase , а затем нажмите проект орфографической практики . Откройте функции панели панели для просмотра конечной точки функций.
Вы закончили добавление всех необходимых функций. Теперь давайте перейдем к настройке 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 будет запускается, чтобы получить слово «Слова» из Службы API словаря .
Создайте коллекцию Cloud Firestore
- В консоли Firebase перейдите в раздел Cloud Firestore.
- Нажмите + Start Collection .
- В TextBox ID коллекции введите
wordlist
, затем нажмите «Далее» .
Далее мы создадим документ для слова: соглашение
- В TextBox ID документа введите
agreement
. - В поле Textbox введите
word
и в Textbox Value Textbox Введитеagreement
. - Нажмите Сохранить .
Когда вы добавляете этот документ в Cloud Firestore, он запускает вашу функцию CreateSpellingPracticeword, чтобы получить подробные данные для слова. Добавьте больше слов (например: благоговение, автомобиль, верно, скажите, лучше, поездка, ...), создав новый документ для каждого слова.
10. Настройте Google Assistant
В следующих разделах описывается, как настроить вашу среду разработки Google Assistant и создать проект вашего действия.
Проверьте настройки разрешений Google
Чтобы проверить действие, которое вы создаете в этом CodeLab, вам необходимо включить необходимые разрешения, чтобы симулятор мог получить доступ к вашему действию. Чтобы включить разрешения, выполните следующие действия:
- Перейдите на страницу управления деятельностью .
- Войдите в свою учетную запись Google, если вы еще этого не сделали.
- Включите следующие разрешения:
- Активность в Интернете и приложениях
- В рамках активности Web & App выберите флажок, чтобы включить историю и деятельность Chrome с сайтов, приложений и устройств, которые используют сервисы Google .
Создать проект действий
Ваш проект Actions — это контейнер для вашего Action. Чтобы создать проект Actions для этой лаборатории кода, выполните следующие действия:
- Откройте консоль действий .
- Нажмите Новый проект .
- Принять условия обслуживания
- Введите или выберите
spelling-practice-codelab
, который вы создали с помощью консоли Firebase. (Имя для вашей внутренней ссылки. Позже вы можете установить внешнее имя для своего проекта.)
- Нажмите «Импортный проект» .
- В разделе «Какое действие вы хотите построить?» экран, выберите пользовательскую карту.
- Нажмите Далее .
- Выберите пустую карточку проекта .
- Нажмите Начать сборку .
- Введите практику орфографии для отображения имени и нажмите «Сохранить».
Пользователи начинают разговор с вашим действием посредством вызова . Например, пользователи могут вызвать ваше действие, сказав такую фразу, как «Привет, Google, поговорить с практикой правописания», где практика орфографии - это имя.
Ваше действие должно иметь отображаемое имя, если вы хотите развернуть его в производстве; Однако, чтобы проверить ваше действие, вам не нужно определять имя дисплея. Вместо этого вы можете использовать фразу «поговорить с моим тестовым приложением» в симуляторе, чтобы вызвать ваше действие.
Настройка выполнения
Вам необходимо подключиться к помощнику обработчиков событий для облачных функций, которые вы написали и развернули ранее в этом коделабе.
Чтобы настроить ваше выполнение, выполните следующие действия:
- Нажмите Webhook в боковой навигации.
- Выберите Https Endpoint в качестве опции выполнения:
- Введите URL -адрес конечной точки вашей функции в Textbox Https Endpoint , затем нажмите «Сохранить» .
В следующем разделе вы настроите подсказку для вашего основного вызова в консоли действий.
Настройка основного вызова
Вы должны отредактировать основной вызов , чтобы определить, что происходит после того, как пользователь вызывает ваше действие.
По умолчанию, Action Builder предоставляет общую подсказку , когда ваш вызов запускается ( «Начните создавать свое действие, определяя основное вызов».).
Чтобы изменить подсказку, которую ваше действие отправляет обратно пользователю, когда они вызывают ваше действие, следуйте этим шагам:
- Нажмите «Основной развод» в навигации.
- Проверьте
Call your webhook
и добавьте имя обработчика событийgetSpellingWordList
в текстовом поле. - В редакторе кода замените текст в поле
speech
на следующее приветственное сообщение:Welcome to Spelling Practice
Примечание. Вы можете использовать форматирование YAML или JSON для редактирования ваших подсказок.
- Нажмите Сохранить .
Проверьте основной вызов в симуляторе
Консоль действий предоставляет веб -инструмент для тестирования вашего действия, называемого симулятором . Интерфейс моделирует аппаратные устройства и их настройки, поэтому вы можете общаться с вашим действием, как будто он работал на интеллектуальном дисплее, телефонах, динамике или кайосе.
Чтобы проверить основной вызов вашего действия в симуляторе, выполните следующие действия:
- В верхней панели навигации нажмите тест , чтобы перейти к симулятору.
- Чтобы вызвать свое действие в симуляторе, введите
Talk to Spelling Practice
в поле ввода в верхнем левом углу, затем нажмите Enter на клавиатуре.
Когда вы запускаете основной вызов вашего действия, помощник отвечает вашим настроенным приветственным сообщением. На данный момент разговор заканчивается после того, как помощник отвечает приветствием.
Просмотреть журналы событий
Когда вы находитесь на вкладке Test , на панели справа показывается журналы событий , которые отображают историю разговора в качестве журналов событий. Каждый журнал событий отображает события, которые происходят во время этой очереди разговора. Чтобы просмотреть журнал событий, нажмите на значок Grey перед событием.
В настоящее время в вашем действии есть один журнал событий, который показывает как ввод пользователя ( «поговорите с практикой правописания» ) и ответом вашего действия. На следующем скриншоте показывает журнал событий вашего действия:
11. Создайте разговор для орфографической практики
Теперь, когда вы определили, что происходит после того, как пользователь вызывает ваше действие, вы можете создать оставшуюся часть разговора вашего действия. Практика орфографии имеет четыре сцены, и вы должны активировать каждую сцену, прежде чем она сможет запустить. Наиболее распространенный способ активировать сцену - это настроить ваше действие, чтобы, когда пользователь соответствует намерению пользователя в сцене, это намерение запускает переход к другой сцене и активировал ее.
Переход от основного вызова на начало сцены
В этом разделе вы создаете новую сцену под названием Start
, которая отправляет пользователю подсказку, спрашивая, не хотят ли он начать играть в орфографическую практику . Вы также добавляете переход от основного вызова на новую Start
сцену.
Чтобы создать эту сцену и добавить переход к ней, выполните следующие действия:
- Нажмите «Разработать» в верхней навигации. Затем нажмите «Основное призыв» в левой навигации.
- В разделе «Переход справа» нажмите на раскрывающееся меню, затем введите
Start
в текстовом поле.
- Нажмите Добавить . Это создает сцену под названием
Start
и сообщает действию, чтобы перейти наStart
сцену после того, как действие предоставит пользователю приглашение приветствия. - Нажмите сцены в левой навигации, чтобы показать список сцен.
- Под сценами нажмите « Начать» , чтобы увидеть
Start
сцену. - Нажмите + в разделе Enter Enter
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
в поле ввода. - Нажмите Enter . Ваше действие должно ответить
Main invocation
и добавленнойStart
сценой: «Добро пожаловать в орфографическую практику. Используйте фонетический алфавит, чтобы написать слово. продолжать?" .
На следующем скриншоте показано это взаимодействие:
- Нажмите
Yes
илиNo
илиHelp with Phonetics
чтобы ответить на подсказку. (Вы также можете сказать «да» или «нет» или «помощь с фонетикой» , или ввестиYes
илиNo
илиHelp with Phonetics
в поле ввода .)
Когда вы отвечаете на подсказку, ваше действие отвечает сообщением, указывающим, что оно не может понять ваш ввод: «Извините, я не поймал этого. Вы можете попробовать еще раз?» Поскольку вы еще не настроили свое действие, чтобы понять и ответить на «да» или «нет» , ваше действие соответствует вашему вводу с намерением NO_MATCH
.
По умолчанию System NO_MATCH
намерение предоставляет общие ответы, но вы можете настроить эти ответы, чтобы указать пользователю, что вы не понимали их ввод. Помощник заканчивает разговор пользователя с вашим действием после того, как он не может сопоставить пользовательский ввод три раза.
Добавить нет и фонетические намерения
Теперь, когда пользователи могут ответить на вопрос, который задает ваше действие, вы можете настроить свое действие, чтобы понять ответы пользователей ( «да» или «нет» или «помощь с фонетикой» ). В следующих разделах вы создаете пользовательские намерения, которые соответствуют, когда пользователь говорит «да» или «нет» или «помощь с фонетикой», и добавляете эти намерения к Start
сцене. Мы будем использовать системные намерения yes
и будем создавать другие намерения.
no
создавать намерения
Теперь вам нужно создать no
намерение понимать и ответить пользователю, когда он не хочет играть в игру. Чтобы создать это намерение, следуйте этим шагам:
- Нажмите «Разработать» в навигации.
- Нажмите на пользовательские намерения в навигации, чтобы открыть список намерений.
- Нажмите + (плюс знак) в конце списка намерений. Назовите новое намерение
no
и нажмите Enter . - Нажмите «Нет» , чтобы открыть страницу
no
намерений. - В разделе «Добавить тренировочные фразы» нажмите на текстовое поле «Введите фразу» и введите следующие фразы:
-
No
-
N
-
I don't want
-
nope
- Нажмите Сохранить .
no
добавляйте намерения Start
сцену
Теперь действие может понять, когда пользователь выражает «нет» или что -то похожее на «нет» , как «нет» . Вам нужно добавить намерение no
пользователя к Start
сцене, потому что пользователь отвечает на Start
подсказку (« Добро пожаловать на практику орфографии. Используйте фонетический алфавит, чтобы написать слово. и т.д. Вы хотите продолжить? » ).
Чтобы добавить это намерение для Start
сцены, следуйте этим шагам:
- Нажмите на начальную сцену в навигации.
- Нажмите + (плюс знак) в
Start
сцене рядом с обработкой намерений пользователя. - В разделе «Намерения» выберите «Нет» в раскрывающемся списке.
- Нажмите Отправить подсказки и обновить поле
speech
со следующим текстом:Good Bye
.
Код в вашем редакторе должен выглядеть как следующий фрагмент:
candidates: - first_simple: variants: - speech: >- Goodbye.
- В разделе «Переход» выберите «Конец разговора» из раскрывающегося списка.
- Нажмите Сохранить .
no
тестировать намерения в симуляторе
На этом этапе ваше действие понимает, когда пользователь не хочет играть в игру, и возвращает соответствующий ответ.
Чтобы проверить это намерение в симуляторе, выполните следующие действия:
- На панели навигации нажмите «Тест» .
- Введите
Talk to Spelling Practice
в поле ввода и нажмитеEnter
. - Введите
No
в поле ввода и нажмите ENTER. В качестве альтернативы щелкните чип без предложений.
Добавить систему YES
намерение Start
сцену
Теперь мы добавим системные намерения «да» на Start
сцену, поскольку пользователь отвечает «да» в Start
(« Добро пожаловать на правописание. Используйте фонетический алфавит, чтобы написать слово. Например, альфа для, браво для B, Чарли для C и т. Д. Вы хотите продолжить? » ).
Чтобы добавить это намерение пользователя к Start
сцене, выполните следующие действия:
- Нажмите на начальную сцену в навигации.
- Нажмите + (плюс знак) в
Start
сцене рядом с обработкой намерений пользователя . - Под всеми намерениями системы выберите «Да» в раскрывающемся списке.
- Нажмите «Позвоните в свой WebHook» и обновите текстовое поле
event handler
с помощью функции, которую вы создали ранее:getSpellingWordList
- В разделе «Переход» нажмите «Раскрытие» и выберите «Конец разговора» .
- Нажмите Сохранить .
Тест YES
намерения в симуляторе
На этом этапе ваше действие понимает, когда пользователь хочет играть в игру, и возвращает соответствующий ответ.
Чтобы проверить это намерение в симуляторе, выполните следующие действия:
- На панели навигации нажмите «Тест» .
- Чтобы проверить свое действие в симуляторе, введите
Talk to Spelling Practice
в поле ввода и нажмите Enter . - Введите
Yes
в поле ввода и нажмите Enter . В качестве альтернативы, нажмите на чип предложенияYes
.
Ваше действие получает список всех слов орфографической практики и хранит их на сессии. Затем ваше действие заканчивает сеанс, потому что вы выбрали End conversation
для намерения YES
.
Создать Phonetics
намерения
Чтобы создать Phonetics
намерения, следуйте этим шагам:
- Нажмите «Разработать» в навигации.
- Нажмите на пользовательские намерения в навигации, чтобы открыть список намерений.
- Нажмите + (плюс знак) в конце списка намерений. Назовите новую
phonetics
и нажмитеEnter
. - Click the
phonetics
intent to open thephonetics
intent page. - In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
-
how do I spell words
-
phonetics
-
help me with phonetics
-
phonetic alphabet
- Нажмите Сохранить .
Add phonetics
intent to Start
scene
Now, the Action can understand when a user is expressing a "phonetics" intent. You can add the phonetics
user intent to the Start
scene, since the user is responding to the Start
prompt (" Welcome to Spelling Practice. Use the phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?" ).
To add this user intent to the Start
scene, follow these steps:
- Click the Start scene in the navigation.
- Click the + (plus sign) in the
Start
scene next to User intent handling. - Select phonetics in the intent drop-down.
- In the Transition section, click the drop-down and select End conversation.
- Нажмите Сохранить .
Transition from Start scene to Spelling scene
In this section, you create a new scene called Spelling , which sends a prompt to the user to spell the word using the phonetic alphabet.
To create this scene and add a transition to it, follow these steps:
- Click Develop in the top navigation. Then, click Start scene in the left navigation.
- In the User intent handling section click
when actions.intent.YES is matched
and on the right in the transition section, click the drop-down menu and typeSpelling
in the text field. - Нажмите Добавить . This creates a scene called
Spelling
, and tells the Action to transition to theSpelling
scene after the matching with YES intent. - Expand Scenes in the left navigation to show the list of scenes.
- Under Scenes , click Spelling to see the
Spelling
scene. - Click + in the On enter section of the
Spelling
scene. - Click Call your webhook and enter getSpellingWord in the event handler textbox.
- Select Send prompts .
- Replace the sentence in the
speech
field (Enter the response that users will see or hear...
) with {} . The actual prompt will be populated by webhook.
Suggestion chips offer clickable suggestions for the user that your Action processes as user input.
To add suggestion chips to the Spelling
scene's prompt, follow these steps:
- In the
Spelling
scene, click suggestions below the code editor. This action adds three suggestion chips. - In the
title
field, replaceSuggested Response
with'Repeat'
. - Using the same formatting, manually add a suggestion chip titled
'Skip'
. - Using the same formatting, manually add a suggestion chip titled
'Quit'
. Your code should look like the following snippet: - Нажмите Сохранить .
suggestions: - title: 'Repeat' - title: 'Skip' - title: 'Quit'
Create Repeat
intent
To create the repeat
intent, follow these steps:
- Click Develop in the navigation.
- Click Custom Intents in the navigation to open the list of intents.
- Click + (plus sign) at the end of the list of intents. Name the new intent
repeat
and pressEnter
. - Click the
repeat
intent to open thedefinition
intent page. - In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
-
one more time please
-
say the word again
-
repeat the word
-
tell me again
-
repeat
- Нажмите Сохранить .
Add repeat
intent to Spelling
scene
Now, the Action can understand when a user is expressing a "repeat" intent. You can add the repeat
user intent to the Spelling
scene, since the user is responding to the Spelling
prompt (" Spell the word using phonetic alphabet ").
To add this user intent to the Spelling
scene, follow these steps:
- Click the Spelling scene in the navigation.
- Click the + (plus sign) in the
Spelling
scene next to User intent handling . - Select repeat in the intent drop-down.
- Checkthe Call your webhook and enter repeatSpellingWord in the event handler textbox to get the word definition.
- Check Send prompts .
- Replace the sentence in the
speech
field (Enter the response that users will see or hear...
) with ''. The actual prompt will be populated by webhook.
Add suggestion chips to "When Repeat is matched"
- In " When Repeat is matched " under User Intent handling, click suggestions below the code editor. This action adds three suggestion chips.
- In the
title
field, replaceSuggested Response
with'Skip'
. - Using the same formatting, manually add a suggestion chip titled
'Quit'
.Your code should look like the following snippet:
suggestions: - title: 'Skip' - title: 'Quit'
- Нажмите «Сохранить».
Create definition
intent
To create the definition
intent, follow these steps:
- Click Develop in the navigation.
- Click Custom Intents in the navigation to open the list of intents.
- Click + (plus sign) at the end of the list of intents. Name the new intent
definition
and pressEnter
. - Click the
definition
intent to open thedefinition
intent page. - In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
-
I would like to know the definition
-
tell me the definition
-
what does it mean
-
meaning
-
definition
-
what is the definition?
- Нажмите Сохранить .
Add definition
intent to Spelling
scene
Now, the Action can understand when a user is expressing a "definition" intent. You can add the definition
user intent to the Spelling
scene, since the user is responding to the Spelling
prompt (" Spell the word using phonetic alphabet ").
To add this user intent to the Spelling
scene, follow these steps:
- Click the Spelling scene in the navigation.
- Click the + (plus sign) in the
Spelling
scene next to User intent handling . - Select definition in the intent drop-down.
- Check the Call your webhook and enter definitionOfSpellingWord in the event handler textbox to get the word definition.
- Check Send prompts .
- Replace the sentence in the
speech
field (Enter the response that users will see or hear...
) with ''`. The actual prompt will be populated by webhook.
Add suggestion chips to the webhook response
- In the
Start
scene, click suggestions below the code editor. This action adds three suggestion chips. - In the
title
field, replaceSuggested Response
with'Skip'
. - Using the same formatting, manually add a suggestion chip titled
'Quit'
.Your code should look like the following snippet:
suggestions: - title: 'Skip' - title: 'Quit'
- Нажмите Сохранить .
Create skip
intent
To create the skip
intent, follow these steps:
- Click Develop in the navigation.
- Click Intents in the navigation to open the list of intents.
- Click + (plus sign) at the end of the list of intents. Name the new intent
skip
and pressEnter
. - Click the
skip
intent to open theskip
intent page. - In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
-
next word
-
go next
-
next
-
skip
-
skip word
- Нажмите Сохранить .
Add Skip
intent to Spelling
scene
Now, the Action can understand when a user is expressing a "skip" intent. You can add the skip
user intent to the Spelling
scene, since the user is responding to the Spelling
prompt (" Spell the word using phonetic alphabet ").
To add this user intent to the Spelling
scene, follow these steps:
- Click the Spelling scene in the navigation.
- Click the + (plus sign) in the
Spelling
scene next to User intent handlin g. - Select skip in the intent drop-down.
- In the Transition section on the right, click the drop-down menu and select
Spelling
.
- Нажмите Сохранить .
Create quit
intent
To create the Quit
intent, follow these steps:
- Click Develop in the navigation.
- Click Intents in the navigation to open the list of intents.
- Click + (plus sign) at the end of the list of intents. Name the new intent
Quit
and pressEnter
. - Click the
Quit
intent to open the definition intent page. - In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
-
I quit
-
Goodbye
-
Cancel
-
Exit
-
Quit
- Нажмите «Сохранить».
Add Quit
intent to Spelling
scene
Now, the Action can understand when a user is expressing a "quit" intent. You can add the quit
user intent to the Spelling
scene, since the user is responding to the Spelling
prompt (" Spell the word using phonetic alphabet ").
To add this user intent to the Spelling
scene, follow these steps:
- Click the Spelling scene in the navigation.
- Click the + (plus sign) in the
Spelling
scene next to User intent handling . - Select quit in the intent drop-down.
- In the Transition section on the right, click the drop-down menu and select
End conversation
. - Нажмите Сохранить .
Create phonetic_alphabet
type
In this section, you create a new type called phonetic_alphabet
, which specifies the phonetic alphabet options the users can choose to spell the word. You can also define a few synonyms for these options in case a user says something similar. In a later section, you add the phonetic_alphabet
type to a slot to specify that you want to obtain the user's response.
To create the phonetic_alphabet
type, follow these steps:
- Click Develop in the navigation.
- Click the + (plus sign) under Types .
- Type
phonetic_alphabet
and pressEnter
. - Click
phonetic_alphabet
to open the options. - In the What kind of values will this Type support? section, select the Words and synonyms option
- Enter the following entries and corresponding values in the Add entries section:
а | alpha, apple, amsterdam |
б | bravo, butter, baltimore |
с | charlie, cat, casablanca |
д | delta, dog, denmark |
е | echo, edward, edison |
ж | foxtrot, fox, florida |
г | golf, george, gallipoli |
час | hotel, harry, havana |
я | india, ink, italia |
дж | juliette, johnny, jerusalem |
к | kilo, king, kilogramme |
л | lima, love, london |
м | mike, money, madagascar |
н | november, new york, nancy |
о | oscar, orange, oslo |
п | papa, paris, peter |
д | quebec, queen |
р | romeo, roma, robert |
с | sierra, sugar, santiago |
т | tango, tommy, tripoli |
ты | uniform, umbrella, uncle |
в | victor, vinegar, Valencia |
ш | whiskey, william, washington |
х | рентген |
й | yankee, yellow, yorker |
я | zulu, zebra, zurich |
Your key-value table should look like the following:
- Нажмите Сохранить .
Configure slot filling
Next, you need to configure slot filling in the Spelling scene. To configure the slot-filling logic, follow these steps:
- Click the Spelling scene in the navigation.
- Click the + (plus sign) in the
Spelling
scene for Slot filling . - In the Enter slot name field, add
userresponse
as the slot name. - In the Select type drop-down, select phonetic_alphabet as the slot type.
- Check This slot accepts a list of values
- Check This slot is required .
- Select Customize slot value writeback option and enter userresponse in the session parameter textbox.
- Нажмите Сохранить .
Add Condition to Spelling
screen
To add Condition to the Spelling
scene, follow these steps:
- Click the Spelling scene in the navigation.
- Click the + (plus sign) in the
Spelling
scene next to Condition. - Enter
scene.slots.status == "FINAL"
as condition - Check the Call your webhook and enter verifySpellingWord in the event handler textbox to verify the user response.
- Check Send prompts.
- Replace the sentence in the
speech
field (Enter the response that users will see or hear...
) with {} . The actual prompt will be populated by webhook.
Add suggestion chips to the webhook response
- In the
Start
scene, click suggestions below the code editor. This action adds three suggestion chips. - In the
title
field, replaceSuggested Response
with'Next'
. - Using the same formatting, manually add a suggestion chip titled
'Quit'
.Your code should look like the following snippet:
suggestions: - title: 'Next' - title: 'Quit'
- Нажмите Сохранить .
12. Test Spelling Practice in the simulator
To test your Action in the simulator, follow these steps:
- In the navigation bar, click Test to take you to the simulator.
- To test your Action in the simulator, type
Talk to Spelling Practice
in the Input field. - Нажмите Enter . Your Action should respond with the
Main invocation
prompt and the addedStart
scene prompt, "Welcome to Spelling Practice. Use the phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to продолжать?" . - Say Yes to continue
- Simulator will play a word sound to spell
- You can spell the word using phonetic alphabets. For example, for better say or type "bravo echo tango tango echo romeo"
- Simulator will respond with either the correct or incorrect response.
- Say next to continue to the next word or say quit to exit the game loop.
13. Congratulations
Congratulations, you've successfully built your game, Spelling Practice !
You now know the key steps required to build a game using Cloud Firestore, Cloud Functions, and Google Assistant Action Builder.
Что вы покрыли
- How to interact with Cloud Firestore
- How to use slots to gather data from the user
- How to process a user's input and return a response
- How to use conditions to add logic to a scene
- How to add a game loop
Additional learning resources
You can explore these resources for learning about building Actions for Google Assistant:
- Documentation for developing Actions for Google Assistant
- Actions on Google GitHub page for sample code and libraries
- The official Reddit community for developers working with the Google Assistant
- Conversation design guidelines for best practices and guidelines regarding Conversational Actions
- Introduction to Cloud Firestore
Очистите свой проект [рекомендуется]
Чтобы избежать возможных сборов, рекомендуется удалять проекты, которые вы не собираетесь использовать. Чтобы удалить созданные вами проекты в этом коделабе, выполните следующие действия:
- To delete your Firebase project and resources, complete the steps listed in the Shutting down (deleting) projects section.
Caution: Ensure that you select the correct project for deletion on the Google Cloud Console's Settings page.
- Optional: To immediately remove your project from the Actions console, complete the steps listed in the Deleting a project section. Если вы не выполните этот шаг, ваш проект будет автоматически удален примерно через 30 дней.
Follow @ActionsOnGoogle & @Firebase on Twitter to stay tuned to our latest announcements and tweet to #GoogleIO to share what you have built!