Ежедневные обновления (Dialogflow)

Пользователь подписывается на ежедневные обновления действия на своем телефоне.

Если ваше действие приносит пользу пользователям каждый день, напомните им о его использовании, настроив ежедневные обновления. Когда пользователь подписывается на ежедневные обновления вашего действия, он получает push-уведомление, которое он может нажать, чтобы вызвать одно из намерений вашего действия.

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

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

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

Случаи использования

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

  • Убедитесь, что ежедневные обновления позволят пользователю каждый день видеть разную полезную информацию. Если нажатие на ежедневное обновление каждый раз приводит к одному и тому же запросу, пользователь, вероятно, откажется от подписки через пару дней.
  • Убедитесь, что ваш диалог понятен вашим пользователям, если они сразу перейдут к цели вашего ежедневного обновления. Ваш пользователь не обязательно начнет с начала разговора, поэтому не следует ожидать, что у него будет много контекста.
  • Покажите пользователю преимущества вашего действия, прежде чем предлагать ему подписаться на ежедневные обновления. Ваш пользователь должен думать: «Я хочу этот контент каждый день», когда ему предоставляется возможность подписаться.
  • Не перегружайте пользователя повторяющимися предложениями зарегистрироваться. Предлагайте подписку на ежедневные обновления сразу после того, как покажете пользователю, на что он подпишется, и избегайте повторения предложения в других контекстах.
  • Держите разговор коротким после того, как сработает намерение обновления. Большинство ежедневных обновлений должны состоять только из одного ответа, который затем закрывается, не требуя вмешательства пользователя.

Настройте ежедневные обновления

Исследуйте в Dialogflow

Нажмите «Продолжить» , чтобы импортировать образец ежедневных обновлений в Dialogflow. Затем выполните следующие действия, чтобы развернуть и протестировать образец:

  1. Введите имя агента и создайте новый агент Dialogflow для примера.
  2. После завершения импорта агента нажмите Перейти к агенту .
  3. В главном навигационном меню перейдите в раздел «Выполнение» .
  4. Включите встроенный редактор и нажмите «Развернуть» . Редактор содержит пример кода.
  5. В главном меню навигации выберите «Интеграции» и нажмите «Google Ассистент» .
  6. В появившемся модальном окне включите автоматический просмотр изменений и нажмите «Тест» , чтобы открыть симулятор действий.
  7. В симуляторе введите Talk to my test app , чтобы протестировать образец!
Продолжить

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

1. Подготовьте намерение обновления

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

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

  1. В консоли Dialogflow нажмите «Интеграции» .
  2. В разделе Google Assistant нажмите «Настройки интеграции» .
  3. В разделе «Обнаружение» > «Неявный вызов» нажмите « Добавить намерение» и выберите инициирующее намерение, если его еще нет.
  4. Включите автоматический просмотр изменений, если он еще не включен.
  5. Нажмите Закрыть .

В Actions SDK определите намерение обновления как триггерное намерение в пакете действий.

2. Включите обновления

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

  1. В консоли «Действия» выберите «Разработка» > «Действия» .
  2. Выберите триггерное намерение. Если ваше намерение не отображается в списке, убедитесь, что оно настроено как триггерное намерение, а интеграция с Ассистентом Dialogflow настроена на автоматический предварительный просмотр изменений.
  3. Прокрутите вниз до раздела «Вовлеченность пользователей» и включите параметр «Хотите ли вы предлагать пользователям ежедневные обновления?» .
  4. Введите заголовок контента .
  5. Нажмите Сохранить .

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

Настройте регистрацию обновлений (необязательно)

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

Полный пример действия, которое обрабатывает дополнительные функции ежедневного обновления, см. в примерах взаимодействия с пользователем Actions on Google ( Node.js и Java ).

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

1. Добавьте приглашение на регистрацию

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

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

Node.js
app.intent('Daily Lowest Temperature', (conv, params) => {
  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('Send daily updates'));
});
Джава
@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 updates"
      });
  return responseBuilder.build();
}
Диалоговый поток JSON

Обратите внимание, что приведенный ниже 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"
          }
        ]
      }
    }
  }
}
Действия SDK JSON

Обратите внимание, что приведенный ниже 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 - Установите « ЕЖЕДНЕВНО ».

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

