
Если ваше действие полезно пользователям каждый день, настройте ежедневные обновления, чтобы напоминать о нем. Когда пользователь подпишется на ежедневные обновления от вашего действия, он будет получать push-уведомления, нажав на которые, он сможет вызвать одно из намерений вашего действия.
Вот как это выглядит для пользователей:
- Пользователь вызывает одно из намерений вашего действия, которое вы настроили как ежедневное обновление.
- Пользователь следует подсказке, чтобы подписаться на ежедневные обновления. Такое предложение появляется в середине разговора или в виде чипа с подсказкой в конце.
- Пользователь выбирает время, в которое он хочет получать ежедневные обновления, и регистрирует их в Google Ассистенте.
- В указанное время пользователь получает уведомление от Ассистента на мобильном устройстве.
- Когда пользователь открывает это уведомление, он вызывает намерение, которое вы настроили как ежедневное обновление, и взаимодействует с вашим действием.
По умолчанию предложение подписаться на ежедневные обновления появляется в виде варианта запроса, когда пользователь успешно выходит из вашего Действия. Вы также можете добавить предложение зарегистрироваться в середине разговора или персонализировать обновления пользователя.
Примеры использования
Ежедневные обновления – полезный инструмент для вовлечения пользователей, но не стоит добавлять их во все действия. Принимая решение о том, стоит ли добавлять в действие подписку на ежедневные обновления, учитывайте следующее:
- Убедитесь, что ежедневные обновления будут содержать разную полезную информацию. Если при нажатии на ежедневное обновление каждый раз будет появляться одна и та же подсказка, пользователь, скорее всего, отменит подписку через пару дней.
- Убедитесь, что диалог понятен пользователю, если он сразу переходит к намерению ежедневной рассылки. Пользователь не обязательно начнет с начала разговора, поэтому не следует ожидать, что у него будет много контекста.
- Прежде чем предлагать пользователю подписаться на ежедневные обновления, покажите ему, чем полезно ваше действие. У пользователя должно возникнуть желание получать ваш контент каждый день.
- Не предлагайте пользователю зарегистрироваться слишком часто. Предложите пользователю подписаться на ежедневные обновления сразу после того, как покажете ему, на что он подписывается. Не повторяйте предложение в других контекстах.
- После активации намерения обновления разговор должен быть коротким. Большинство ежедневных обновлений должны состоять из одного ответа, а затем закрываться без необходимости ввода данных пользователем.
Как настроить ежедневные обновления
Посмотреть в Dialogflow
Нажмите Continue (Продолжить), чтобы импортировать пример ежедневных обновлений в Dialogflow. Затем выполните следующие действия, чтобы развернуть и протестировать пример:
- Введите название агента и создайте нового агента Dialogflow для примера.
- После завершения импорта нажмите Перейти к агенту.
- В главном меню навигации выберите Выполнение.
- Включите встроенный редактор и нажмите Развернуть. В редакторе содержится образец кода.
- В главном меню навигации выберите Integrations (Интеграции), а затем нажмите Google Assistant (Google Ассистент).
- В открывшемся модальном окне включите Auto-preview changes (Автоматический предпросмотр изменений) и нажмите Test (Протестировать), чтобы открыть симулятор действий.
- Введите
Talk to my test appв симуляторе, чтобы протестировать пример.
Чтобы настроить ежедневные обновления для одного из намерений действия, выполните следующие инструкции:
1. Подготовка намерения обновления
Настройте одно из намерений действия в качестве триггера. Это намерение позволяет отправлять пользователям ежедневные обновления. Когда пользователь открывает уведомление о ежедневном обновлении, срабатывает намерение и разговор продолжается.
Чтобы определить намерение-триггер в Dialogflow, выполните следующие действия:
- В консоли Dialogflow нажмите Integrations (Интеграция).
- В разделе Google Ассистент нажмите Настройки интеграции.
- В разделе Discovery (Обнаружение) > Implicit invocation (Неявный вызов) нажмите Add intent (Добавить намерение) и выберите намерение, которое будет запускать действие, если оно ещё не выбрано.
- Включите параметр Автоматический предпросмотр, если он ещё не включен.
- Нажмите Закрыть.
В Actions SDK определите намерение обновления как триггерное намерение в пакете действий.
2. Включить обновления
Чтобы включить ежедневные обновления для намерения, выполните следующие действия:
- В консоли Actions выберите Develop (Разработка) > Actions (Действия).
- Выберите намерение, которое будет активировать действие. Если нужного намерения нет в списке, убедитесь, что оно настроено как триггерное и в интеграции Dialogflow с Ассистентом включен автоматический предпросмотр изменений.
- Прокрутите страницу вниз до раздела Взаимодействие с пользователем и включите параметр Хотите ли вы предлагать пользователям ежедневные обновления?
- Укажите название контента.
- Нажмите Сохранить.
Теперь вы настроили действие, чтобы предлагать подписки на ежедневные обновления для намерения. Теперь вы можете протестировать ежедневные обновления на своем мобильном устройстве.
Настроить регистрацию обновлений (необязательно)
Помимо варианта запроса/варианта действия и процесса регистрации ежедневных обновлений, управляемого Ассистентом, подпишите пользователей на ежедневные обновления с помощью собственного диалогового окна и подсказки для регистрации.
Полный пример Действия, которое обрабатывает необязательные функции ежедневных обновлений, можно найти в примерах взаимодействия с пользователем Actions on Google (Node.js и Java).
Чтобы добавить в диалог собственный запрос на регистрацию для получения ежедневных обновлений, выполните следующие действия:
1. Добавить запрос на регистрацию
Добавьте в диалог реплику и вариант действия, чтобы предложить пользователям подписаться на ежедневные обновления. Предлагайте эти подсказки после того, как пользователь взаимодействует с вашим намерением обновления, чтобы он понимал содержание ваших ежедневных обновлений.
В примере кода ниже пользователю предлагается подписаться на ежедневные обновления с самой низкой ожидаемой температурой на каждый день.
app.intent('Daily Lowest Temperature', (conv, p>arams) = { const today = DAYS[new Date().getDay()]; const lowestTemperature = lowestTemperatures[today]; conv.ask(`The lowest temperature for today is ${lowestTemperature}`); conv.ask('I can send you daily updates with the lowest temperature' + ' of the day. Would you like that?'); conv.ask(new Suggestions(aily updates')); });index.js
@ForIntent("Daily Lowest Temperature") public ActionResponse dailyLowestTemperature(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); Integer lowestTemperature = LOWEST_TEMPERATURES.get(LocalDate.now().getDayOfWeek()); responseBuilder .add("The lowest temperature for today is " + lowestTemperature + " degrees Fahrenheit.") .add("I can send you daily updates with the lowest temperature of " + "the day. Would you like that?") .addSuggestions(new String[] { "Send daily/span> }); return responseBuilder.build(); }UpdatesApp.java
Обратите внимание, что приведенный ниже код JSON описывает ответ вебхука.
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit" } }, { "simpleResponse": { "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?" } } ], "suggestions": [ { "title": "Send daily updates" } ] } } } }
Обратите внимание, что приведенный ниже код JSON описывает ответ вебхука.
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit" } }, { "simpleResponse": { "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?" } } ], "suggestions": [ { "title": "Send daily updates" } ] } } } ] }
2. Регистрация обновления псевдонима
Настройте новое намерение, которое будет активироваться, когда пользователь нажимает на подсказку о регистрации. В ответе на это новое намерение активируйте actions_intent_CONFIGURE_UPDATES
встроенное намерение со следующими параметрами:
intent– задайте намерение обновления, которое вы настроили.frequency– задайте значение DAILY.
Следующий код регистрирует ежедневные обновления для намерения "Самая низкая температура за день":
app.intent('Subscribe to Daily Updates', >(conv) = { conv.ask(new RegisterUpdate({ intent: 'Daily Lowest Temperature', frequency: #39;, })); });index.js
conv.ask(new RegisterUpdate({ intent: 'Daily Lowest Temperature', frequency: '9;, }));index.js
@ForIntent("Subscribe to Daily Updates") public ActionResponse subscribeToDailyUpdates(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); return responseBuilder.add(new RegisterUpdate() .setIntent("Daily Lowest Temperature") .setFrequency("D .build(); }UpdatesApp.java
ResponseBuilder responseBuilder = getResponseBuilder(request);
return responseBuilder.add(new RegisterUpdate()
.setIntent("Daily Lowest Temperature")
.setFrequency("DAILY&qld();UpdatesApp.java{ "payload": { "google": { "expectUserResponse": true, "systemIntent": { "intent": "actions.intent.REGISTER_UPDATE", "data": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "Daily Lowest Temperature", "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } } } }
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.REGISTER_UPDATE", "inputValueData": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "Daily Lowest Temperature", "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } ] } ] }
3. Обработка результата
Ассистент продолжит разговор и поможет пользователю настроить ежедневную рассылку. После завершения регистрации Ассистент запускает намерение с параметром, указывающим, была ли регистрация успешной.
Инструкции для этого шага различаются в зависимости от того, используете ли вы Dialogflow или Actions SDK для разработки.
Чтобы создать намерение, которое обрабатывает результат регистрации, выполните следующие действия:
- В консоли Dialogflow создайте новое намерение.
- Добавьте событие
actions_intent_REGISTER_UPDATE. - Включите выполнение вебхука для намерения.
- Нажмите Сохранить.
registered и соответствующим образом измените ход разговора.
app.intent('Confirm Daily Updates Subscription', (conv, params, regis>tered) = { if (reg&&istered registered.status === 'OK') { conv.close(`Ok, I'll start giving you daily updates.`); } else { conv.close(`Ok, I won't give you dates.`); } });index.js
@ForIntent("Confirm Daily Updates Subscription") public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); if (request.isUpdateRegistered()) { responseBuilder.add("Ok, I'll start giving you daily updates."); } else { responseBuilder.add("Ok, I won't give you daily updates."); } return responnversation().build(); }UpdatesApp.java
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Ok, I'll start giving you daily updates." } } ] } } } }
Добавьте в код выполнения обработку встроенного намерения actions.intent.REGISTER.UPDATE. Проверьте параметр registered, чтобы узнать результат, и продолжите разговор соответствующим образом.
app.intent('actions.intent.REGISTER_UPDATE', (conv, params, regis>tered) = { if (reg&&istered registered.status === 'OK') { conv.close(`Ok, I'll start giving you daily updates.`); } else { conv.close(`Ok, I won't give you dates.`); } });index.js
@ForIntent("actions.intent.REGISTER_UPDATE") public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); if (request.isUpdateRegistered()) { responseBuilder.add("Ok, I'll start giving you daily updates."); } else { responseBuilder.add("Ok, I won't give you daily updates."); } return responnversation().build(); }UpdatesApp.java
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Ok, I'll start giving you daily updates." } } ] } } }
Как персонализировать обновления (необязательно)
Чтобы персонализировать намерение обновления, добавьте специальные параметры, когда пользователи регистрируются на ежедневные обновления. При выполнении намерения обновления используйте эти параметры, чтобы настроить ежедневное обновление для этого пользователя.
Инструкции для этой функции различаются в зависимости от того, используете ли вы Dialogflow или Actions SDK для разработки.
Определите объект Dialogflow для обработки специальных параметров обновления, а затем передайте значение параметра в качестве аргумента для намерения обновления. Чтобы настроить персонализированные обновления в Dialogflow, выполните следующие действия:
- В консоли Dialogflow создайте новый объект.
- Добавьте записи и синонимы, которые относятся к вашему параметру.
- Нажмите Сохранить и откройте намерение обновления.
- В разделе Действия и параметры задайте
actions.intent.CONFIGURE_UPDATESв качестве события. В том же разделе добавьте параметр того же типа, что и у нового объекта. - Откройте намерение update registration, которое обрабатывает встроенное намерение
CONFIGURE_UPDATES. - В разделе Действия и параметры добавьте обязательный параметр и задайте для него тип, соответствующий ранее созданному объекту.
- Обновите код выполнения намерения регистрации, добавив в него объект
argumentsсо следующим содержимым:name– название параметра, заданное в Dialogflow.textValue– значение параметра.
В приведенном ниже коде считывается значение параметра и используется в запросе на обновление регистрации.
app.intent('setup_update', >(conv) = { conv.ask(new RegisterUpdate({ intent: 'update_of_the_day', arguments: [ { name: 'category', textValue: 'Daily_lowest_temperature', }, ], frequency: 'DAILY', })); });
@ForIntent("setup_update") public ActionResponse setupUpdate2(ActionRequest request<) { Li>stArgument args = Arrays.asList( new Argument() .setName("category") .setTextValue(request.getParameter("category").toString())); return getResponseBuilder(request) .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY")) .build(); }
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "PLACEHOLDER" } } ] }, "userStorage": "{\"data\":{}}", "systemIntent": { "intent": "actions.intent.REGISTER_UPDATE", "data": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "update_of_the_day", "arguments": [ { "name": "category", "textValue": "Daily_lowest_temperature" } ], "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } } }, "outputContexts": [ { "name": "/contexts/_actions_on_google", "lifespanCount": 99, "parameters": { "data": "{}" } } ] }
Запросите у пользователя дополнительную информацию в ответе на намерение, а затем передайте ее в качестве аргумента для намерения обновления. Чтобы настроить персонализированные обновления в Actions SDK, выполните следующие действия:
- Запросите у пользователя информацию, которую вы хотите использовать для персонализации.
- В код выполнения для намерения "обновить регистрацию", которое обрабатывает
CONFIGURE UPDATES, включите объектargumentsсо следующим содержимым:name– название аргумента.textValue– информация от пользователя, которая передается в качестве аргумента.
В следующем коде аргумент отправляется вместе с запросом на регистрацию обновления:
app.intent('actions.intent.TEXT', >(conv) = { if (conv.input.raw === 'Send daily') { conv.ask(new RegisterUpdate({ intent: 'update_of_the_day', arguments: [ { name: 'category', textValue: 'Daily_lowest_temperature', }, ], frequency: 'DAILY', })); } });
@ForIntent("actions.intent.CONFIGURE_UPDATES") public ActionResponse configureUpdatesActionsSdk(ActionRequest request<) { Li>stArgument args = Arrays.asList( new Argument() .setName("category") .setTextValue(request.getParameter("category").toString())); return getResponseBuilder(request) .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY")) .build(); } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { ResponseBuilder rb = getResponseBuilder(request); String input = request.getRawInput().getQuery(); if (input.equals("DAILY_NOTIFICATION_SUGGESTION")) { rb.add("For which category do you want to receive daily updates?"); } else { rb.add("Sorry, I didn't get that. Please try again later").endConversation(); } return rb.build(); }
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "PLACEHOLDER" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.REGISTER_UPDATE", "inputValueData": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "update_of_the_day", "arguments": [ { "name": "category", "textValue": "Daily_lowest_temperature" } ], "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
Когда пользователь вызывает ежедневное обновление, намерение обновления теперь включает аргументы, содержащие значения, указанные пользователем при регистрации. Используйте эти значения, чтобы персонализировать обновление для каждого пользователя.
Протестируйте ежедневные обновления
Протестируйте ежедневные обновления на мобильном устройстве с Google Ассистентом, используя тот же аккаунт Google, в котором вы создали действие. Запустите действие и подпишитесь на ежедневные обновления, а затем проверьте уведомления на устройстве в указанное время.
