Ваше действие может отправлять пользователям уведомления, когда это необходимо, например отправлять напоминание о приближении срока выполнения задачи.
В этом руководстве описывается, как настроить push-уведомления для вашего действия.
Поддерживаемые поверхности
Push-уведомления доступны на устройствах Android и iOS (для получения push-уведомлений на устройствах iOS должно быть установлено приложение Assistant). В настоящее время они не поддерживаются на колонках с голосовым управлением, интеллектуальных дисплеях и других поверхностях.
Предварительные условия
Ваш проект должен содержать хотя бы одно глобальное намерение , которое вызывается, когда пользователь нажимает push-уведомление, полученное от Ассистента.
Начать
В следующих разделах описывается, как настроить push-уведомления в вашем действии.
Создайте намерение для запуска
Намерение, которое вы создаете в этом разделе, запускает поток уведомлений. Чтобы создать это намерение, выполните следующие действия:
- Перейдите в консоль «Действия» и нажмите « Разработать» в верхнем меню.
- Нажмите «Намерения» в меню слева, чтобы развернуть раздел.
- Нажмите кнопку внизу списка и введите имя для нового намерения.
- Нажмите
Enter/Return
, чтобы создать новое намерение. Добавьте обучающие фразы для запуска потока уведомлений. Некоторые примеры:
-
Notify me
-
Send notifications
-
Subscribe to notifications
-
Нажмите Сохранить .
Переход к системному намерению
Чтобы настроить переход на сцену «Система Notifications
, выполните следующие действия:
- В разделе «Сцены» в меню слева выберите сцену, к которой вы хотите добавить поток подписки на уведомления.
- В разделе сцены «Обработка намерений пользователя» нажмите «+» , чтобы добавить новый обработчик намерений.
- В разделе Intent выберите намерение, которое вы создали в предыдущем разделе.
В разделе «Переход» выберите сцену «Система уведомлений» .
Нажмите Сохранить .
Настройка системной сцены
Чтобы настроить сцену «Система Notifications
, выполните следующие действия:
- В разделе «Сцены» в левом меню выберите новую сцену «Система уведомлений» .
- В разделе «Настроить намерение» нажмите «Выбрать намерение» .
В разделе «Выбрать намерение» выберите намерение, которое должно соответствовать, когда пользователь нажимает push-уведомление.
В разделе «Настроить приглашение на участие» введите приглашение, которое будет отображаться пользователям, когда им предлагается подписаться на push-уведомления. Подсказка имеет вид «Ничего, если я отправлю push-уведомления для $prompt».
Нажмите Сохранить .
Настроить согласие
Чтобы настроить возможность получения push-уведомлений, выполните следующие действия:
- В разделе «Сцены» выберите сцену «Система уведомлений» .
- В разделе «Условия» выберите «Если пользователь говорит «да» .
- Включите Вызов веб-перехватчика и укажите имя обработчика событий, например
subscribe_to_notifications
. Включите функцию «Отправить запросы» и предоставьте простой запрос, сообщающий пользователю, что ему будут отправлены уведомления:
candidates: - first simple: variants: - speech: 'Great, I'll send you notifications.'
В разделе «Переход» выберите «Завершить беседу» , чтобы завершить беседу после того, как пользователь подпишется на уведомления.
Настроить отказ
Чтобы настроить отказ от push-уведомлений, выполните следующие действия:
- В разделе «Условия» выберите «Если пользователь говорит «нет» .
Включите запросы на отправку и предоставьте простой запрос, сообщающий пользователю, что ему не будут отправляться уведомления:
candidates: - first simple: variants: - speech: Okay, I won't send you notifications.
В разделе «Переход» выберите « Завершить разговор» , чтобы завершить разговор после того, как пользователь откажется от уведомлений.
Настроить вебхук
Чтобы настроить вебхук, выполните следующие действия:
В свой вебхук добавьте обработчик намерений для хранения
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 действий.
Получить ключ сервисного аккаунта
- Перейдите в консоль Google API и выберите свой проект в раскрывающемся списке «Выберите проект» .
- Нажмите «Включить» , чтобы включить Actions API для вашего проекта.
- Перейдите на страницу учетных данных консоли Google Cloud и выберите свой проект в раскрывающемся списке «Выберите проект» .
- Нажмите Создать учетные данные > Учетная запись службы .
- Введите имя учетной записи службы и нажмите « Создать» .
- В раскрывающемся списке «Выберите роль» выберите «Проект» > «Владелец» .
- Нажмите Продолжить .
- Нажмите «Создать ключ» , чтобы загрузить JSON-файл сервисной учетной записи.
Обменять ключ на токен доступа и отправить уведомление
Чтобы отправлять push-уведомления через Actions API, вам необходимо обменять ключ учетной записи службы на токен доступа. Мы рекомендуем использовать для этого клиентскую библиотеку Google API. В следующей серии фрагментов кода мы используем клиентскую библиотеку Google API Node.js.
Установите клиентскую библиотеку Google API и запросите:
npm install googleapis request --save
Используйте следующий код, чтобы получить токен доступа из ключа учетной записи службы и отправить 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)); }); });