Диалоговый поток Node.js
app.intent('Subscribe to Daily Updates', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'Daily Lowest Temperature',
    frequency: 'DAILY',
  }));
});
Действия SDK Node.js
conv.ask(new RegisterUpdate({
  intent: 'Daily Lowest Temperature',
  frequency: 'DAILY',
}));
Диалоговый поток Java
@ForIntent("Subscribe to Daily Updates")
public ActionResponse subscribeToDailyUpdates(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  return responseBuilder.add(new RegisterUpdate()
      .setIntent("Daily Lowest Temperature")
      .setFrequency("DAILY"))
      .build();
}
Действия SDK Java
ResponseBuilder responseBuilder = getResponseBuilder(request);
return responseBuilder.add(new RegisterUpdate()
    .setIntent("Daily Lowest Temperature")
    .setFrequency("DAILY"))
    .build();
Диалоговый поток JSON
{
  "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"
            }
          }
        }
      }
    }
  }
}
Действия SDK JSON
{
  "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 для разработки.

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

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

  1. В консоли Dialogflow создайте новое намерение.
  2. Добавьте событие actions_intent_REGISTER_UPDATE .
  3. Включите выполнение вебхука для намерения.
  4. Нажмите Сохранить .
При выполнении намерения проверьте registered параметр на предмет результата и соответствующим образом разверните разговор.
Диалоговый поток Node.js
app.intent('Confirm Daily Updates Subscription', (conv, params, registered) => {
  if (registered && registered.status === 'OK') {
    conv.close(`Ok, I'll start giving you daily updates.`);
  } else {
    conv.close(`Ok, I won't give you daily updates.`);
  }
});
Диалоговый поток Java
@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 responseBuilder.endConversation().build();
}
Диалоговый поток JSON
{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Ok, I'll start giving you daily updates."
            }
          }
        ]
      }
    }
  }
}
SDK действий

В код выполнения добавьте обработку встроенного намерения actions.intent.REGISTER.UPDATE . Проверьте registered параметр на предмет результата и соответствующим образом разверните разговор.

Действия SDK Node.js
app.intent('actions.intent.REGISTER_UPDATE', (conv, params, registered) => {
  if (registered && registered.status === 'OK') {
    conv.close(`Ok, I'll start giving you daily updates.`);
  } else {
    conv.close(`Ok, I won't give you daily updates.`);
  }
});
Действия SDK Java
@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 responseBuilder.endConversation().build();
}
Действия SDK JSON
{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Ok, I'll start giving you daily updates."
          }
        }
      ]
    }
  }
}

Персонализация обновлений (необязательно)

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

Инструкции для этой функции различаются в зависимости от того, используете ли вы Dialogflow или Actions SDK для разработки.

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

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

  1. В консоли Dialogflow создайте новую сущность.
  2. Добавьте несколько записей и синонимов, соответствующих вашему параметру.
  3. Нажмите «Сохранить» , затем откройте намерение обновления.
  4. В разделе «Действия и параметры» установите в качестве события actions.intent.CONFIGURE_UPDATES . В том же разделе добавьте параметр того же типа, что и новая сущность.
  5. Откройте намерение «регистрация обновления», которое обрабатывает встроенное намерение CONFIGURE_UPDATES .
  6. В разделе Действия и параметры добавьте обязательный параметр и задайте его тип ранее созданной сущности.
  7. Обновите код выполнения намерения регистрации, включив в него объект arguments со следующим содержимым:
    • name — имя вашего параметра, настроенное в Dialogflow.
    • textValue — значение вашего параметра.

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

Диалоговый поток Node.js
app.intent('setup_update', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'update_of_the_day',
    arguments: [
      {
        name: 'category',
        textValue: 'Daily_lowest_temperature',
      },
    ],
    frequency: 'DAILY',
  }));
});
Диалоговый поток Java
@ForIntent("setup_update")
public ActionResponse setupUpdate2(ActionRequest request) {
  List<Argument> 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();
}
Диалоговый поток JSON
{
  "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": "{}"
      }
    }
  ]
}
SDK действий

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

  1. Запросите у пользователя информацию, которую вы хотите использовать для персонализации.
  2. В коде выполнения вашего намерения «регистрация обновления», которое обрабатывает CONFIGURE UPDATES включите объект arguments со следующим содержимым:
    • name — имя вашего аргумента.
    • textValue — информация от пользователя, передаваемая в качестве аргумента.

Следующий код отправляет аргумент с запросом на регистрацию обновления:

Действия SDK Node.js
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',
    }));
  }
});
Действия SDK Java
@ForIntent("actions.intent.CONFIGURE_UPDATES")
public ActionResponse configureUpdatesActionsSdk(ActionRequest request) {
  List<Argument> 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();
}
Действия SDK JSON
{
  "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 Assistant, используя ту же учетную запись Google, которую вы использовали для создания своего действия. Вызовите свое действие и подпишитесь на ежедневные обновления, а затем проверьте уведомления вашего устройства во время обновления.