https://a.storyblok.com/f/270183/54190/9d8fbecf32/blog_dialogflow-firebase_messaging_1200x600.png

Como usar o Dialogflow com o Firebase e o ambiente de testes do Vonage Messages

Publicado em November 7, 2020

Tempo de leitura: 8 minutos

Usando o Dialogflow para criar um chatbot que interaja com seus clientes é uma ótima maneira de lidar com solicitações recebidas, como reservas, consultas bancárias, perguntas frequentes e suporte inicial. Ao combinar o Dialogflow com o Firebase e Messages API da Vonage, as coisas começam a ficar interessantes.

Pré-requisitos

Neste tutorial, você conectará um agente do Dialogflow à Messages API do Vonage usando o Firebase. Ao concluir, você poderá enviar uma mensagem pelo Facebook Messenger para o agente do Dialogflow e receber uma resposta com base nas regras do agente.

É bom você verificar se tem:

Criar um aplicativo do Firebase

Se esta for a primeira vez que você está configurando um projeto do Firebase, recomendo que você siga o tutorial de introdução ao Firebase para se familiarizar com o ambiente. Se você já está acostumado com o Firebase ou está se sentindo aventureiro, o primeiro passo é criar um novo projeto no Firebase. Fique à vontade para dar a ele qualquer nome que seja fácil de lembrar.

Create Firebase ProjectCreate Firebase Project

Depois de concluir o processo inicial de criação (menos de 5 minutos), configure estes dois itens no painel do seu projeto:

  1. Atualize para o Blaze Pay-As-You-Go Você pode encontrar essa opção em Configurações -> Uso e cobrança -> Detalhes e configurações -> Modificar plano. O Firebase exige o Blaze para que qualquer integração de terceiros funcione.

  2. Escolha um local de recursos Encontre essa opção em Configurações -> Configurações do projeto -> Geral

Depois que tudo estiver pronto, você poderá configurar o agente do Dialogflow e associá-lo ao novo projeto do Firebase/GCP.

Configurar o agente do Dialogflow

Agora você está pronto para criar um novo agente do Dialogflow — o chatbot com o qual você irá interagir mais tarde. O Dialogflow utiliza o Processamento de Linguagem Natural para determinar as intenções do usuário com base no que ele digita ou fala e retorna uma ação de acordo com essa intenção.

Em seguida, importe um “Agente pré-configurado” fornecido pelo Google para ajudar você a começar. Se você ainda não conhece o DialogFlow, será necessário criar um agente em branco na página inicial.

Create Blank Dialogflow AgentCreate Blank Dialogflow Agent

Depois de escolher um agente, você pode selecionar a opção “Agentes pré-criados” no menu à esquerda. Serão exibidos diversos tipos de agentes que podem ajudá-lo a começar a aprender como criar seu chatbot. Para este exemplo, escolhi “Easter Eggs”.

Prebuilt AgentsPrebuilt Agents

Importe um agente e aguarde até que ele conclua o processo de compilação. Quando terminar, obtenha as credenciais da conta de serviço.

Baixar chaves de conta de serviço

Acesse o serviço IAM & Admin do GCP para contas de serviço. Certifique-se de selecionar o projeto correto que você já vem utilizando.

Você deve ver uma conta de serviço semelhante a dialogflow@myexampleproject.iam.gserviceaccount.com. Clique nos pontos à direita e selecione Create Key e, em seguida, escolha JSON uma das opções. Esse processo gera e baixa um JSON arquivo. Salve esse arquivo para uso posterior.

Compilar funções localmente

Agora você já tem um projeto do Firebase e um agente do Dialogflow prontos para uso. Os dois sistemas precisam se comunicar entre si e com as APIs da Vonage. Para isso, é preciso escrever um pouco de código para que tudo funcione.

A CLI do Firebase oferece algumas ferramentas úteis para você começar. Certifique-se de ter a versão mais recente e execute o seguinte:

firebase init functions

Este comando cria o projeto dentro da sua pasta raiz e solicita que você o conecte a um projeto já existente. Após algumas solicitações, o comando é executado npm install para instalar todos os pré-requisitos. Quando terminar, acesse a pasta `functions` e use este comando para instalar os outros pacotes necessários:

npm i @google-cloud/Dialogflow axios

Neste momento, você também deve transferir o arquivo da conta de serviço JSON para o functions diretório. Depois de fazer isso, certifique-se de adicioná-lo ao seu .gitignore arquivo também.

O Código

Dentro do functions diretório está index.js. Eles fornecem alguns exemplos de código para você começar, mas você pode excluí-los e substituí-los pelo código a seguir para enviar uma mensagem para o Sandbox do Vonage Messages. Certifique-se de ter sua chave e seu segredo da API do Vonage à mão para isso.

