Встроенные намерения (Dialogflow)

Встроенное намерение — это уникальный идентификатор, который вы можете указать, чтобы сообщить Google Assistant, что ваше действие может выполнить определенную категорию запросов пользователей. Например, вот несколько примеров пользовательских запросов, которые Ассистент сопоставляет встроенным намерениям:

  • Встроенное намерение «Играть в игру» : «Окей, Google. Поиграй в игру на память».
  • Встроенное намерение «Получить гороскоп» : «Окей, Google. Получите мой гороскоп».

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

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

Интегрируйте встроенные намерения

В зависимости от того, как вы строите свое действие, существуют разные способы интеграции встроенных намерений.

Диалоговый поток

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

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

  1. Откройте консоль Dialogflow , выберите своего агента, затем перейдите на экран «Намерения» .
  2. Создайте или выберите намерение, которое инициирует ваш агент, когда он получает определенное встроенное намерение. Откройте раздел «События» и нажмите « Добавить событие» .

    Рисунок 1. Добавление события Dialogflow в консоль Dialogflow.
  3. В поле «События» введите имя встроенного события намерения вашего агента (например, actions_intent_PLAY_GAME ).

    Рисунок 2. Прикрепление встроенного намерения к вашему агенту в консоли Dialogflow.
  4. Нажмите Сохранить .

SDK действий

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

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

  1. Укажите встроенное намерение в поле имени в определении действия .
  2. Загрузите пакет действий в проект Actions с помощью инструмента gactions , как описано в обзоре Actions SDK .

Например, в следующем фрагменте показано, как можно добавить встроенное намерение CHECK_AIR_QUALITY :

{
   "actions":[
      {
         "description":"Default Welcome Intent",
         "name":"MAIN",
         "fulfillment":{
            "conversationName":"conversation_1"
         },
         "intent":{
            "name":"actions.intent.MAIN"
         }
      },
      {
         "description":"Check Air Quality",
         "name":"CHECK_AIR_QUALITY",
         "fulfillment":{
            "conversationName":"conversation_1"
         },
         "intent":{
            "name":"actions.intent.CHECK_AIR_QUALITY"
         }
      }
   ],
   "conversations":{
      "conversation_1":{
         "name":"conversation_1",
         "url":"https://example.com/fulfillment",
         "fulfillmentApiVersion":2
      }
   }
}

Обработка встроенных параметров намерения

Когда ваше действие вызывается через встроенное намерение, ваше выполнение может получить дополнительные параметры. Схема намерений определяет имена параметров и их типы как примитивные типы или сущности Schema.org . Чтобы просмотреть схему встроенных намерений Conversational Action, см. справочник по встроенным намерениям .

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

Например, схема встроенного намерения actions.intent.CHECK_AIR_QUALITY определяет четыре необязательных параметра:

Имя параметра Тип
attributes Строковое значение.
location Объект schema.org/Place .
temporalCoverage Объект schema.org/Duration .
timeIndicator EnumeratedDuration (расширение, специфичное для Google).

В следующем фрагменте кода показан пример запроса веб-перехватчика беседы (JSON), когда пользователь вызывает ваше действие, говоря : «Какое качество воздуха в Сан-Франциско завтра?» :

"inputs":[
      {
         "intent":"actions.intent.CHECK_AIR_QUALITY",
         "rawInputs":[
            {
               "inputType":"VOICE",
               "query":"what is the air quality in san francisco tomorrow"
            }
         ],
         "arguments":[
            {
               "name":"location",
               "structuredValue":{
                  "geo":{
                     "longitude":-122.41941550000001,
                     "latitude":37.7749295
                  },
                  "@context":"https://schema.org",
                  "@type":"Place",
                  "name":"san francisco"
               }
            },
            {
               "name":"temporalCoverage",
               "rawText":"2018-04-25",
               "textValue":"2018-04-25"
            }
         ]
      }
   ]

В этом примере параметры принимают следующие значения:

  • Параметр location содержит значение schema.org/Place для «Сан-Франциско».
  • Параметр temporalCoverage содержит значение schema.org/Duration для завтрашней даты относительно времени вызова.
  • Значения attributes и параметров timeIndicator отсутствуют, поскольку фраза вызова пользователя не включала такую ​​информацию.

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

app.intent('actions.intent.CHECK_AIR_QUALITY', (conv) => {
  const attributes = conv.arguments.get('attributes');
  const location = conv.arguments.get('location');
  const temporal_coverage = conv.arguments.get('temporalCoverage');
  Const time_indicator = conv.arguments.get('timeIndicator')

  // Your Action logic. If you need to use any of the parameter values,
  // you should check first that it is defined. Arguments.get returns
  // undefined if it can't find a value for a parameter.

});

Тестируйте интеграции со встроенными намерениями

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

  1. Откройте симулятор действий с включенным тестовым действием или откройте Ассистент на своем устройстве.
  2. Произнесите или введите запрос, связанный с этим встроенным намерением. Например: «Я хочу поиграть в игру».
  3. В появившемся диалоговом окне выбора приложения найдите свое действие.
  4. Выберите свое приложение, чтобы отправить намерение в него.
Рис. 3. Диалоговое окно выбора действия.
из встроенной фразы намерения.
Рисунок 4. Вызов действия, привязанного к встроенному намерению.

Рекомендации по использованию встроенных намерений

При использовании встроенных намерений следует следовать следующим рекомендациям:

  • Сопоставьте встроенные намерения с конкретными действиями . Когда определенное встроенное намерение запускает ваше действие, направляйте пользователя к конкретному намерению и функциональности вашего действия с минимальными трудностями. Например, если ваше действие поддерживает встроенное намерение PLAY_GAME и получает это намерение, вам следует немедленно отправить пользователя к игровой функции вашего действия. Не спрашивайте пользователя снова, хотят ли они сыграть в игру.
  • Обработка встроенных параметров намерения . Обязательно используйте значения встроенных параметров намерения, которые Ассистент отправляет вам для выполнения. Не запрашивайте у пользователя эти значения повторно.