Создайте действия для Google Assistant с помощью Actions SDK (уровень 2).

1. Обзор

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

Эта лаборатория кода охватывает концепции промежуточного уровня для разработки с помощью Google Assistant и основана на действии, созданном в разделе «Создание действий для Google Assistant», с использованием лаборатории кода Actions SDK (уровень 1) . Мы настоятельно рекомендуем вам пройти лабораторную работу по коду уровня 1, прежде чем приступать к этой.

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

Что ты построишь

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

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

Прежде чем приступить к сборке, вы можете взаимодействовать с живым действием на своем устройстве с поддержкой Google Assistant, сказав : «Эй, Google, поговори с Судьбой и Фортуной» . Путь по умолчанию для этого действия для возвращающегося пользователя выглядит следующим образом:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

Что вы узнаете

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

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

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

  • 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 , выполните следующие действия:

  1. Откройте проект Actions из лаборатории кода уровня 1 в текстовом редакторе.
  2. Откройте файл custom/scenes/Start.yaml .
  3. Обновите 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
  1. Сохраните файл.

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

  1. Перейдите к проекту Codelab Level 1 Actions в терминале.
  2. Создайте новый файл Fortune.yaml в каталоге scenes :
touch custom/scenes/Fortune.yaml

Вы отредактируете этот файл в следующем разделе.

Определить логику диалога для сцены Fortune

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

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

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

Создать тип available_options

В этом разделе вы создаете новый тип под названием available_options , который определяет три параметра, которые пользователи могут выбрать (дракон, переводчик и компас) в ответ на запрос. Вы также определяете несколько синонимов для этих параметров на случай, если пользователь скажет что-то подобное. В следующем разделе вы добавите тип available_options в слот, чтобы указать, что вы хотите получить выбор пользователя.

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

  1. Создайте новый каталог под названием types :
mkdir custom/types
  1. Создайте новый файл с именем available_options.yaml в каталоге types :
touch custom/types/available_options.yaml
  1. Откройте custom/types/available_options.yaml в текстовом редакторе.

Типы настраиваются как пары данных «ключ-значение», где ключ — это имя типа, а значения — синонимы этого ключа. Когда вы определяете ключ, он автоматически добавляется как значение. С помощью Actions SDK вы представляете ключи как entities , а значения как synonyms .

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

  1. Добавьте следующие 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
  1. Сохраните файл.

Теперь ваше действие понимает, что available_options — это дракон, переводчик и компас, а также может распознавать несколько соответствующих синонимов.

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

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

  1. Откройте custom/scenes/Fortune.yaml в текстовом редакторе.
  2. Добавьте следующие данные 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
  1. Сохраните файл.

Теперь вы добавили в слот тип available_options , который сообщает вашему действию информацию, которую вам необходимо получить от пользователя (его выбор помощи), прежде чем продолжить. Вы также настроили подсказку внутри слота, которая добавляется в очередь подсказок, когда пользователь достигает стадии заполнения слота сцены.

Когда вы называете слот chosenOptions , поле writeSessionsParam обновляется с тем же именем ( $session.params.chosenOptions ). Вы можете получить доступ к этому параметру по этому имени в командной строке и при выполнении через клиентскую библиотеку.

Добавить условие

Теперь, когда вы добавили слот, требующий выбора пользователем помощи, вы можете добавить условие , проверяющее, что данные слота были получены, прежде чем пользователь сможет продолжить разговор.

В этом разделе вы добавляете условие scene.slots.status == "FINAL" , которое проверяет полноту заполнения слота. Как только все слоты заполнены, условие добавляет приглашение ( You picked $session.params.chosenOptions. ) в очередь приглашений.

Чтобы настроить условие scene.slots.status == "FINAL" , выполните следующие действия:

  1. Откройте custom/scenes/Fortune.yaml в текстовом редакторе.
  2. Добавьте данные conditionalEvents в начало файла Fortune.yaml :

Фортуна.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. Сохраните файл.