const functions = require('firebase-functions');
const axios = require('axios');
// the service account JSON file downloaded earlier - make sure this is named properly
const serviceAccount = require('./service_account.json');
const Dialogflow = require('@google-cloud/Dialogflow');
// This method takes the TO_ID, FROM_ID, MSG from the webhook defined later
// DialogFlow responses will be sent using this function
// You will need to get your API Key and Secret from the Vonage Dashboard.
function sendMessage(TO_ID, FROM_ID, MSG) {
  return axios.post('https://messages-sandbox.nexmo.com/v0.1/messages', {
    "from": { "type": 'messenger', "id": FROM_ID },
    "to": { "type": 'messenger', "id": TO_ID },
    "message": {
      'content': {
        'type': 'text',
        'text': MSG
      }
    }
  }, {
    auth: {
      username: 'API_KEY',
      password: 'API_SECRET'
    }
  })
}

A próxima função é a ponte entre o Firebase e o Dialogflow. A mensagem recebida da Vonage é enviada ao agente do Dialogflow para determinar a intenção da mensagem. Assim que a intenção é determinada, o Dialogflow retorna uma mensagem para ser encaminhada ao cliente.

async function DialogflowGateway(text, sessionId) {
  const sessionClient = new Dialogflow.SessionsClient({ credentials: serviceAccount });
  const sessionPath = sessionClient.projectAgentSessionPath('YOUR-GOOGLE-PROJECT', sessionId);
  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        text: text,
        languageCode: 'en-US',
      },
    },
  };
  console.log(request)
  return sessionClient.detectIntent(request);
}

O Sandbox do Vonage Messages utiliza um webhook de entrada para receber as mensagens por meio do método POST no Firebase.

exports.webhook = functions.https.onRequest(async (req, res) => {
  const { message, from, to } = req.body;
  try {
    // the message from the user is sent to Dialogflow, and a response is returned
    const response = await DialogflowGateway(message.content.text, from.id);
    // the response from Dialogflow is sent back to the user through Vonage
    await sendMessage(from.id, to.id, response[0].queryResult.fulfillmentText);
  } catch (error) {
    console.error(error);
  }
  res.sendStatus(200);
});

Essas três funções devem estar dentro do index.js arquivo e salvas. Agora só falta implantar essas funções.

Implantar funções

Usando a CLI do Firebase, implante as funções no Firebase com este comando:

firebase deploy --only functions

Após a implantação bem-sucedida, você receberá o webhook necessário para o Sandbox do Vonage Messages Inbound webhook.

✔ functions: Finished running predeploy script. i functions: ensuring required API cloudfunctions.googleapis.com is enabled... ✔ functions: required API cloudfunctions.googleapis.com is enabled i functions: preparing functions directory for uploading... i functions: packaged functions (47.86 KB) for uploading ✔ functions: functions folder uploaded successfully i functions: creating Node.js 8 function webhook(us-central1)... ✔ functions[status(us-central1)]: Successful create operation. ✔ functions[webhook(us-central1)]: Successful create operation. Function URL (webhook): https://us-central1-myexampleproject.cloudfunctions.net/webhook ✔ Deploy complete!

Depois de atualizar o webhook, você pode testá-lo no Facebook Messenger.

Facebook Messenger ExampleFacebook Messenger Example

Fique à vontade para alterar as intenções e ações no Dialogflow para começar a ver como ele pode se encaixar na sua estratégia de comunicação.

Se você quiser ver a versão completa deste e de outros exemplos do Google Cloud, acesse aqui: https://github.com/nexmo-community/google-cloud-sample-code. Se você tiver alguma dúvida ou quiser outros exemplos com o Google Cloud, o Dialogflow ou o Firebase, abra uma solicitação de pull ou me mande uma mensagem no Twitter.

Compartilhar:

https://a.storyblok.com/f/270183/384x384/444c073b5e/kellyjandrews.png
Kelly J AndrewsEx-membro da equipe

Kelly J Andrews é defensora de desenvolvedores da Nexmo e vem se dedicando à informática há mais de 30 anos, tendo usado BASIC pela primeira vez aos 5 anos de idade.

Foi só ao criar sua primeira página da web, em 1997, e ao experimentar o JavaScript pela primeira vez que ele descobriu sua verdadeira vocação. Hoje, Kelly luta pelo JavaScript, pelo código testável e pela entrega rápida.

É possível encontrá-lo cantando no karaokê, fazendo truques de mágica ou torcendo pelos Cubs e pelos Fighting Irish.