Powiadomienia push

Akcja może przekazywać użytkownikom powiadomienia zawsze, gdy jest to konieczne, np. wysyłając przypomnienie, 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 je otrzymywać, na urządzeniach z iOS musi być zainstalowana aplikacja Asystent). Obecnie nie obsługujemy ich na głośnikach aktywowanych głosem, inteligentnych ekranach ani innych platformach.

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 sekcjach poniżej opisujemy, jak skonfigurować powiadomienia push w akcji.

Utwórz intencję do aktywowania

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

  1. Otwórz konsolę Actions i w menu u góry kliknij Programowanie.
  2. W menu po lewej stronie kliknij Intents (Intencje), aby rozwinąć sekcję.
  3. Kliknij na dole listy i wpisz nazwę nowej intencji.
  4. Naciśnij Enter/Return, aby utworzyć nową intencję.
  5. Dodaj wyrażenia na potrzeby nauki, które będą uruchamiać przepływ powiadomień. Przykłady:

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

Przejdź na intencję systemową

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

  1. W sekcji Sceny w menu po lewej stronie kliknij scenę, do której chcesz dodać subskrypcję powiadomień.
  2. W sekcji Obsługa intencji użytkownika kliknij +, aby dodać nowy moduł obsługi intencji.
  3. W sekcji Intent (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 intencję.
  3. W sekcji Wybierz zamiar wybierz intencję, która ma być dopasowywana, gdy użytkownik kliknie powiadomienie push.

  4. W polu Dostosuj prośbę o wyrażenie zgody wpisz prompt, który będzie wyświetlany, gdy użytkownicy otrzymają prośbę o zasubskrybowanie powiadomień push. Może on mieć postać „Czy mogę wysyłać powiadomienia push na temat $prompt”.

  5. Kliknij Zapisz.

Skonfiguruj akceptację

Aby skonfigurować włączanie powiadomień push, wykonaj te czynności:

  1. W sekcji Sceny wybierz scenę systemową Powiadomienia.
  2. W sekcji Warunki wybierz Jeśli użytkownik powie „tak”.
  3. Włącz opcję Wywołaj webhooka i podaj nazwę modułu obsługi zdarzeń, np. subscribe_to_notifications.
  4. Włącz Wysyłaj potwierdzenia i w prosty sposób daj użytkownikowi znać, że będą otrzymywać powiadomienia:

    candidates:
    - first simple:
      variants:
      - speech: 'Great, I'll send you notifications.'
    
  5. W sekcji Przenoszenie wybierz Zakończ rozmowę, aby zakończyć rozmowę, gdy użytkownik zasubskrybuje powiadomienia.

Skonfiguruj rezygnację

Aby skonfigurować rezygnację z powiadomień push:

  1. W sekcji Warunki wybierz Jeśli użytkownik mówi „nie”.
  2. Włącz Wysyłaj potwierdzenia i w prosty sposób zaproponuj użytkownikowi informację, ż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ę, gdy użytkownik zrezygnuje z powiadomień.

Skonfiguruj webhooka

Aby skonfigurować webhooka, wykonaj te czynności:

  1. Do webhooka dodaj moduł obsługi intencji do przechowywania elementu 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.)
      }
    });
    

Wyślij powiadomienia

Powiadomienia push są wysyłane do użytkowników za pomocą interfejsu Actions API. Aby używać tego interfejsu API, musisz go aktywować 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żywać go do uwierzytelniania żądań do interfejsu Actions API.

Uzyskiwanie 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 interfejsów API Google. W serii poniższych fragmentów kodu używamy biblioteki klienta Node.js interfejsu API Google.

  1. Zainstaluj bibliotekę klienta interfejsów API Google i poproś o wykonanie tych czynności:

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