Проверьте свои действия в симуляторе

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

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

  1. В терминале выполните следующую команду:
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
  1. Скопируйте предоставленный URL-адрес и вставьте его в браузер.
  2. Нажмите или введите Talk to my test app в поле «Ввод» и нажмите Enter .
  3. Введите Yes в поле ввода и нажмите Enter . Кроме того, вы можете нажать кнопку «Да» .

a899d45c542668f6.png

  1. Нажмите, введите или скажите dragon . Вы должны получить подсказку «Вы выбрали дракона».

В следующем разделе вы настраиваете подсказки для каждого средства, которое может выбрать пользователь.

Настройте подсказки, используя условия

В этом разделе вы добавляете условия для каждого варианта, который может выбрать пользователь, и добавляете настраиваемое приглашение для каждого условия.

Настройте судьбу dragon

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

  1. Откройте custom/scenes/Fortune.yaml в текстовом редакторе.
  2. Замените данные 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.
  1. Сохраните файл.

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

Настройте translator и compass судьбы

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

  1. В файле 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.
  1. Сохраните файл.

Проверьте свои действия в симуляторе

На этом этапе ваше действие должно предоставлять пользователю индивидуальное состояние в зависимости от выбранного им варианта.

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

  1. В терминале выполните следующую команду:
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
  1. Скопируйте предоставленный URL-адрес и вставьте его в браузер.
  2. Введите Talk to my test app в поле «Ввод» и нажмите Enter .
  3. Введите Да в поле ввода и нажмите Enter. Либо нажмите кнопку «Да» .
  4. Нажмите, введите или скажите Translator .

29e17f950bd0dd71.png

Вы должны получить соответствующее состояние за опцию «переводчик».

3. Добавьте игровой цикл

В этом разделе вы настраиваете свое действие, чтобы пользователь мог выбрать другой вариант и услышать другое предсказание после выбора. Это изменение похоже на вопрос «Хотите сыграть еще раз?» сообщение в конце игры. Чтобы построить этот цикл, вы можете повторно использовать ранее созданные намерения yes и no и добавить их в новую сцену под названием Again .

Создать сцену Again

В этом разделе вы создаете новую сцену Again и добавляете подсказку, в которой пользователю предлагается выбрать другой вариант.

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

  1. Создайте новый файл Again.yaml в каталоге scenes :
touch custom/scenes/Again.yaml
  1. Откройте custom/scenes/Again.yaml в текстовом редакторе.
  2. Добавьте следующие данные 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"
  1. Сохраните файл.

Добавить переход от сцены Fortune к сцене Again .

После того, как пользователь получит свое состояние, разговор должен перейти к новой сцене Again .

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

  1. Откройте custom/scenes/Fortune.yaml в текстовом редакторе.
  2. Добавьте 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
  1. Сохраните файл.

Проверьте свои действия в симуляторе

На этом этапе ваше действие должно предоставить пользователю следующую подсказку после того, как он получит свое состояние: «Это то, что я вижу для вас. Хотите ли вы выбрать другой вариант и исследовать другое будущее?»

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

  1. В терминале выполните следующую команду:
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
  1. Скопируйте предоставленный URL-адрес и вставьте его в браузер.
  2. Введите Talk to my test app в поле «Ввод» и нажмите Enter .
  3. Введите Yes в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» .
  4. Нажмите, введите или скажите dragon .

b299e9fed9aedb69.png

Вы должны получить состояние за вариант дракона и подсказку Again .

Добавьте намерения и перейдите к сцене Again

В этом разделе вы добавляете намерения yes и no к сцене Again , чтобы ваше действие понимало, хочет ли пользователь выбрать новый вариант или нет. Вы также добавляете соответствующие переходы для намерений yes и no . Намерение yes переходит к сцене Fortune , а намерение no — на сцену End conversation .

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

  1. Откройте custom/scenes/Again.yaml в текстовом редакторе.
  2. Добавьте данные 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
  1. Сохраните файл.

Проверьте свои действия в симуляторе

