Если вы когда-либо писали действие для Google Assistant, вы, вероятно, обнаружили, что со временем это становится проще, как и большинство других вещей.

Вы будете использовать множество фрагментов кода снова и снова, и вместо того, чтобы искать одну вещь в каждом проекте, я составил список распространенных вариантов использования AoG, чтобы ускорить дальнейшую разработку Action'ов. Надеюсь, что вы найдете ее полезной! Если вы что-то упустили или у вас есть совет, как сделать что-то лучше, дайте мне знать!

Шаблон AoG + Firebase

Базовый шаблон Firebase Cloud Functions для Actions on Google. Вы можете использовать это либо с Node.js, либо с встроенным редактором Dialogflow.

Ищете шаблон TypeScript? Найди здесь :)

Получение разрешений

На данный момент вы можете получить следующие разрешения от Actions on Google Helpers:

  • Имя
  • Грубое расположение (только для динамиков с голосовым управлением)
  • Точное местоположение

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

После запроса вам необходимо создать намерение в Dialogflow с именем события «actions_intent_PERMISSION». Не забудьте включить исполнение этого намерения.

Хотите узнать больше о разрешениях в AoG? Вот полная статья GDE Вассима Чегама - Обработка разрешений с помощью DialogFlow и действий в Google.

Получить параметры из намерения

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

Сохраняйте данные между разговорами

Если вы разрабатываете более крупное действие, есть вероятность, что вам нужно сохранить некоторые пользовательские данные, такие как псевдоним, счет и так далее. Если вам не нужен доступ к этим данным из какой-либо другой службы, проще всего сохранить их в самом объекте conv. Срок действия сохраненных данных не истечет, когда пользователи выйдут из вашего действия. Если вам нужно получить доступ к данным за пределами AoG, хорошим выбором будет что-то вроде Firebase Firestore.

Контексты

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

Динамическое заполнение списков и каруселей

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

Получить результат из списка / карусели

Чтобы получить результат от выбора пользователя в списке, карусели и т. Д., Вам необходимо создать намерение с именем события «actions_intent_OPTION».

Вызов внешнего API

Вызов внешнего API в AoG не отличается от Node.js, но есть один важный момент: у вас должен быть проект Blaze в Firebase, чтобы выполнять вызовы вне API Google. Проект Blaze платный, но у него большие бесплатные квоты. Вам потребуется время, чтобы их исчерпать. Если вы хотите узнать больше о ценах и ограничениях Firebase, вы можете сделать это здесь.

Если вы используете Firebase Cloud Functions

Выполнить:

npm i -s request request-promise

Если вы используете встроенный редактор Dialogflow

Добавьте следующие зависимости в package.json во встроенном редакторе Dialogflow. Он установит модули автоматически. Вы можете проверить, доступна ли более новая версия.

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

Перенаправить намерения

Иногда вы можете получить одно и то же намерение из нескольких других намерений, но, возможно, вам нужно собрать другие параметры и так далее. Для этого AoG предлагает conv.followup («имя-события»), который позволяет перенаправить намерение другому обработчику. В качестве параметра вы передаете ему имя события для другого намерения.

К сожалению, вернуть ответ до перенаправления невозможно.

Динамическое создание настраиваемых сущностей

Здесь я просто дам ссылку на Сообщение в блоге Dialogflow, в котором он подробно описан.

Локализация

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

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

Умный дом

Разработка Action'ов для умного дома отличается от разработки диалоговых Actions - с той разницей, что Google позаботится о NLU-дизайне разговора за вас.

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

Вы предоставите несколько намерений, которые Google будет использовать для выполнения ваших действий:

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

Рекомендуем прочитать для разработки действий для умного дома:

Развивайся быстрее

Если вы используете Visual Studio Code для разработки своих действий, вы можете установить Действия в Google Snippets, чтобы ускорить разработку. Там вы найдете множество примеров кода, которые вы могли видеть выше, и многое другое, чтобы помочь вам разработать свое действие еще быстрее. :)

Спасибо командам Actions on Google и Dialogflow за отличные платформы! Удачи в создании ваших действий!