1. Обзор
Actions on Google — это платформа для разработчиков, которая позволяет создавать программное обеспечение для расширения функциональности Google Assistant , виртуального личного помощника Google, на более чем 1 миллиарде устройств, включая интеллектуальные колонки, телефоны, автомобили, телевизоры, наушники и многое другое. Пользователи вовлекают Ассистента в разговор, чтобы сделать что-то, например купить продукты или заказать поездку. (Полный список возможностей см. в каталоге «Действия» .) Как разработчик, вы можете использовать «Действия в Google», чтобы легко создавать и управлять восхитительными и эффективными диалогами между пользователями и вашей сторонней службой.
Это расширенный модуль codelab, предназначенный для читателей, у которых уже есть некоторый опыт создания действий для Google Assistant. Если у вас нет опыта разработки с помощью Actions on Google, мы настоятельно рекомендуем вам ознакомиться с платформой, пройдя наши вводные курсы по написанию кода ( Уровень 1 , Уровень 2 и Уровень 3 ). Эти расширенные модули проведут вас через ряд функций, которые помогут вам расширить функциональность вашего действия и расширить свою аудиторию.
Одним из важных способов измерения успеха действия является вовлечение пользователей или то, насколько эффективно действие возвращает пользователей после их первого взаимодействия. Чтобы сделать это проще, вы можете реализовать в своем действии несколько функций, которые дадут пользователям возможность вернуться в ваш разговор.
Лаборатория кода охватывает функции взаимодействия с пользователями и лучшие практики для Actions on Google.
Что ты построишь
Вы улучшите уже созданную функцию, разрешив ей:
- Отправляйте пользователям ежедневное обновление, которое они смогут нажать, чтобы поговорить с вашим действием.
- Отправляйте пользователям push-уведомления со ссылкой на ваше действие.
- Создайте ссылку, которая приведет пользователей к вашему действию из мобильного веб-браузера.
Что вы узнаете
- Что такое вовлеченность пользователей и почему это важно для успеха действия
- Как изменить действие, чтобы повысить вовлеченность пользователей
- Какие функции взаимодействия с пользователем использовать в различных видах действий
- Как использовать API действий для отправки уведомлений через Ассистента
Что вам понадобится
У вас должны быть следующие инструменты:
- IDE/текстовый редактор по вашему выбору, например WebStorm , Atom или Sublime.
- Терминал для запуска команд оболочки с установленными Node.js, npm и git.
- Веб-браузер, например Google Chrome.
- Локальная среда разработки с интерфейсом командной строки Firebase.
- Мобильное устройство (Android или iOS) с помощником (вы должны войти в помощник с той же учетной записью Google, которую вы будете использовать для создания этого проекта).
Знание JavaScript (ES6) также настоятельно рекомендуется, хотя и не обязательно, для понимания кода веб-перехватчика.
2. Настройте свой проект
В этом разделе показано, как добавить функции взаимодействия с пользователем в готовое, ранее созданное действие.
Понять образец
Образец этой кодовой лаборатории представляет собой простое действие для вымышленного тренажерного зала под названием «Action Gym». Действие предоставляет информацию о тренажерном зале, включая список занятий, которые чередуются каждый день. Такое информативное действие является хорошим кандидатом для всех функций взаимодействия с пользователем, поскольку меняющийся список классов каждый день предоставляет различную полезную информацию.
На следующей диаграмме показан диалог примера Action Gym:
Вы внесете небольшие изменения в диалоговое окно, чтобы оно лучше соответствовало добавляемым вами функциям взаимодействия. Однако общий дизайн разговора особо не изменится.
Загрузите базовые файлы
Выполните следующую команду, чтобы клонировать репозиторий GitHub для лаборатории кода:
git clone https://github.com/actions-on-google/user-engagement-codelab-nodejs
Настройте свой проект и агента
Чтобы настроить проект Actions и агент Dialogflow, выполните следующие действия:
- Откройте консоль действий .
- Нажмите Новый проект .
- Введите имя проекта , например
engagement-codelab
. - Нажмите Создать проект .
- Вместо того, чтобы выбирать категорию, прокрутите вниз до раздела «Дополнительные параметры» и щелкните карточку «Разговор» .
- Нажмите «Создать свое действие» , чтобы развернуть параметры, и выберите «Добавить действия» .
- Нажмите «Добавить первое действие» .
- В диалоговом окне «Создать действие» выберите «Пользовательское намерение», а затем нажмите «Создать» , чтобы запустить консоль Dialogflow.
- На странице создания агента консоли Dialogflow нажмите «Создать» .
- Нажмите кнопку (значок шестеренки) на левой панели навигации.
- Нажмите «Экспорт и импорт» , затем «Восстановить из Zip» .
- Загрузите файл
agent.zip
из каталога/user-engagement-codelab-nodejs/start/
вы скачали ранее. - Введите
RESTORE
и нажмите «Восстановить» . - Нажмите Готово .
Разверните свое удовлетворение
Теперь, когда ваш проект Actions и агент Dialogflow готовы, разверните локальный файл index.js
с помощью интерфейса командной строки Firebase Functions.
В каталоге /user-engagement-codelab-nodejs/start/functions/
клона базовых файлов выполните следующие команды:
firebase use <PROJECT_ID>
npm install
firebase deploy
Через несколько минут вы должны увидеть сообщение « Развертывание завершено! », что означает, что вы успешно развернули вебхук в Firebase.
Получить URL-адрес развертывания
Вам необходимо предоставить Dialogflow URL-адрес облачной функции. Чтобы получить этот URL-адрес, выполните следующие действия:
- Откройте консоль Firebase .
- Выберите проект Actions из списка вариантов.
- Перейдите к «Разработка» > «Функции» на левой панели навигации. Если вам будет предложено «Выбрать настройки общего доступа к данным», вы можете проигнорировать эту опцию, нажав «Сделать это позже» .
- На вкладке «Панель мониторинга» вы должны увидеть запись «выполнение» с URL-адресом в разделе «Триггер» . Сохраните этот URL; вам нужно будет скопировать его в Dialogflow в следующем разделе.
Установите URL-адрес веб-перехватчика в Dialogflow
Теперь вам нужно обновить агент Dialogflow, чтобы он мог использовать вебхук для выполнения. Для этого выполните следующие действия:
- Откройте консоль Dialogflow (при желании вы можете закрыть консоль Firebase).
- Нажмите «Выполнение» на левой панели навигации.
- Включите вебхук .
- Вставьте URL-адрес, который вы скопировали из панели управления Firebase, если он еще не отображается.
- Нажмите Сохранить .
Убедитесь, что ваш проект правильно настроен
Пользователи должны иметь возможность вызывать ваше действие для получения информации об Action Gym, включая жестко запрограммированный текстовый ответ с указанием рабочих часов и текстовый ответ, в котором указано расписание занятий на каждый день недели.
Чтобы проверить свое действие в симуляторе действий:
- В левой панели навигации консоли Dialogflow нажмите «Интеграции» > «Google Assistant» .
- Убедитесь, что автоматический предварительный просмотр изменений включен, и нажмите «Тест» , чтобы обновить проект Actions.
- Симулятор Actions загружает ваш проект Actions. Чтобы протестировать свое действие, введите
Talk to my test app
в поле ввода и нажмите «Ввод». - Вы должны увидеть ответ, приветствующий вас в Action Gym. Попробуйте следовать подсказкам, чтобы продолжить разговор, и при этом убедитесь, что на каждое введенное вами сообщение есть ответ.
3. Добавьте подписки на ежедневные обновления.
Распространенный способ привлечь пользователей — предлагать им информацию тогда, когда она наиболее полезна. Это достигается путем предложения пользователям возможности подписаться на ежедневные обновления намерения, в результате чего им отправляется уведомление Ассистента, которое напрямую связано с выполнением этого намерения.
На этом этапе вы узнаете о ежедневных подписках на обновления и добавите их в намерение списка классов вашего действия. После выполнения этих инструкций диалог вашего действия будет выглядеть следующим образом:
Как это заинтересует пользователей?
Пользователи смартфонов, вероятно, знакомы с push-уведомлениями, которые предоставляют информацию и обновления для конкретного приложения. Подписка на ежедневные обновления — это простой способ получить доступ к пользователям на мобильных устройствах за пределами Ассистента при условии, что цель, ради которой вы отправляете обновления, продолжает приносить пользу пользователю ежедневно.
Ежедневные обновления могут быть полезным инструментом вовлечения, но не обязательно должны быть включены в каждое действие. Примите во внимание эти советы, решая, добавлять ли к действию подписку на ежедневные обновления:
- Убедитесь, что ежедневные обновления позволят пользователю каждый день видеть разную полезную информацию. Если нажатие на ежедневное обновление каждый раз приводит к одному и тому же запросу, пользователь, вероятно, откажется от подписки через пару дней.
- Убедитесь, что ваш диалог понятен вашим пользователям, если они сразу перейдут к цели вашего ежедневного обновления. Ваш пользователь не обязательно начнет с начала разговора, поэтому не следует ожидать, что у него будет много контекста.
- Покажите пользователю преимущества вашего действия, прежде чем предлагать ему подписаться на ежедневные обновления. Ваш пользователь должен думать: «Я хочу этот контент каждый день», когда ему предоставляется возможность подписаться.
- Не перегружайте пользователя повторяющимися предложениями подписаться. Предлагайте подписку на ежедневные обновления сразу после того, как покажете пользователю, на что он подпишется, и не приставайте к нему по этому поводу в другом месте.
- Держите разговор коротким после того, как сработает намерение обновления. Большинство ежедневных обновлений должны состоять только из одного ответа, который затем закрывается, не требуя вмешательства пользователя.
Включите ежедневные обновления
Подписки на ежедневные обновления можно добавить к приветственному намерению, которое ставит пользователя в начало вашего разговора, или к более конкретному намерению, чтобы связать его с каким-либо местом в разговоре. Для этой кодовой лаборатории намерение «Список классов» имеет наибольший смысл, поскольку диалог будет меняться каждый день, и пользователям может оказаться полезным напоминание о доступных классах.
Выполните следующие действия, чтобы включить ежедневные обновления для намерения «Список классов» :
- В консоли «Действия» перейдите на вкладку «Разработка» и выберите «Действия» на левой панели навигации.
- Нажмите «Список классов» под списком «Действия» .
- В разделе «Вовлеченность пользователей» включите параметр «Хотите ли вы предлагать пользователям ежедневные обновления» .
- Установите описательный заголовок контента , описывающий ежедневное обновление. Контекст будет таким: «В какое время вы хотите, чтобы я отправлял ваш ежедневный <название контента>», поэтому убедитесь, что ваш заголовок одновременно информативен и звучит правильно, когда его произносите вслух. В этом примере установите в заголовке «Содержимое»
list of upcoming Action Gym classes
. - Нажмите «Сохранить» вверху страницы.
Настройка диалогового потока
Выполните следующие действия в консоли Dialogflow, чтобы создать намерения для потока подписки на ежедневные обновления:
Предложите пользователю подписаться
- Настройте новое намерение для обработки запроса пользователя на подписку на ежедневные обновления. В консоли Dialogflow нажмите кнопку + рядом с надписью «Намерения» на левой панели навигации, чтобы создать новое намерение.
- Назовите это новое намерение
Setup Updates
. - В разделе «Обучающие фразы» добавьте следующие пользовательские выражения :
-
Send daily reminders
-
Reminder
-
Remind me
-
Updates
-
Upcoming classes
- В разделе «Выполнение» включите параметр «Включить вызов веб-перехватчика для этого намерения ».
- Нажмите «Сохранить» вверху страницы.
Обработка решения пользователя
- Настройте новое намерение для обработки ответа пользователя на запрос на подписку на ежедневные обновления. Нажмите кнопку + рядом с надписью «Намерения» на левой панели навигации, чтобы создать новое намерение.
- Назовите это новое намерение
Confirm Updates
. - В разделе «События» добавьте
actions_intent_REGISTER_UPDATE
. Это событие Dialogflow будет инициировано пользователем, завершающим ежедневную подписку на обновления, независимо от того, подписался он или нет. - В разделе «Выполнение» включите параметр «Включить вызов веб-перехватчика для этого намерения ».
- Нажмите «Сохранить» вверху страницы.
Осуществить выполнение
Чтобы реализовать выполнение в вебхуке, выполните следующие шаги:
Загрузить зависимости
В файле index.js
обновите функцию require()
добавив пакет RegisterUpdate
из пакета actions-on-google
, чтобы импорт выглядел следующим образом:
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
} = require('actions-on-google');
Обновить чипы предложений
В файле index.js
добавьте запись DAILY
в список заголовков чипов предложений, чтобы ваше определение Suggestion
выглядело следующим образом:
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
};
Добавьте реализацию новых намерений
Когда пользователь сообщает, что хочет подписаться, запустите процесс подписки на ежедневные обновления, вызвав вспомогательный метод RegisterUpdate
с целевым намерением обновления ( Список классов ) и типом ( DAILY
). После завершения потока подписки Ассистент запускает событие actions_intent_REGISTER_UPDATE
с аргументом status
, который описывает, была ли подписка успешной или нет. Предлагайте пользователю последующие подсказки, которые меняются в зависимости от статуса подписки.
В файл index.js
добавьте следующий код:
index.js
// Start opt-in flow for daily updates
app.intent('Setup Updates', (conv) => {
conv.ask(new RegisterUpdate({
intent: 'Class List',
frequency: 'DAILY',
}));
});
// Confirm outcome of opt-in for daily updates
app.intent('Confirm Updates', (conv, params, registered) => {
if (registered && registered.status === 'OK') {
conv.ask(`Gotcha, I'll send you an update everyday with the ` +
'list of classes. Can I help you with anything else?');
} else {
conv.ask(` I won't send you daily reminders. Can I help you with anything else?`);
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS, Suggestion.CLASSES]));
}
});
Предлагайте альтернативные подсказки для пользователя
В конце вашего ответа на список классов будет предложена подписка на ежедневные обновления, но это представляет собой проблему. Поскольку тот же ответ будет срабатывать, когда пользователь нажимает на уведомление о ежедневном обновлении, ему все равно будет предложено подписаться на ежедневные обновления, даже если они только что пришли от одного из них. Как вы можете удержать пользователя от мысли, что ему нужно повторно подписаться?
К счастью, аргументы вашего объекта conv
включают информацию о том, с чего пользователь начал разговор. Вы можете проверить аргументы conv
, чтобы узнать, содержат ли они раздел UPDATES
, который указывает, что пользователь начал разговор с ежедневного уведомления об обновлении, и соответствующим образом изменить ответ. Вы также можете использовать эту ветку диалога, чтобы закрыть диалоговое окно сразу после предоставления списка классов, что соответствует нашей лучшей практике сокращения ежедневных обновлений.
В файле index.js
замените следующий код:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
const classesMessage =
`On ${day} we offer the following classes: ${classes}. ` +
`Can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS]));
}
});
с этим:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
Проверьте свои ежедневные обновления
В терминале выполните следующую команду, чтобы развернуть обновленный код веб-перехватчика в Firebase:
firebase deploy
Чтобы протестировать пользовательское повторное приглашение в симуляторе действий, выполните следующие действия:
- В консоли «Действия» перейдите к «Тест» .
- Введите
Talk to my test app
в поле ввода и нажмите «Ввод». - Введите
Learn about classes
и нажмите «Ввод». В ответе вашего действия теперь должно быть предложено отправлять ежедневные напоминания. - Введите
Send daily reminders
и нажмите «Ввод». - Введите время, когда вы хотите увидеть обновление, и нажмите Enter. В целях тестирования попробуйте ответить на 3–5 минут позже текущего времени.
На вашем мобильном устройстве вы должны получить уведомление от Ассистента примерно в то время, которое вы указали для обновлений. Обратите внимание, что появление этого уведомления может занять пару минут. Нажмите на уведомление, и оно должно создать глубокую ссылку непосредственно на намерение «Список классов» в Ассистенте, предоставляя вам список предстоящих занятий:
4. Добавьте push-уведомления
В качестве еще одного варианта привлечения пользователей за пределами вашего действия вы можете вызвать API действий для отправки пользователям push-уведомлений . В отличие от ежедневных обновлений, эти уведомления не планируются автоматически Ассистентом, поэтому вы можете отправлять их по своему желанию.
На этом этапе вы узнаете, как реализовать push-уведомления в своем действии, добавив новое намерение «Отменено занятие» и отправив уведомления пользователям, которые уведомляют их об отмене занятия. Вы также настроите следующие три компонента, необходимые для отправки уведомлений:
- Учетная запись API действий . Вы отправляете уведомления пользователю, отправляя запрос
POST
к API, поэтому вам необходимо настроить учетную запись службы и учетные данные для взаимодействия с этим API. - Помощник по разрешениям . Вам необходимо разрешение пользователя на доступ к идентификатору пользователя, необходимому для отправки ему push-уведомлений. В этом примере вы будете использовать функцию клиентской библиотеки для вызова помощника по разрешениям и запроса этого идентификатора.
- Хранилище . Чтобы отправлять push-уведомления пользователю вне разговора, вам необходимо хранить идентификаторы пользователей где-то, чтобы их можно было вызвать по желанию. В этом примере вы настроите базу данных Firestore для хранения информации для каждого пользователя.
Выполнив эти инструкции, вы добавите в диалог вашего действия следующее диалоговое окно:
Как это заинтересует пользователей?
Пользователи смартфонов, вероятно, знакомы с push-уведомлениями, которые предоставляют информацию и обновления для конкретного приложения. Push-уведомления — это гибкий способ доступа к пользователям на мобильных устройствах за пределами Ассистента, при условии, что у пользователей есть веская причина для их включения. Благодаря ежедневным обновлениям пользователи уже знают, что они будут получать уведомления ежедневно. Однако при использовании push-уведомлений пользователи не знают, соглашаются ли они на получение нечастых уведомлений или их будут беспокоить многочисленные уведомления в день.
Push-уведомления могут быть полезным инструментом взаимодействия, но не обязательно должны быть включены в каждое действие. Учитывайте эти советы, решая, добавлять ли push-уведомления к действию:
- Запланируйте несколько примеров расписаний для ваших push-уведомлений. Если вы планируете отправлять только одно push-уведомление в день, рассмотрите возможность использования ежедневных обновлений.
- Убедитесь, что ваши push-уведомления будут предоставлять полезную информацию каждый раз, когда они будут получены. Ваши уведомления также могут иметь глубокую ссылку на одно из намерений вашего действия, поэтому убедитесь, что это намерение полезно и актуально.
- Будьте откровенны, прося пользователя подписаться на push-уведомления. Они должны понимать, чего ожидать от каждого push-уведомления, и иметь представление о том, как часто отправляются уведомления.
Включите API действий
- Откройте консоль Google Cloud и выберите имя проекта Actions в раскрывающемся списке.
- В меню навигации ( ☰) выберите API и службы > Библиотека.
- Найдите Actions API и нажмите «Включить» .
Создать учетную запись службы
API действий требует аутентификации, поэтому вам необходимо создать учетную запись службы для отправки запросов. Выполните следующие действия, чтобы создать и установить ключ учетной записи службы для Actions API:
- В меню навигации Google Cloud Console (☰) выберите API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Ключ служебной учетной записи» .
- В раскрывающемся меню «Учетная запись службы» выберите «Новая учетная запись службы».
- Заполните следующую информацию:
- Имя учетной записи службы :
service-account
- Роль : Проект > Владелец
- Идентификатор учетной записи службы:
service-account
(всегда следует @<project_id>.iam.gserviceaccount.com). - Тип ключа : JSON
- Нажмите Создать.
- Переместите загруженный файл JSON в каталог /user-engagement-codelab/start/functions/ вашего проекта.
- Переименуйте файл JSON в
service-account.json
.
Включить Firestore
Чтобы отправлять уведомления вне разговора, вам нужен способ хранения идентификаторов пользователей, на которые можно ссылаться из вашего кода уведомления. В этом примере мы используем базу данных Firestore для хранения идентификаторов подписанных пользователей.
Выполните следующие шаги, чтобы создать базу данных Firestore для вашего действия:
- В консоли Firebase выберите имя проекта Actions.
- В левой панели навигации выберите «Разработка» > «База данных» и нажмите «Создать базу данных» .
- Выберите «Начать в тестовом режиме» .
- Нажмите Включить .
Настройка диалогового потока
Выполните следующие шаги в консоли Dialogflow, чтобы создать поток подписки на push-уведомления:
Предложите пользователю подписаться
- Настройте новое намерение для обработки пользователя, просящего подписаться на push-уведомления об отмененных занятиях. В консоли Dialogflow нажмите кнопку + рядом с надписью «Намерения» на левой панели навигации, чтобы создать новое намерение.
- Назовите это новое намерение
Setup Push Notifications
. - В разделе «Обучающие фразы» добавьте следующие пользовательские выражения :
-
Subscribe to notifications
-
Send notification
-
Notify me
-
Send class notifications
-
Cancelled notifications
- В разделе «Выполнение» включите параметр «Включить вызов веб-перехватчика для этого намерения ».
- Нажмите «Сохранить» вверху страницы.
Обработка решения пользователя
- Настройте новое намерение для обработки ответа пользователя на приглашение на подписку на push-уведомления. Нажмите кнопку + рядом с надписью «Намерения» на левой панели навигации, чтобы создать новое намерение.
- Назовите это новое намерение
Confirm Push Notifications
. - В разделе «События» добавьте
actions_intent_PERMISSION
. Это событие Dialogflow будет инициировано пользователем, завершающим процесс подписки на push-уведомления, независимо от того, подписался он в конечном итоге или нет. - В разделе «Выполнение» включите параметр «Включить вызов веб-перехватчика для этого намерения ».
- Нажмите «Сохранить» вверху страницы.
Обработка push-уведомлений
Вы можете связать свои push-уведомления с определенным намерением, чтобы пользователи, которые нажимают на push-уведомление, были напрямую связаны с этим намерением в вашем действии. В этом примере добавьте новое намерение для push-уведомлений, предоставляющее подробную информацию об отмененных занятиях.
Выполните следующие действия, чтобы добавить намерение, которое будет инициироваться пользователем при нажатии push-уведомления:
- В консоли Dialogflow нажмите кнопку + рядом с надписью «Намерения» на левой панели навигации, чтобы создать новое намерение.
- Назовите это новое намерение
Class Canceled
. - В разделе «Обучающие фразы» добавьте
Cancelations
в качестве пользовательского выражения . - В разделе «Выполнение» включите параметр «Включить вызов веб-перехватчика для этого намерения ».
- Нажмите «Сохранить» вверху страницы.
Отправляйте тестовые уведомления во время разговора
В рабочей среде у вас должен быть скрипт, отдельный от кода выполнения действия, который отправляет push-уведомления. В этом примере создайте намерение, которое вы можете вызвать для отправки push-уведомления во время разговора с вашим действием. Это намерение предназначено только для целей отладки; на практике push-уведомления не должны обрабатываться вашим выполнением или иным образом инициироваться как часть разговора вашего действия.
Выполните следующие действия, чтобы создать намерение для тестирования push-уведомлений:
- В целях тестирования и отладки настройте новое намерение, которое позволит отправлять push-уведомления подписанным пользователям. В консоли Dialogflow нажмите кнопку + рядом с надписью «Намерения» на левой панели навигации, чтобы создать новое намерение.
- Назовите это новое намерение
Test Notification
. - В разделе «Обучающие фразы» добавьте
Test notification
в качестве пользовательского выражения . - В разделе «Выполнение» включите параметр «Включить вызов веб-перехватчика для этого намерения ».
- Нажмите «Сохранить» вверху страницы.
Включите push-уведомления
Выполните следующие действия, чтобы включить push-уведомления для намерения «Класс отменен» :
- В консоли Dialogflow перейдите в раздел «Интеграции» на панели навигации.
- На карточке Google Assistant нажмите «Настройки интеграции» .
- Добавить класс отменен как намерение неявного вызова . Этот шаг необходим для того, чтобы Dialogflow распознал, что пользователи могут начать ваш разговор с намерением «Класс отменен» (нажав push-уведомление).
- Нажмите Закрыть .
- В консоли «Действия» перейдите на вкладку «Разработка» и выберите «Действия» на левой панели навигации.
- Нажмите «Класс отменен» в списке «Действия» .
- В разделе «Вовлеченность пользователей» включите переключатель « Хотите ли вы отправлять push-уведомления?» вариант.
- Установите описательный заголовок контента , описывающий push-уведомление. Контекст будет таким: «Можно ли я отправлять push-уведомления для <название контента>?», поэтому убедитесь, что ваш заголовок является описательным и звучит правильно, когда его произносите вслух. В этом примере установите заголовок «Содержимое» на
class cancelations
. - Нажмите «Сохранить» вверху страницы.
Осуществить выполнение
Чтобы реализовать выполнение в вебхуке, выполните следующие шаги:
Загрузить зависимости
В файле index.js
обновите функцию require()
добавив пакет UpdatePermission
из пакета actions-on-google
, чтобы ваш импорт выглядел следующим образом:
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
UpdatePermission,
} = require('actions-on-google');
Обновить чипы предложений
В файле index.js
добавьте запись NOTIFICATIONS
в список заголовков чипов предложений, чтобы ваше определение Suggestion
выглядело следующим образом:
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
NOTIFICATIONS: 'Get notifications',
};
Настроить новый импорт
Чтобы подключиться к вашей базе данных Firestore, добавьте пакет firebase-admin
и константы для полей, хранящихся в базе данных. Кроме того, импортируйте google-auth-library
и request
пакеты для обработки аутентификации и запросов к API действий.
В файле index.js
добавьте следующий код для импорта:
index.js
// Firebase admin import
const admin = require('firebase-admin');
// Initialize Firestore
admin.initializeApp();
const db = admin.firestore();
// Firestore constants
const FirestoreNames = {
INTENT: 'intent',
USER_ID: 'userId',
USERS: 'users',
};
// Actions API authentication imports
const {auth} = require('google-auth-library');
const request = require('request');
Предложение настроить уведомления об отмене занятий
В файле index.js
замените следующий код:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
с этим:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like to receive daily reminders of upcoming classes, subscribe to notifications about cancelations, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.NOTIFICATIONS,
Suggestion.HOURS]));
};
};
});
Добавьте реализацию новых намерений
Когда пользователь сообщает, что хочет подписаться на push-уведомления, вызовите помощник UpdatePermission
, чтобы запросить разрешение у пользователя. Если это удастся, аргумент PERMISSION
будет добавлен к аргументам объекта conv
, которые вы можете проверить, чтобы повернуть разговор.
Получив разрешение пользователя, возьмите идентификатор пользователя из аргументов объекта conv
и сохраните его в своей базе данных. Позже вы отправите этот идентификатор пользователя в Actions API, и именно так Ассистент определяет, кто получит уведомление.
Наконец, добавьте выполнение намерения Class Canceled
, которое активируется нажатием push-уведомления. В этом примере ваш ответ представляет собой строку-заполнитель, хотя в готовой к эксплуатации версии этого действия ваш сценарий уведомления будет предоставлять более динамическую информацию о том, какой класс был отменен.
В файл index.js
добавьте следующий код:
index.js
// Call the User Information helper for permission to send push notifications
app.intent('Setup Push Notifications', (conv) => {
conv.ask('Update permission for setting up push notifications');
conv.ask(new UpdatePermission({intent: 'Class Canceled'}));
});
// Handle opt-in or rejection of push notifications
app.intent('Confirm Push Notifications', (conv) => {
if (conv.arguments.get('PERMISSION')) {
let userId = conv.arguments.get('UPDATES_USER_ID');
if (!userId) {
userId = conv.request.conversation.conversationId;
}
// Add the current conversation ID and the notification's
// target intent to the Firestore database.
return db.collection(FirestoreNames.USERS)
.add({
[FirestoreNames.INTENT]: 'Class Canceled',
[FirestoreNames.USER_ID]: userId,
})
.then(() => {
conv.ask(`Great, I'll notify you whenever there's a class cancelation. ` +
'Can I help you with anything else?');
});
} else {
conv.ask(`Okay, I won't send you notifications about class cancelations. ` +
'Can I help you with anything else?');
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.CLASSES, Suggestion.HOURS]));
}
});
// Intent triggered by tapping the push notification
app.intent('Class Canceled', (conv) => {
conv.ask('Classname at classtime has been canceled.');
});
Добавить тестовые уведомления
Чтобы отправить пользователю push-уведомление, отправьте запрос POST
в Actions API с идентификатором пользователя, заголовком уведомления и целевым намерением. В этом примере запуск намерения «Тестовое уведомление» будет проходить через вашу базу данных Firestore и отправлять push-уведомления каждому пользователю, который подписался на уведомления.
Помните, что в этом примере вы включаете код, который отправляет push-уведомление, в выполнение вашего веб-перехватчика и запускаете этот код, вызывая тестовое намерение в вашем разговоре. В Действиях, которые вы собираетесь опубликовать, код push-уведомления должен существовать в скрипте, отдельном от вашего выполнения.
В файл index.js
добавьте следующий код:
index.js
// Debug intent to trigger a test push notification
app.intent('Test Notification', (conv) => {
// Use the Actions API to send a Google Assistant push notification.
let client = auth.fromJSON(require('./service-account.json'));
client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'];
let notification = {
userNotification: {
title: 'Test Notification from Action Gym',
},
target: {},
};
client.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
// Iterate through Firestore and send push notifications to every user
// who's currently opted in to canceled class notifications.
db.collection(FirestoreNames.USERS)
.where(FirestoreNames.INTENT, '==', 'Class Canceled')
.get()
.then((querySnapshot) => {
querySnapshot.forEach((user) => {
notification.target = {
userId: user.get(FirestoreNames.USER_ID),
intent: user.get(FirestoreNames.INTENT),
};
request.post('https://actions.googleapis.com/v2/conversations:send', {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {'customPushMessage': notification, 'isInSandbox': true},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ` +
`${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
})
.catch((error) => {
throw new Error(`Firestore query error: ${error}`);
});
});
conv.ask('A notification has been sent to all subscribed users.');
});
Проверьте свои push-уведомления
В терминале выполните следующую команду, чтобы развернуть обновленный код веб-перехватчика в Firebase:
firebase deploy
Чтобы протестировать уведомления в симуляторе действий, выполните следующие действия:
- В консоли «Действия» перейдите на вкладку «Тест» .
- Введите
Talk to my test app
в поле ввода и нажмите «Ввод». - Введите
Learn about classes
и нажмите «Ввод». - Введите
Get notifications
и нажмите «Ввод». - Если вы еще не предоставили разрешение на отправку вам push-уведомлений, введите
yes
и нажмите «Ввод». - Введите
yes
и нажмите «Ввод». Теперь ваша учетная запись Google должна быть подписана на push-уведомления об этом действии.
- Введите
no
и нажмите Enter, чтобы выйти. - Введите «
Talk to my test app
и нажмите «Ввод», чтобы начать новый разговор. - Введите
Test notification
и нажмите Enter.
В течение нескольких минут вы должны получить push-уведомление Ассистента «Уведомление о тестировании от Action Gym» на свое мобильное устройство. Нажав на это уведомление, вы создадите глубокую ссылку на намерение «Класс отменен» вашего действия.
5. Создайте ссылку на Ассистента.
До сих пор мы обсуждали функции взаимодействия, которые вы можете реализовать, чтобы пользователи возвращались к вашему действию, но они основаны на том, что пользователи обнаруживают и используют ваше действие.
Вы можете создать ссылку Ассистента , которая будет связывать пользователей мобильных устройств непосредственно с вашим действием в Ассистенте. Поскольку ссылка Ассистента представляет собой стандартную гиперссылку, вы можете добавить ее на веб-сайт или в любые материалы веб-маркетинга, например в блог или публикацию в социальных сетях.
На этом этапе вы узнаете, что такое ссылка Ассистента, как создать ее для приветствия вашего действия и как добавить ее на простой веб-сайт для тестирования.
Как это заинтересует пользователей?
Привлечение пользователей к вашему действию в первый раз может оказаться сложной задачей, особенно если им необходимо явно вызвать ваше действие в Ассистенте. Ссылка на Ассистента смягчает это препятствие, предоставляя пользователям прямую ссылку на ваше действие. Когда пользователь переходит по ссылке вашего Ассистента на устройстве с поддержкой Ассистента, он попадает прямо к вашему действию. Когда пользователь открывает вашу ссылку на немобильном устройстве или любом другом устройстве, которое не поддерживает Ассистента, он все равно будет перенаправлен в список ваших действий (если он был опубликован), поэтому ссылка может по-прежнему рекламировать ваше действие этим пользователям. пользователи.
Ссылки на Ассистента могут быть полезным инструментом взаимодействия, поэтому вам следует создать их, если вы планируете рекламировать свое действие через свой веб-сайт или социальные сети. Прежде чем создавать и распространять ссылку Ассистента, учтите следующие советы:
- Ссылки на Ассистента работают только после публикации вашего действия. Пока ваш проект находится в состоянии черновика, ссылка будет работать только на ваших устройствах. Любой другой пользователь будет перенаправлен на страницу 404 в каталоге «Действия».
- Вы можете позволить пользователям тестировать помощник ссылки до публикации, выпустив ваше действие в альфа -или бета -среде . Обратите внимание, что только пользователи, которые участвуют в вашей альфа или бета -версии, смогут проверить вашу ссылку «Помощник».
- Убедитесь, что намерение пункта назначения для вашей ассистентной ссылки производит хорошее первое впечатление с новыми пользователями. Ваше приветственное намерение - пункт назначения по умолчанию для ассистентной ссылки, потому что она уже должна хорошо представить ваше действие
Включите помощники
Следуйте этим шагам, чтобы создать помощник ссылки для приветственного намерения:
- В консоли «Действия» нажмите на вкладку «Разработать» и выберите «Действия» в левой навигационной панели.
- Нажмите на actions.intent.main в списке действий .
- В разделе «Ссылки» переключите бы, что вы хотели бы включить URL для этой опции действия .
- Установите название описательной ссылки , которое описывает ваше действие. Сделайте свой заголовок простой парой глаголов, которая описывает то, что пользователь может достичь с помощью вашего действия. Для этого примера установите заголовок ссылки , чтобы
learn about Action Gym
. - Скопируйте фрагмент HTML от нижней части этой страницы и сохраните его на потом.
- Нажмите Сохранить в верхней части страницы.
Развернуть тестовый веб -сайт
Чтобы проверить свою ссылку «Помощник», вы можете использовать инструменты Firebase для развертывания тестового веб -сайта вместе с вашим выполнением. Мы уже создали простой тестовый веб -сайт для этого примера, вам просто нужно добавить свою ссылку «Помощник».
Перейдите к вашему исполнению /user-engagement-codelab-nodejs/start/public/
Directory и откройте файл index.html
в текстовом редакторе.
В файле index.html
вставьте фрагмент HTML вашей помощника ссылки в элемент кузова. Файл должен в конечном итоге выглядеть как фрагмент ниже:
index.html
<body>
<p>
<a href="https://assistant.google.com/services/invoke/uid/000000efb5f2fd97">🅖 Ask my test app to learn about Action Gym
</a>
</p>
</body>
Проверьте свою ассистентную ссылку
В терминале запустите следующую команду для развертывания вашего тестового веб -сайта в Firebase:
firebase deploy
Как только команда развертывания завершится запуска, обратите внимание на URL -адрес хостинга в выводе.
Перейдите к этому URL -адресу в веб -браузере вашего мобильного устройства, и вы должны увидеть ссылку «Помощник» на вашем тестовом веб -сайте. Нажатие по этой ссылке на вашем мобильном устройстве должно перенести вас к принужденному намерению вашего действия в Assistant.
Вы также можете попробовать перейти на URL -адрес хостинга в браузере для настольных компьютеров, который должен доставить вас на 404 страниц в каталоге помощника, поскольку ваши действия не опубликованы.
6. Следующие шаги
Поздравляем!
Теперь вы узнали о важности вовлечения пользователей при разработке действия, какие функции взаимодействия с пользователями доступны на платформе и как добавить каждую функцию в действие.
Дополнительные учебные ресурсы
Изучите эти ресурсы, чтобы узнать больше о вовлечении пользователей для ваших действий:
- Привлечение пользователей и помощники ссылки документы : официальные действия по документации Google по функциям, обсуждаемым в этом коделабе и вовлечении пользователей в целом.
- Аналитика удержания пользователей : документация для аналитической функции в консоли действий, которая показывает удержание пользователей для вашего опубликованного действия.
- Рекомендации по разговору о дизайне : лучшие практики и руководящие принципы для разработки функций взаимодействия с пользователями.
- Действия на Google Github Repo : Пример кода и библиотеки.
- R/GoogleasSistantDev : официальное сообщество Reddit для разработчиков, работающих с помощником.
Следите за нами в Twitter @Actchongoogle, чтобы следить за обновлениями на наши последние объявления, и твитнуть #AogDevs , чтобы поделиться тем, что вы создали!
Опрос обратной связи
Прежде чем уйти, пожалуйста, заполните эту форму , чтобы сообщить нам, как у нас дела!