Теперь ваше действие должно понимать, хочет ли пользователь выбрать новый вариант или завершить разговор.

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

  1. В терминале выполните следующую команду:
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
  1. Скопируйте предоставленный URL-адрес и вставьте его в браузер.
  2. Введите Talk to my test app в поле «Ввод» и нажмите Enter .
  3. Введите Yes в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» .
  4. Нажмите, введите или произнесите один из вариантов.
  5. Введите Yes в поле ввода и нажмите Enter.

5d0690332efe2e29.png

Вы должны получить подсказку: «Что вы выберете, чтобы помочь вам в вашем поиске: дракона, переводчика или компаса?»

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

  1. Нажмите, введите или произнесите один из вариантов.
  2. Введите No в поле ввода и нажмите Enter .

Вы должны получить подсказку End conversation : «Мне приятно, что вы удовлетворены своим выбором. Желаю удачи в ваших поисках. Прощайте».

4. Добавьте поддерживающий путь

Теперь вы построили основной путь, по которому большинство пользователей идут в вашем действии. Однако пользователь может ответить на подсказку из сцены Fortune : « Что вы выберете, чтобы помочь вам в вашем поиске: дракона, переводчика или компаса?», Выбрав вариант, который не входит в число предоставленных вариантов.

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

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

Создать тип unavailable_options

Теперь вы можете создать тип unavailable_options , содержащий множество различных параметров, чтобы ваше действие могло идентифицировать эти данные во входных данных пользователя.

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

  1. Создайте новый файл с именем unavailable_options.yaml в каталоге types :
touch custom/types/unavailable_options.yaml
  1. Откройте custom/types/unavailable_options.yaml в текстовом редакторе.
  2. Добавьте следующие данные 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
  1. Сохраните файл.

Создать other_option

Затем вы создаете намерение под other_option и добавляете обучающие фразы, включающие параметры типа unavailable_options . Это намерение соответствует, когда пользователь выбирает вариант, содержащийся в типе unavailable_options .

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

  1. Создайте новый файл с other_option.yaml в каталоге intents :
touch custom/intents/other_option.yaml
  1. Откройте custom/intents/other_option.yaml в текстовом редакторе.
  2. Добавьте следующие данные 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 , позволяет вам извлечь имя параметра и использовать его в приглашении, что вы сделаете в следующем разделе.

  1. Сохраните файл.

Добавьте намерение other_option в сцену Fortune

Теперь у вас есть other_option , которое может обрабатывать пользователя, указывающего опцию, которая не является одной из исходных опций. В этом разделе вы добавите other_option в сцену Fortune . Параметр Intent используется для настройки подсказки на основе ввода пользователя.

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

  1. Откройте custom/scenes/Fortune.yaml в текстовом редакторе.
  2. Добавьте следующие данные 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
  1. Сохраните файл.

Выражение $intent.params.chosenUnavailableOption относится к объекту параметра намерения, а $intent.params.chosenUnavailableOption.original относится к значению этого объекта. original свойство относится к необработанным входным данным, указанным пользователем.

Когда пользователь произносит опцию, указанную в типе unavailable_options во время сцены Fortune , other_option сопоставляется и добавляет подсказку в очередь подсказок. Поскольку переход не указан, цикл выполнения сцены продолжается путем повторной оценки этапа условий. Затем слот chosenOptions добавляет свое приглашение в очередь подсказок, и очередь подсказок доставляется пользователю.

Проверьте свои действия в симуляторе

Теперь ваше действие должно реагировать соответствующим образом, когда пользователь выбирает один из вариантов, перечисленных в типе unavailable_options , и указывает, какую помощь выбрал пользователь. Затем ваше действие должно повторно предложить пользователю выбрать один из исходных вариантов (дракон, переводчик или компас).

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

  1. В терминале выполните следующую команду:
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
  1. Скопируйте предоставленный URL-адрес и вставьте его в браузер.
  2. Введите Talk to my test app в поле «Ввод» и нажмите Enter .
  3. Введите Yes в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» .
  4. Введите magic в поле ввода и нажмите Enter .

3a42c33eca435f32.png

Вы можете заметить, что подсказка звучит неправильно, когда пользователь выбирает «магия» из-за статьи с буквой «а», расположенной перед ней. Этот вопрос рассматривается в следующих разделах.

