1. Обзор
Платформа разработчиков Google Assistant позволяет создавать программное обеспечение для расширения функциональности Google Assistant, виртуального личного помощника, на более чем 1 миллиарде устройств, включая интеллектуальные колонки, телефоны, автомобили, телевизоры, наушники и многое другое. Пользователи вовлекают Ассистента в разговор, чтобы сделать что-то, например купить продукты или заказать поездку. Как разработчик, вы можете использовать платформу разработчика Assistant, чтобы легко создавать и управлять восхитительными и эффективными диалогами между пользователями и вашей собственной сторонней службой выполнения заказов.
Эта лаборатория кода охватывает концепции промежуточного уровня для разработки с помощью Google Assistant и основана на действии, созданном в разделе «Создание действий для Google Assistant», с использованием лаборатории кода Actions SDK (уровень 1) . Мы настоятельно рекомендуем вам пройти лабораторную работу по коду уровня 1, прежде чем приступать к этой.
Действие, которое вы создаете в этой кодовой лаборатории, сообщает пользователям об их удаче в их поисках в мифической стране Гриффинберг, в зависимости от выбранной ими помощи.
Что ты построишь
В этой кодовой лаборатории вы создадите сложное диалоговое действие со следующими функциями:
- Собирает данные от пользователя и в зависимости от значения изменяет диалоговые подсказки.
- Отвечает уточняющими вопросами для продолжения разговора.
- Создает игровой цикл, чтобы пользователь мог снова взаимодействовать с Действием после получения состояния.
Прежде чем приступить к сборке, вы можете взаимодействовать с живым действием на своем устройстве с поддержкой Google Assistant, сказав : «Эй, Google, поговори с Судьбой и Фортуной» . Путь по умолчанию для этого действия для возвращающегося пользователя выглядит следующим образом:
Что вы узнаете
- Как использовать слоты для сбора данных от пользователя
- Как использовать условия для добавления логики в сцену
- Как добавить игровой цикл
- Как добавить поддерживающий путь
Что вам понадобится
Предварительные требования для этой лаборатории кода включают следующее:
- IDE/текстовый редактор по вашему выбору.
- Терминал для запуска команд оболочки с установленными NodeJS , npm и git .
- Веб-браузер, например Google Chrome .
- Завершенный проект Codelab Level 1 Actions.
Знакомство с JavaScript (ES6) настоятельно рекомендуется, хотя и не обязательно, для понимания кода выполнения этой лаборатории кода.
Необязательно: получите пример кода
При желании вы можете получить полный код проекта уровня 1 из репозитория GitHub Action Builder Codelab Level 1, чтобы вы могли следовать этой лаборатории кода. Вы также можете просмотреть полный код проекта уровня 2 в этом репозитории Github .
2. Продолжайте создавать диалоговый интерфейс
В первой кодовой лаборатории вы создали простое диалоговое действие с одной сценой Start
.
В этой кодовой лаборатории вы расширяете диалог вашего действия. В следующих разделах вы настраиваете свое действие для выполнения следующих действий:
- Переход к новой сцене
Fortune
, когда пользователь хочет услышать свою судьбу - Спросите пользователя, какое средство помощи он хочет выбрать для своего путешествия.
- Доставьте индивидуальное состояние по выбору пользователя
Переход и создание сцены Fortune
В этом разделе вы делаете следующее:
- Удалите существующее приглашение из
Start
сцены, которое отвечает пользователю и завершает разговор. - Определите переход от сцены
Start
к сценеFortune
. - Создайте сцену
Fortune
Чтобы изменить сцену Start
и добавить переход к сцене Fortune
, выполните следующие действия:
- Откройте проект Actions из лаборатории кода уровня 1 в текстовом редакторе.
- Откройте файл
custom/scenes/Start.yaml
. - Обновите
handler
намеренияyes
, чтобы ваш код соответствовал приведенному ниже фрагменту:
Старт.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I understand, stranger. Best of luck on your quest! Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- Сохраните файл.
Чтобы создать новую сцену под названием Fortune
, выполните следующие действия:
- Перейдите к проекту Codelab Level 1 Actions в терминале.
- Создайте новый файл
Fortune.yaml
в каталогеscenes
:
touch custom/scenes/Fortune.yaml
Вы отредактируете этот файл в следующем разделе.
Определить логику диалога для сцены Fortune
В этой кодовой лаборатории вы настраиваете свою сцену Fortune
, чтобы спросить пользователя: « Что вы выберете, чтобы помочь вам в вашем поиске: дракона, переводчика или компаса?» Вы можете использовать функцию, называемую заполнением слотов, чтобы собрать необходимую информацию от пользователя, прежде чем продолжить.
Ваше действие приносит удачу на три вспомогательных средства: дракона, переводчика и компаса. Чтобы настроить действие для идентификации этих трех параметров во входных данных пользователя, необходимо создать новый тип.
Вы можете использовать типы на этапе заполнения слотов сцены, чтобы определить информацию, которую вы хотите получить от пользователя. Когда механизм NLU обнаруживает совпадение слота во вводе пользователя, он извлекает слот как типизированный параметр, поэтому вы можете выполнять с его помощью логику в сцене.
Создать тип available_options
В этом разделе вы создаете новый тип под названием available_options
, который определяет три параметра, которые пользователи могут выбрать (дракон, переводчик и компас) в ответ на запрос. Вы также определяете несколько синонимов для этих параметров на случай, если пользователь скажет что-то подобное. В следующем разделе вы добавите тип available_options
в слот, чтобы указать, что вы хотите получить выбор пользователя.
Чтобы создать тип available_options
, выполните следующие действия:
- Создайте новый каталог под названием
types
:
mkdir custom/types
- Создайте новый файл с именем
available_options.yaml
в каталогеtypes
:
touch custom/types/available_options.yaml
- Откройте
custom/types/available_options.yaml
в текстовом редакторе.
Типы настраиваются как пары данных «ключ-значение», где ключ — это имя типа, а значения — синонимы этого ключа. Когда вы определяете ключ, он автоматически добавляется как значение. С помощью Actions SDK вы представляете ключи как entities
, а значения как synonyms
.
Чтобы добавить три варианта, которые может выбрать пользователь, выполните следующие действия:
- Добавьте следующие
entities
иsynonyms
в файлavailable_options.yaml
:
доступные_опции.yaml
synonym: entities: dragon: synonyms: - dragon - hydra - lizard translator: synonyms: - translator - communicator - machine - decoder - translate compass: synonyms: - compass - direction - guide - navigator matchType: EXACT_MATCH
- Сохраните файл.
Теперь ваше действие понимает, что available_options
— это дракон, переводчик и компас, а также может распознавать несколько соответствующих синонимов.
Настроить заполнение слотов
Далее вам необходимо настроить заполнение слотов в сцене Fortune
. Чтобы настроить логику заполнения слотов, выполните следующие действия:
- Откройте
custom/scenes/Fortune.yaml
в текстовом редакторе. - Добавьте следующие данные
slots
в файлFortune.yaml
:
Фортуна.yaml
slots: - commitBehavior: writeSessionParam: chosenOptions name: chosenOptions promptSettings: initialPrompt: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass? suggestions: - title: Dragon - title: Translator - title: Compass required: true type: name: available_options
- Сохраните файл.
Теперь вы добавили в слот тип available_options
, который сообщает вашему действию информацию, которую вам необходимо получить от пользователя (его выбор помощи), прежде чем продолжить. Вы также настроили подсказку внутри слота, которая добавляется в очередь подсказок, когда пользователь достигает стадии заполнения слота сцены.
Когда вы называете слот chosenOptions
, поле writeSessionsParam
обновляется с тем же именем ( $session.params.chosenOptions
). Вы можете получить доступ к этому параметру по этому имени в командной строке и при выполнении через клиентскую библиотеку.
Добавить условие
Теперь, когда вы добавили слот, требующий выбора пользователем помощи, вы можете добавить условие , проверяющее, что данные слота были получены, прежде чем пользователь сможет продолжить разговор.
В этом разделе вы добавляете условие scene.slots.status == "FINAL"
, которое проверяет полноту заполнения слота. Как только все слоты заполнены, условие добавляет приглашение ( You picked $session.params.chosenOptions.
) в очередь приглашений.
Чтобы настроить условие scene.slots.status == "FINAL"
, выполните следующие действия:
- Откройте
custom/scenes/Fortune.yaml
в текстовом редакторе. - Добавьте данные
conditionalEvents
в начало файлаFortune.yaml
:
Фортуна.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: You picked $session.params.chosenOptions.
- Сохраните файл.
Проверьте свои действия в симуляторе
На этом этапе вы определили, какие параметры должен выбрать пользователь, чтобы заполнить слот. После получения этой информации от пользователя ваше действие должно предоставить подсказку со ссылкой на конкретный вариант, который он выбрал.
Чтобы протестировать свое действие, выполните следующие действия:
- В терминале выполните следующую команду:
gactions deploy preview
Вы должны получить вывод, который выглядит следующим образом:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Скопируйте предоставленный URL-адрес и вставьте его в браузер.
- Нажмите или введите
Talk to my test app
в поле «Ввод» и нажмите Enter . - Введите
Yes
в поле ввода и нажмите Enter . Кроме того, вы можете нажать кнопку «Да» .
- Нажмите, введите или скажите
dragon
. Вы должны получить подсказку «Вы выбрали дракона».
В следующем разделе вы настраиваете подсказки для каждого средства, которое может выбрать пользователь.
Настройте подсказки, используя условия
В этом разделе вы добавляете условия для каждого варианта, который может выбрать пользователь, и добавляете настраиваемое приглашение для каждого условия.
Настройте судьбу dragon
Чтобы обновить условие и настроить подсказку, когда пользователь выбирает «дракон», выполните следующие действия:
- Откройте
custom/scenes/Fortune.yaml
в текстовом редакторе. - Замените данные
conditionalEvents
следующим фрагментом в файлеFortune.yaml
:
Фортуна.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon.
- Сохраните файл.
Теперь, когда пользователь говорит «дракон» или что-то похожее, ваше действие приносит удачу, основанную на этом выборе. Далее вы добавите оставшиеся два выделения.
Настройте translator
и compass
судьбы
Чтобы добавить условия и настроить подсказки, когда пользователь говорит «переводчик» или «компас» , выполните следующие действия:
- В файле
custom/scenes/Fortune.yaml
добавьте два других условия в условиеdragon
:
Фортуна.yaml
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success.
- Сохраните файл.
Проверьте свои действия в симуляторе
На этом этапе ваше действие должно предоставлять пользователю индивидуальное состояние в зависимости от выбранного им варианта.
Чтобы протестировать свое действие, выполните следующие действия:
- В терминале выполните следующую команду:
gactions deploy preview
Вы должны получить вывод, который выглядит следующим образом:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Скопируйте предоставленный URL-адрес и вставьте его в браузер.
- Введите
Talk to my test app
в поле «Ввод» и нажмите Enter . - Введите Да в поле ввода и нажмите Enter. Либо нажмите кнопку «Да» .
- Нажмите, введите или скажите
Translator
.
Вы должны получить соответствующее состояние за опцию «переводчик».
3. Добавьте игровой цикл
В этом разделе вы настраиваете свое действие, чтобы пользователь мог выбрать другой вариант и услышать другое предсказание после выбора. Это изменение похоже на вопрос «Хотите сыграть еще раз?» сообщение в конце игры. Чтобы построить этот цикл, вы можете повторно использовать ранее созданные намерения yes
и no
и добавить их в новую сцену под названием Again
.
Создать сцену Again
В этом разделе вы создаете новую сцену Again
и добавляете подсказку, в которой пользователю предлагается выбрать другой вариант.
Чтобы создать и настроить сцену Again
, выполните следующие действия:
- Создайте новый файл
Again.yaml
в каталогеscenes
:
touch custom/scenes/Again.yaml
- Откройте
custom/scenes/Again.yaml
в текстовом редакторе. - Добавьте следующие данные
onEnter
вAgain.yaml
:
Опять.yaml
onEnter: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: That is what I see for you. Would you like to choose a different option and explore another future? suggestions: - title: "Yes" - title: "No"
- Сохраните файл.
Добавить переход от сцены Fortune
к сцене Again
.
После того, как пользователь получит свое состояние, разговор должен перейти к новой сцене Again
.
Чтобы добавить переход от сцены Fortune
к сцене Again
, выполните следующие действия:
- Откройте
custom/scenes/Fortune.yaml
в текстовом редакторе. - Добавьте
transitionToScene: Again
к каждому условию, как показано в следующем фрагменте:
Фортуна.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success. transitionToScene: Again
- Сохраните файл.
Проверьте свои действия в симуляторе
На этом этапе ваше действие должно предоставить пользователю следующую подсказку после того, как он получит свое состояние: «Это то, что я вижу для вас. Хотите ли вы выбрать другой вариант и исследовать другое будущее?»
Чтобы протестировать свое действие, выполните следующие действия:
- В терминале выполните следующую команду:
gactions deploy preview
Вы должны получить вывод, который выглядит следующим образом:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Скопируйте предоставленный URL-адрес и вставьте его в браузер.
- Введите
Talk to my test app
в поле «Ввод» и нажмите Enter . - Введите
Yes
в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» . - Нажмите, введите или скажите
dragon
.
Вы должны получить состояние за вариант дракона и подсказку Again
.
Добавьте намерения и перейдите к сцене Again
В этом разделе вы добавляете намерения yes
и no
к сцене Again
, чтобы ваше действие понимало, хочет ли пользователь выбрать новый вариант или нет. Вы также добавляете соответствующие переходы для намерений yes
и no
. Намерение yes
переходит к сцене Fortune
, а намерение no
— на сцену End conversation
.
Чтобы добавить намерения и переходы в сцену Again
, выполните следующие действия:
- Откройте
custom/scenes/Again.yaml
в текстовом редакторе. - Добавьте данные
intentEvents
в верхнюю часть файлаAgain.yaml
, надOnEnter
:
Опять.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- Сохраните файл.
Проверьте свои действия в симуляторе
Теперь ваше действие должно понимать, хочет ли пользователь выбрать новый вариант или завершить разговор.
Чтобы проверить намерение yes
, выполните следующие действия:
- В терминале выполните следующую команду:
gactions deploy preview
Вы должны получить вывод, который выглядит следующим образом:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Скопируйте предоставленный URL-адрес и вставьте его в браузер.
- Введите
Talk to my test app
в поле «Ввод» и нажмите Enter . - Введите
Yes
в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» . - Нажмите, введите или произнесите один из вариантов.
- Введите
Yes
в поле ввода и нажмите Enter.
Вы должны получить подсказку: «Что вы выберете, чтобы помочь вам в вашем поиске: дракона, переводчика или компаса?»
Чтобы проверить no
намерения, выполните следующие действия:
- Нажмите, введите или произнесите один из вариантов.
- Введите
No
в поле ввода и нажмите Enter .
Вы должны получить подсказку End conversation
: «Мне приятно, что вы удовлетворены своим выбором. Желаю удачи в ваших поисках. Прощайте».
4. Добавьте поддерживающий путь
Теперь вы построили основной путь, по которому большинство пользователей идут в вашем действии. Однако пользователь может ответить на подсказку из сцены Fortune
: « Что вы выберете, чтобы помочь вам в вашем поиске: дракона, переводчика или компаса?», Выбрав вариант, который не входит в число предоставленных вариантов.
В этом разделе вы настраиваете свое действие, чтобы понимать, когда пользователь говорит «магия» , «деньги» , «лошадь» или «телефон» , и повторно предлагать пользователю выбрать один из трех исходных вариантов, когда он выбирает. один из этих вариантов. Чтобы настроить эту логику, вам необходимо создать новый type
, который будет содержать эти другие варианты выбора и новое намерение, other_option
, которое сопоставляется, когда пользователь произносит один из этих вариантов. Вам также необходимо аннотировать обучающие фразы внутри other_option
, чтобы идентифицировать и извлечь параметры намерения.
Когда механизм обработки естественного языка помощника обнаруживает совпадение параметров во вводе пользователя, он извлекает значение как типизированный параметр, чтобы вы могли выполнять с ним логические операции в сцене. В этой кодовой лаборатории вы настраиваете свое действие для извлечения помощи, которую выбирает пользователь, и ссылаетесь на этот выбор в подсказке.
Создать тип unavailable_options
Теперь вы можете создать тип unavailable_options
, содержащий множество различных параметров, чтобы ваше действие могло идентифицировать эти данные во входных данных пользователя.
Чтобы создать тип unavailable_options
, выполните следующие действия:
- Создайте новый файл с именем
unavailable_options.yaml
в каталогеtypes
:
touch custom/types/unavailable_options.yaml
- Откройте
custom/types/unavailable_options.yaml
в текстовом редакторе. - Добавьте следующие данные
synonyms
в файлunavailable_options.yaml
:
unavailable_options.yaml
synonym: entities: money: synonyms: - money - cash - gold horse: synonyms: - horse - stallion - steed magic: synonyms: - magic - enchanted - spells phone: synonyms: - phone - cell - apps matchType: EXACT_MATCH
- Сохраните файл.
Создать other_option
Затем вы создаете намерение под other_option
и добавляете обучающие фразы, включающие параметры типа unavailable_options
. Это намерение соответствует, когда пользователь выбирает вариант, содержащийся в типе unavailable_options
.
Чтобы создать и настроить other_option
, выполните следующие действия:
- Создайте новый файл с
other_option.yaml
в каталогеintents
:
touch custom/intents/other_option.yaml
- Откройте
custom/intents/other_option.yaml
в текстовом редакторе. - Добавьте следующие данные
parameters
и данныеtrainingPhrases
вother_option.yaml
:
другой_option.yaml
parameters: - name: chosenUnavailableOption type: name: unavailable_options trainingPhrases: - I want to use ($chosenUnavailableOption 'spells' auto=true) - I really really want to use a ($chosenUnavailableOption 'phone' auto=true) - ($chosenUnavailableOption 'magic' auto=true)! - ($chosenUnavailableOption 'cash' auto=true) - I want to ride a ($chosenUnavailableOption 'horse' auto=true)
Здесь вы вручную аннотируете обучающие фразы недоступными параметрами, указанными в предыдущем разделе. Параметр намерения, chosenUnavailableOption
, позволяет вам извлечь имя параметра и использовать его в приглашении, что вы сделаете в следующем разделе.
- Сохраните файл.
Добавьте намерение other_option
в сцену Fortune
Теперь у вас есть other_option
, которое может обрабатывать пользователя, указывающего опцию, которая не является одной из исходных опций. В этом разделе вы добавите other_option
в сцену Fortune
. Параметр Intent используется для настройки подсказки на основе ввода пользователя.
Чтобы добавить other_option
в сцену Fortune
, выполните следующие действия:
- Откройте
custom/scenes/Fortune.yaml
в текстовом редакторе. - Добавьте следующие данные
intentEvents
между даннымиconditionalEvents
и даннымиslots
:
Фортуна.yaml
intentEvents: - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey. intent: other_option
- Сохраните файл.
Выражение $intent.params.chosenUnavailableOption
относится к объекту параметра намерения, а $intent.params.chosenUnavailableOption.original
относится к значению этого объекта. original
свойство относится к необработанным входным данным, указанным пользователем.
Когда пользователь произносит опцию, указанную в типе unavailable_options
во время сцены Fortune
, other_option
сопоставляется и добавляет подсказку в очередь подсказок. Поскольку переход не указан, цикл выполнения сцены продолжается путем повторной оценки этапа условий. Затем слот chosenOptions
добавляет свое приглашение в очередь подсказок, и очередь подсказок доставляется пользователю.
Проверьте свои действия в симуляторе
Теперь ваше действие должно реагировать соответствующим образом, когда пользователь выбирает один из вариантов, перечисленных в типе unavailable_options
, и указывает, какую помощь выбрал пользователь. Затем ваше действие должно повторно предложить пользователю выбрать один из исходных вариантов (дракон, переводчик или компас).
Чтобы проверить свое действие в симуляторе, выполните следующие действия:
- В терминале выполните следующую команду:
gactions deploy preview
Вы должны получить вывод, который выглядит следующим образом:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Скопируйте предоставленный URL-адрес и вставьте его в браузер.
- Введите
Talk to my test app
в поле «Ввод» и нажмите Enter . - Введите
Yes
в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» . - Введите
magic
в поле ввода и нажмите Enter .
Вы можете заметить, что подсказка звучит неправильно, когда пользователь выбирает «магия» из-за статьи с буквой «а», расположенной перед ней. Этот вопрос рассматривается в следующих разделах.
Добавить обработчик unavailable_options
Чтобы поместить статью «a» перед соответствующими вариантами выбора из типа unavailable_options
, вы можете настроить обработчик событий в своей логике выполнения, чтобы проверять, требует ли опция, которую выбирает пользователь, перед ней. Во-первых, вам нужно настроить свое действие для вызова обработчика из сцены Fortune
.
Чтобы добавить обработчик unavailable_options
на сцену Fortune
, выполните следующие действия:
- Откройте
custom/scenes/Fortune.yaml
в текстовом редакторе. - Обновите файл
Fortune.yaml
, включив в него следующие данныеintentEvents
:
Фортуна.yaml
intentEvents: - handler: webhookHandler: unavailable_options intent: other_option
- Сохраните файл.
Обновление и развертывание выполнения
Теперь, когда вы настроили свое действие для вызова обработчика событий unavailable_options
, вы можете обновить обработчик при выполнении и развернуть его.
Чтобы обновить выполнение, выполните следующие действия:
- Откройте
webhooks/ActionsOnGoogleFulfillment/index.js
в текстовом редакторе. - Добавьте следующий код в
index.js
под обработчикомgreeting
:
index.js
app.handle('unavailable_options', conv => {
const option = conv.intent.params.chosenUnavailableOption.original;
const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
let message = 'I have seen the future and ';
if(optionsNeedA.has(optionKey)){
message = message + 'a ';
}
message = message + `${option} will not aid you on your journey. `;
conv.add(message);
});
- Добавьте следующий код в раздел
const app = conversation({debug:true});
:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- Сохраните файл.
Разобраться в коде
Обработчик unavailable_options
делает следующее:
- Получает данные
option
из объектаconv
и присваиваетoption
original
свойству, которое является необработанным вводом пользователя. - Назначает
optionKey
resolved
свойству, которое является ключом для типаunavailable_options
. - Проверяет, является ли
optionKey
одной из опций, требующих «а»; если да, то создает сообщение с добавленной буквой "а" - Добавляет сообщение через
conv.add(message)
Обновить обработчики
Чтобы разрешить действию использовать unavailable_options
, добавьте обработчик unavailable_options
в webhooks/ActionsOnGoogleFulfillment.yaml
.
- Добавьте имя обработчика
unavailable_options
вActionsOnGoogleFulfillment.yaml
:
ДействияOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- Сохраните файл.
Проверьте свои действия в симуляторе
Теперь ваше действие должно корректировать подсказку в зависимости от того, требует ли выбор пользователя из типа unavailable_options
перед ним статьи с буквой «a».
Чтобы протестировать свое действие, выполните следующие действия:
- В терминале выполните следующую команду:
gactions deploy preview
Вы должны получить вывод, который выглядит следующим образом:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Скопируйте предоставленный URL-адрес и вставьте его в браузер.
- Нажмите или введите
Talk to my test app
в поле «Ввод» и нажмите Enter . - Введите
Yes
в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» . - Введите
magic
в поле ввода и нажмите Enter . Затем введитеhorse
в поле ввода и нажмите Enter.
Ваше действие должно добавить артикль «а» перед выбором «лошадь», при этом создав подсказку без артикля «а» для выбора «магия».
5. Визуализируйте действие в консоли действий.
Actions SDK совместим с веб-IDE Actions Builder , интегрированной в консоль Actions. Вы можете перенести свою локальную файловую систему в черновик вашего действия в консоли с помощью команды gactions push
. Консоль действий предоставляет визуальное представление конфигурации вашего действия. Визуальное отображение вашего действия может быть полезно во время разработки и не влияет на версию вашего действия, которая используется для тестирования.
Чтобы отправить проект Actions и просмотреть его в консоли Actions, выполните следующие действия:
- В терминале выполните следующую команду, чтобы отправить проект на консоль действий:
gactions push
Вы должны получить вывод, который выглядит следующим образом:
✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
- Скопируйте предоставленный URL-адрес и вставьте его в браузер.
- В консоли «Действия» нажмите «Разработка» на верхней панели навигации.
- Нажмите стрелку раскрывающегося списка рядом с пунктом «Сцены» и нажмите «Пуск» . Вы должны увидеть визуальное представление сцены
Start
вашего действия, как показано на следующем снимке экрана:
Очистите свой проект [рекомендуется]
Чтобы избежать возможных расходов, рекомендуется удалять проекты, которые вы не собираетесь использовать. Чтобы удалить проекты, созданные вами в этой лаборатории кода, выполните следующие действия:
- Чтобы удалить облачный проект и ресурсы, выполните действия, перечисленные в разделе «Завершение работы (удаление) проектов» .
- Необязательно: Чтобы немедленно удалить проект из консоли «Действия», выполните действия, перечисленные в разделе «Удалить проект» . Если вы не выполните этот шаг, ваш проект будет автоматически удален примерно через 30 дней.
6. Поздравляем!
Теперь вы знаете промежуточные навыки, необходимые для создания действий для Google Assistant с помощью Actions SDK.
Что вы покрыли
- Как разработать диалоговые действия с использованием библиотеки выполнения Node.js
- Как использовать слоты для сбора данных от пользователя
- Как использовать условия, чтобы добавить логику в сцену
- Как добавить игровой цикл
- Как добавить поддерживающий путь
Узнать больше
Вы можете изучить эти ресурсы, чтобы узнать о создании действий для Google Assistant:
- Документация по разработке действий для Google Assistant
- Действия на странице Google GitHub для примера кода и библиотек
- Официальное сообщество Reddit для разработчиков, работающих с Google Assistant.
- Рекомендации по дизайну диалога , лучшие практики и рекомендации, касающиеся диалоговых действий.
Следуйте за нами в Твиттере @ActionsOnGoogle, чтобы быть в курсе наших последних объявлений, и напишите в Твиттере #AoGDevs , чтобы поделиться тем, что вы создали!
Опрос обратной связи
Прежде чем отправиться, пожалуйста, заполните краткую анкету о своем опыте.