В моем последнем посте Я писал о добавлении диалогового интерфейса в приложение, используя документ Firestore для пользователя в качестве точки интеграции как часть доказательства концепции (PoC) для приложения, которое я разрабатываю.

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

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

Как и в предыдущем посте, я создал демонстрационный проект, который можно использовать в качестве основы для веб-приложения и Action, чтобы изучить, как работает интеграция:



Подтверждение пользователя

Чтобы отправлять пользователям push-уведомления, нам сначала нужно убедиться, что они зарегистрированы для использования нашего приложения, что является требованием для использования функции связывания приложений в Actions on Google.

Связывание приложений позволяет Action'у получать информацию о пользователе от Google, а также предоставляет доступ к хранилищу на объекте пользователя, который может использоваться Action для отслеживания состояния, что в нашем случае будет, если мы спросим пользователя, если они хотят уже получать уведомления.

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

Если пользователь не проверен, нам нужно закрыть диалог с ним, поскольку последующий код не запустится, если у него нет этого проверенного статуса, мы можем запросить это с помощью метода SignIn из библиотеки actions-on-google.

Чтобы перенаправить пользователя на вход, нам сначала нужно создать новое намерение, которое прослушивает событие actions_intent_SIGN_IN и выполняется нашей функцией выполнения Firebase.

Предложить пользователю разрешить уведомления

Как только мы узнаем, что пользователь вошел в систему, мы можем предложить ему включить push-уведомления. Это так же просто, как вернуть ответ и два предложения; один, если они хотят разрешить уведомления, и один, если они этого не сделают.

Независимо от того, как пользователь отвечает, мы установим флаг PUSH_NOTIFICATION_ASKED в user.storage, чтобы при повторном взаимодействии пользователя с действием мы не запрашивали его повторно.

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

Намерения

Ответ на предложение будет подкреплен намерением, при этом намерение запрашивает у пользователя разрешения на отправку push-уведомлений, а затем перенаправляет их другому намерению, которое будет собирать токен push-уведомления пользователя и сохранять его.

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

  • Имя - setup_push
  • События - SETUP_PUSH
  • Обучающие фразы - Send me doggo reminders
  • Действие - setup.push
  • Выполнение - включить вызов веб-перехватчика для этого намерения.

Это будет слушать предложение Send me doggo reminders и запускать функцию выполнения, которая, в свою очередь, запускает поток разрешений.

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

  • Имя - finish_push_setup
  • События - actions_intent_PERMISSION
  • Обучающие фразы - finish_push_setup
  • Действие - finish.push.setup
  • Выполнение - включить вызов веб-перехватчика для этого намерения.

Исполнение

В коде выполнения мы добавим к намерениям следующие функции:

setup_push
Создает вызов UpdatePermissions, который примет намерение Add Doggo как команду, это будет намерение, которое запускается, когда пользователь получает уведомление

finish_push_setup
Когда пользователь соглашается на push-уведомления, наше намерение finish_push_setup запускается со следующими аргументами, которые мы будем использовать для получения push-токена:

  • РАЗРЕШЕНИЕ - разрешил ли пользователь отправку?
  • UPDATES_USER_ID - токен пользователя.

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

Действия при настройке Google Integration

Последнее, что нужно сделать, - это настроить намерения в Actions on Google, это сообщит Actions on Google, что эти намерения существуют и что наше Add Doggo Intent хочет отправлять уведомления.

В Dialogflow откройте «Действия в настройках интеграции Google» (в разделе «Интеграция» нажмите кнопку «Настройки интеграции» в поле «Действия в Google») и добавьте Add Doggo Intent в список неявных вызовов.

В том же диалоговом окне нажмите кнопку Manage Assistant App, чтобы открыть Консоль действий, здесь, в пункте меню «Разработка» - ›Действия, нам нужно отредактировать запись Add Doggo, чтобы разрешить push-уведомления.

Настройки для этого находятся в разделе User Engagement, и нам нужно включить параметр Would you like to send push notifications? и указать имя для этого взаимодействия.

Как только это будет сохранено, наши функции выполнения будут иметь правильные разрешения для настройки разрешения push-уведомлений.

Отправка push-уведомления

Теперь, когда у нас есть push-токен пользователя, мы можем начать отправлять им уведомления, это делается с помощью аутентифицированного вызова API с полезной нагрузкой, содержащей push-токен пользователя и намерение, которое мы хотим, чтобы уведомление запускалось, и заголовок для уведомления.

Чтобы использовать этот API, хотя нам сначала нужно его включить, это можно сделать на странице https://console.developers.google.com/apis/api/actions.googleapis.com, вам просто нужно нажать Use API кнопку, чтобы настроить его.

Аутентификация с Google

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

Вы можете использовать библиотеку googleapis в Node, чтобы получить JWT, который будет использовать для аутентификации в сервисах Google, используя следующую команду в папке, в которую вы нажимаете Service Account Live:

Когда у нас есть JWT, мы используем его для отправки полезной нагрузки на https://actions.googleapis.com/v2/conversations:send, который затем отправит пользователю push-уведомление, это принимает форму:

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

Резюме

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

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

Получить код

Я собрал демонстрационный проект, содержащий действие и тестовый код для push-уведомлений, он также доступен в ветке actions-on-google-push-notifications демонстрационного проекта, который я создал как часть my блог - Добавление диалогового интерфейса в ваше приложение с Dialogflow.