Notificações push

Sua Ação pode enviar notificações push aos usuários sempre que for relevante. Por exemplo, enviar um lembrete quando a data de conclusão de uma tarefa estiver próxima.

Neste guia, descrevemos como configurar notificações push para sua ação.

Plataformas com suporte

As notificações push estão disponíveis em dispositivos Android e iOS. Os dispositivos iOS precisam ter o app Google Assistente instalado para receber esse tipo de notificação. No momento, eles não são compatíveis com alto-falantes ativados por voz, smart displays e outras plataformas.

Pré-requisitos

O projeto precisa conter pelo menos uma intent global, que é invocada quando o usuário toca em uma notificação push recebida do Google Assistente.

Primeiros passos

As seções a seguir descrevem como configurar notificações push na sua Ação.

Criar uma intent para acionamento

A intent criada nesta seção aciona o fluxo de notificações. Para criar essa intent, siga estas etapas:

  1. Acesse o Console do Actions e clique em Desenvolver no menu superior.
  2. Clique em Intents no menu à esquerda para expandir a seção.
  3. Clique em na parte inferior da lista e digite um nome para a nova intent.
  4. Pressione Enter/Return para criar a nova intent.
  5. Adicione frases de treinamento para acionar o fluxo de notificações. Por exemplo:

    • Notify me
    • Send notifications
    • Subscribe to notifications
  6. Clique em Salvar.

Transição para intents do sistema

Para configurar a transição para a cena do sistema Notifications, siga estas etapas:

  1. Em Cenas, no menu à esquerda, clique na cena a que você quer adicionar o fluxo de inscrição de notificações.
  2. Na seção Processamento da intent do usuário da cena, clique em + para adicionar um novo gerenciador de intent.
  3. Em Intent, selecione a intent que você criou na seção anterior.
  4. Em Transição, selecione a cena do sistema Notificações.

  5. Clique em Salvar.

Configurar cenário do sistema

Para configurar a cena do sistema Notifications, siga estas etapas:

  1. Em Cenas, no menu à esquerda, selecione a nova cena do sistema Notificações.
  2. Na seção Configurar intent, clique em Selecionar intent.
  3. Na seção Selecionar intent, escolha a intent que você quer associar quando um usuário tocar em uma notificação push.

  4. Em Personalizar solicitação de ativação, insira uma opção que será exibida aos usuários quando receberem uma solicitação para se inscrever nas notificações push. A solicitação aparece na forma de "Tudo bem se eu enviar notificações push para $prompt".

  5. Clique em Salvar.

Configurar a ativação

Para configurar a ativação das notificações push, siga estas etapas:

  1. Em Cenas, selecione a cena do sistema Notificações.
  2. Em Condições, selecione Se o usuário disser "sim".
  3. Ative Chamar o webhook e forneça um nome de manipulador de eventos, como subscribe_to_notifications.
  4. Ative Enviar solicitações e forneça um comando simples para informar ao usuário que ele receberá notificações:

    candidates:
    - first simple:
      variants:
      - speech: 'Great, I'll send you notifications.'
    
  5. Em Transição, selecione Encerrar conversa para encerrar a conversa depois que um usuário se inscrever para receber notificações.

Configurar a desativação

Para configurar a desativação das notificações push, siga estas etapas:

  1. Em Condições, selecione Se o usuário disser "não".
  2. Ative Enviar solicitações e forneça um aviso simples para informar ao usuário que ele não receberá notificações:

    candidates:
    - first simple:
      variants:
      - speech: Okay, I won't send you notifications.
    
  3. Em Transição, selecione Encerrar conversa para encerrar a conversa depois que um usuário desativar as notificações.

Configurar webhook

Para configurar o webhook, siga estas etapas:

  1. No webhook, adicione um gerenciador de intent para armazenar o 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.)
      }
    });
    

Envie notificações

As notificações push são enviadas aos usuários usando a API Actions. Para usar essa API, ative-a no projeto do Google Cloud, configure e faça o download de uma chave de conta de serviço JSON.

Depois, use a biblioteca de cliente OAuth2 do Google para trocar a chave da conta de serviço por um token de acesso e usá-lo para autenticar as solicitações à API Actions.

Gerar uma chave da conta de serviço

  1. Acesse o Console de APIs do Google e escolha seu projeto no menu suspenso Selecionar um projeto.
  2. Clique em Ativar para ativar a API Actions no seu projeto.
  3. Acesse a página de credenciais do console do Google Cloud e escolha seu projeto no menu suspenso Selecionar um projeto.
  4. Clique em Criar credenciais > Conta de serviço.
  5. Insira um nome para a conta de serviço e clique em Criar.
  6. No menu suspenso Selecionar um papel, escolha Projeto > Proprietário.
  7. Clique em Continuar.
  8. Clique em Criar chave para fazer o download do arquivo JSON da conta de serviço.

Trocar a chave por um token de acesso e enviar uma notificação

Para enviar notificações push pela API Actions, você precisa trocar a chave da conta de serviço por um token de acesso. Para isso, recomendamos usar uma biblioteca de cliente das APIs do Google. Na série de snippets de código a seguir, usamos a biblioteca de cliente Node.js da API do Google.

  1. Instale a biblioteca de cliente das APIs do Google e solicite:

    npm install googleapis request --save

  2. Use o código a seguir para receber um token de acesso da chave da conta de serviço e enviar uma notificação 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));
      });
    });