Всплывающее уведомление

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

В этом руководстве описывается, как настроить push-уведомления для вашего действия.

Поддерживаемые поверхности

Push-уведомления доступны на устройствах Android и iOS (для получения push-уведомлений на устройствах iOS должно быть установлено приложение Assistant). В настоящее время они не поддерживаются на колонках с голосовым управлением, интеллектуальных дисплеях и других поверхностях.

Предварительные условия

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

Начать

В следующих разделах описывается, как настроить push-уведомления в вашем действии.

Создайте намерение для запуска

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

  1. Перейдите в консоль «Действия» и нажмите « Разработать» в верхнем меню.
  2. Нажмите «Намерения» в меню слева, чтобы развернуть раздел.
  3. Нажмите кнопку внизу списка и введите имя для нового намерения.
  4. Нажмите Enter/Return , чтобы создать новое намерение.
  5. Добавьте обучающие фразы для запуска потока уведомлений. Некоторые примеры:

    • Notify me
    • Send notifications
    • Subscribe to notifications
  6. Нажмите Сохранить .

Переход к системному намерению

Чтобы настроить переход на сцену «Система Notifications , выполните следующие действия:

  1. В разделе «Сцены» в меню слева выберите сцену, к которой вы хотите добавить поток подписки на уведомления.
  2. В разделе сцены «Обработка намерений пользователя» нажмите «+» , чтобы добавить новый обработчик намерений.
  3. В разделе Intent выберите намерение, которое вы создали в предыдущем разделе.
  4. В разделе «Переход» выберите сцену «Система уведомлений» .

  5. Нажмите Сохранить .

Настройка системной сцены

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

  1. В разделе «Сцены» в левом меню выберите новую сцену «Система уведомлений» .
  2. В разделе «Настроить намерение» нажмите «Выбрать намерение» .
  3. В разделе «Выбрать намерение» выберите намерение, которое должно соответствовать, когда пользователь нажимает push-уведомление.

  4. В разделе «Настроить приглашение на участие» введите приглашение, которое будет отображаться пользователям, когда им предлагается подписаться на push-уведомления. Подсказка имеет вид «Ничего, если я отправлю push-уведомления для $prompt».

  5. Нажмите Сохранить .

Настроить согласие

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

  1. В разделе «Сцены» выберите сцену «Система уведомлений» .
  2. В разделе «Условия» выберите «Если пользователь говорит «да» .
  3. Включите Вызов веб-перехватчика и укажите имя обработчика событий, например subscribe_to_notifications .
  4. Включите функцию «Отправить запросы» и предоставьте простой запрос, сообщающий пользователю, что ему будут отправлены уведомления:

    candidates:
    - first simple:
      variants:
      - speech: 'Great, I'll send you notifications.'
    
  5. В разделе «Переход» выберите «Завершить беседу» , чтобы завершить беседу после того, как пользователь подпишется на уведомления.

Настроить отказ

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

  1. В разделе «Условия» выберите «Если пользователь говорит «нет» .
  2. Включите запросы на отправку и предоставьте простой запрос, сообщающий пользователю, что ему не будут отправляться уведомления:

    candidates:
    - first simple:
      variants:
      - speech: Okay, I won't send you notifications.
    
  3. В разделе «Переход» выберите « Завершить разговор» , чтобы завершить разговор после того, как пользователь откажется от уведомлений.

Настроить вебхук

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

  1. В свой вебхук добавьте обработчик намерений для хранения updatesUserId :

    app.handle('subscribe_to_notifications', conv => {
      const intentName = '<name_of_intent_to_trigger>';
      const notificationsSlot = conv.session.params['NotificationSlot_${intentName}'];
      if(notificationsSlot.permissionStatus == 'PERMISSION_GRANTED') {
        const updateUserId = notificationsSlot.additionalUserData.updateUserId;
        // Store the user ID and the notification's target intent for later use.
        // (Use a database, like Firestore, for best practice.)
      }
    });
    

Отправлять уведомления

Push-уведомления отправляются пользователям с помощью Actions API. Чтобы использовать этот API, вам необходимо активировать API в своем проекте Google Cloud, а также настроить и загрузить ключ учетной записи службы JSON.

Затем вы можете использовать клиентскую библиотеку Google OAuth2 для обмена ключа учетной записи службы на токен доступа и использовать этот токен для аутентификации ваших запросов к API действий.

Получить ключ сервисного аккаунта

  1. Перейдите в консоль Google API и выберите свой проект в раскрывающемся списке «Выберите проект» .
  2. Нажмите «Включить» , чтобы включить Actions API для вашего проекта.
  3. Перейдите на страницу учетных данных консоли Google Cloud и выберите свой проект в раскрывающемся списке «Выберите проект» .
  4. Нажмите Создать учетные данные > Учетная запись службы .
  5. Введите имя учетной записи службы и нажмите « Создать» .
  6. В раскрывающемся списке «Выберите роль» выберите «Проект» > «Владелец» .
  7. Нажмите Продолжить .
  8. Нажмите «Создать ключ» , чтобы загрузить JSON-файл сервисной учетной записи.

Обменять ключ на токен доступа и отправить уведомление

Чтобы отправлять push-уведомления через Actions API, вам необходимо обменять ключ учетной записи службы на токен доступа. Мы рекомендуем использовать для этого клиентскую библиотеку Google API. В следующей серии фрагментов кода мы используем клиентскую библиотеку Google API Node.js.

  1. Установите клиентскую библиотеку Google API и запросите:

    npm install googleapis request --save

  2. Используйте следующий код, чтобы получить токен доступа из ключа учетной записи службы и отправить push-уведомление:

    // 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: 'Example notification title',
      },
      target: {
        userId: '<UPDATES_USER_ID>',
        intent: 'Notifications Intent',
      },
    };
    client.authorize((err, tokens) => {
      if (err) {
        throw new Error('Auth error: ${err}');
      }
      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));
      });
    });