Добавить обработчик unavailable_options

Чтобы поместить статью «a» перед соответствующими вариантами выбора из типа unavailable_options , вы можете настроить обработчик событий в своей логике выполнения, чтобы проверять, требует ли опция, которую выбирает пользователь, перед ней. Во-первых, вам нужно настроить свое действие для вызова обработчика из сцены Fortune .

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

  1. Откройте custom/scenes/Fortune.yaml в текстовом редакторе.
  2. Обновите файл Fortune.yaml , включив в него следующие данные intentEvents :

Фортуна.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Сохраните файл.

Обновление и развертывание выполнения

Теперь, когда вы настроили свое действие для вызова обработчика событий unavailable_options , вы можете обновить обработчик при выполнении и развернуть его.

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

  1. Откройте webhooks/ActionsOnGoogleFulfillment/index.js в текстовом редакторе.
  2. Добавьте следующий код в 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);
});
  1. Добавьте следующий код в раздел const app = conversation({debug:true}); :

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Сохраните файл.

Разобраться в коде

Обработчик unavailable_options делает следующее:

  • Получает данные option из объекта conv и присваивает option original свойству, которое является необработанным вводом пользователя.
  • Назначает optionKey resolved свойству, которое является ключом для типа unavailable_options .
  • Проверяет, является ли optionKey одной из опций, требующих «а»; если да, то создает сообщение с добавленной буквой "а"
  • Добавляет сообщение через conv.add(message)

Обновить обработчики

Чтобы разрешить действию использовать unavailable_options , добавьте обработчик unavailable_options в webhooks/ActionsOnGoogleFulfillment.yaml .

  1. Добавьте имя обработчика unavailable_options в ActionsOnGoogleFulfillment.yaml :

ДействияOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Сохраните файл.

Проверьте свои действия в симуляторе

Теперь ваше действие должно корректировать подсказку в зависимости от того, требует ли выбор пользователя из типа unavailable_options перед ним статьи с буквой «a».

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

  1. В терминале выполните следующую команду:
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
  1. Скопируйте предоставленный URL-адрес и вставьте его в браузер.
  2. Нажмите или введите Talk to my test app в поле «Ввод» и нажмите Enter .
  3. Введите Yes в поле ввода и нажмите Enter . Либо нажмите кнопку «Да» .
  4. Введите magic в поле ввода и нажмите Enter . Затем введите horse в поле ввода и нажмите Enter.

54ee24c5c3c56e.png

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

5. Визуализируйте действие в консоли действий.

Actions SDK совместим с веб-IDE Actions Builder , интегрированной в консоль Actions. Вы можете перенести свою локальную файловую систему в черновик вашего действия в консоли с помощью команды gactions push . Консоль действий предоставляет визуальное представление конфигурации вашего действия. Визуальное отображение вашего действия может быть полезно во время разработки и не влияет на версию вашего действия, которая используется для тестирования.

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

  1. В терминале выполните следующую команду, чтобы отправить проект на консоль действий:
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.
  1. Скопируйте предоставленный URL-адрес и вставьте его в браузер.
  2. В консоли «Действия» нажмите «Разработка» на верхней панели навигации.
  3. Нажмите стрелку раскрывающегося списка рядом с пунктом «Сцены» и нажмите «Пуск» . Вы должны увидеть визуальное представление сцены Start вашего действия, как показано на следующем снимке экрана:

cae526c647f8d40f.png

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

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

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

6. Поздравляем!

Теперь вы знаете промежуточные навыки, необходимые для создания действий для Google Assistant с помощью Actions SDK.

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

  • Как разработать диалоговые действия с использованием библиотеки выполнения Node.js
  • Как использовать слоты для сбора данных от пользователя
  • Как использовать условия, чтобы добавить логику в сцену
  • Как добавить игровой цикл
  • Как добавить поддерживающий путь

Узнать больше

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

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

Опрос обратной связи

Прежде чем отправиться, пожалуйста, заполните краткую анкету о своем опыте.