Powiadomienia push

Akcja może wysyłać powiadomienia do użytkowników w odpowiednich momentach – np. wysyłać przypomnienia, gdy zbliża się termin wykonania zadania.

Z tego przewodnika dowiesz się, jak skonfigurować powiadomienia push dotyczące akcji.

Obsługiwane platformy

Powiadomienia push są dostępne na urządzeniach z Androidem i iOS (aby otrzymywać powiadomienia push, należy mieć zainstalowaną aplikację Asystent). Obecnie nie są one obsługiwane na głośnikach aktywowanych głosem, inteligentnych ekranach ani innych urządzeniach.

Wymagania wstępne

Projekt musi zawierać co najmniej 1 intencję globalną, która jest wywoływana, gdy użytkownik kliknie powiadomienie push otrzymane od Asystenta.

Rozpocznij

W kolejnych sekcjach opisaliśmy, jak skonfigurować powiadomienia push w Akcji.

Tworzenie intencji do aktywowania

Intencja utworzona w tej sekcji aktywuje przepływ powiadomień. Aby utworzyć tę intencję, wykonaj te czynności:

  1. Otwórz Konsolę Actions i w menu u góry kliknij Develop (Programowanie).
  2. Kliknij Intencje w menu po lewej stronie, aby rozwinąć tę sekcję.
  3. Kliknij u dołu listy i wpisz nazwę nowej intencji.
  4. Aby utworzyć nową intencję, naciśnij Enter/Return.
  5. Dodaj wyrażenia na potrzeby trenowania wyzwalające przepływ powiadomień. Na przykład:

    • Notify me
    • Send notifications
    • Subscribe to notifications
  6. Kliknij Zapisz.

Przejście do intencji systemowej

Aby skonfigurować przejście do sceny systemowej Notifications, wykonaj te czynności:

  1. W sekcji Sceny w menu po lewej stronie kliknij scenę, do której chcesz dodać przepływ powiadomień.
  2. W sekcji Obsługa intencji użytkownika sceny kliknij +, aby dodać nowy moduł obsługi intencji.
  3. W sekcji Intencja wybierz intencję utworzoną w poprzedniej sekcji.
  4. W sekcji Przejście wybierz scenę systemową Powiadomienia.

  5. Kliknij Zapisz.

Skonfiguruj scenę systemową

Aby skonfigurować scenę systemową Notifications, wykonaj te czynności:

  1. W sekcji Sceny w menu po lewej stronie wybierz nową scenę systemową Powiadomienia.
  2. W sekcji Skonfiguruj intencję kliknij Wybierz zamiar.
  3. W sekcji Wybierz intencję wskaż intencję, która ma być dopasowywana, gdy użytkownik kliknie powiadomienie push.

  4. W polu Dostosuj prośbę o zgodę na wykorzystanie danych wpisz komunikat, który będzie się wyświetlał, gdy użytkownik zobaczy prośbę o subskrypcję powiadomień push. Prompt ma postać „Czy mogę wysyłać powiadomienia push dla $prompt?”.

  5. Kliknij Zapisz.

Skonfiguruj akceptację

Aby skonfigurować otrzymywanie powiadomień push, wykonaj te czynności:

  1. W sekcji Sceny wybierz scenę systemową Powiadomienia.
  2. W sekcji Warunki wybierz Jeśli użytkownik odpowie „tak”.
  3. Włącz Wywołaj webhooka i podaj nazwę modułu obsługi zdarzeń, np. subscribe_to_notifications.
  4. Włącz Wyślij potwierdzenia i podaj prosty komunikat, aby użytkownik wiedział, że otrzyma powiadomienia:

    candidates:
    - first simple:
      variants:
      - speech: 'Great, I'll send you notifications.'
    
  5. W sekcji Przenoszenie wybierz Zakończ rozmowę, aby zakończyć rozmowę po zasubskrybowaniu powiadomień przez użytkownika.

Skonfiguruj rezygnację

Aby skonfigurować rezygnację z powiadomień push:

  1. W sekcji Warunki wybierz Jeśli użytkownik odpowie „nie”.
  2. Włącz Wyślij potwierdzenia i podaj prosty komunikat, aby poinformować użytkownika, że nie będzie otrzymywać powiadomień:

    candidates:
    - first simple:
      variants:
      - speech: Okay, I won't send you notifications.
    
  3. W sekcji Przenoszenie wybierz Zakończ rozmowę, aby zakończyć rozmowę po tym, jak użytkownik zrezygnuje z powiadomień.

Skonfiguruj webhooka

Aby skonfigurować webhooka, wykonaj te czynności:

  1. W webhooku dodaj moduł obsługi intencji, który będzie przechowywać plik 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.)
      }
    });
    

Wysyłaj powiadomienia

Powiadomienia push są wysyłane do użytkowników przy użyciu interfejsu Actions API. Aby używać tego interfejsu API, musisz aktywować go w swoim projekcie Google Cloud oraz skonfigurować i pobrać klucz konta usługi JSON.

Następnie za pomocą biblioteki klienta Google OAuth2 możesz wymienić klucz konta usługi na token dostępu i użyć tego tokena do uwierzytelniania żądań do interfejsu Actions API.

Pobieranie klucza konta usługi

  1. Otwórz konsolę interfejsów API Google i wybierz swój projekt z menu Wybierz projekt.
  2. Kliknij Włącz, aby włączyć w projekcie interfejs Actions API.
  3. Otwórz stronę danych logowania do konsoli Google Cloud i wybierz swój projekt z menu Wybierz projekt.
  4. Kliknij Utwórz dane logowania > Konto usługi.
  5. Wpisz nazwę konta usługi i kliknij Utwórz.
  6. W menu Wybierz rolę kliknij Projekt > Właściciel.
  7. Kliknij Dalej.
  8. Kliknij Utwórz klucz, aby pobrać plik JSON konta usługi.

Wymień klucz na token dostępu i wyślij powiadomienie

Aby wysyłać powiadomienia push za pomocą interfejsu Actions API, musisz wymienić klucz konta usługi na token dostępu. Zalecamy użycie do tego biblioteki klienta interfejsu API Google. W poniższych fragmentach kodu używamy biblioteki klienta interfejsu API Google w środowisku Node.js.

  1. Zainstaluj bibliotekę klienta interfejsu API Google i żądanie:

    npm install googleapis request --save

  2. Aby uzyskać token dostępu z klucza konta usługi i wysłać powiadomienie push, użyj tego kodu:

    // 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));
      });
    });