https://a.storyblok.com/f/270183/83480/df4914a22c/dialogflow_facebook-messenger.png

Crie um bot para o Facebook Messenger com o Dialogflow (Tutorial de API)

Publicado em October 26, 2023

Tempo de leitura: 17 minutos

Postagem atualizada por Amanda Cavallaro

Neste tutorial, você aprenderá a criar um bot do Facebook Messenger na sua página do Facebook usando o Google Dialogflow e a Messages API for Vonage.

O aplicativo de chatbot deste exemplo receberá mensagens enviadas pelo botão “Enviar mensagem” em uma página do Facebook ou pelo aplicativo do Facebook Messenger. Ambos funcionarão perfeitamente com o aplicativo de chatbot.

As mensagens serão encaminhadas por meio do nosso aplicativo para o Google Dialogflow. O Dialogflow utilizará, então, o processamento de linguagem natural (NLP) para gerar respostas às perguntas. Em seguida, nosso chatbot enviará essas respostas de volta para Facebook Messenger por meio da API.

Neste exemplo, estamos usando o agente Small Talk pré-configurado no Dialogflow. Usaremos o agente Small Talk para criar um bot no Facebook que responda com respostas animadas às perguntas recebidas. O agente Small Talk é fácil de usar e é ótimo para fins de desenvolvimento.

Incluímos instruções passo a passo para criar um bot no Facebook Messenger com integração ao Dialogflow, utilizando a Messages API da Vonage. Ao longo do tutorial, você encontrará exemplos de código que poderá usar para criar seu chatbot.

Você pode baixar o código neste repositório do GitHub .

Pré-requisitos

Para criar um bot do Dialogflow para o Facebook Messenger, você precisará dos seguintes pré-requisitos:

Como criar um bot para o Facebook Messenger com o Dialogflow em 6 etapas

Para criar um bot usando o Facebook Messenger, o Dialogflow e a Messages API, siga as etapas abaixo:

  1. Criar um aplicativo básico para o bot do Facebook

  2. Criar um aplicativo de mensagens na API da Vonage

  3. Conecte a Messages API do Vonage ao Facebook

  4. Enviar mensagens do Facebook para o Dialogflow

  5. Enviar respostas do Dialogflow para o Facebook

  6. Teste seu bot do Facebook Messenger

1. Criar um aplicativo básico para o bot do Facebook

O primeiro passo para criar seu bot no Facebook Messenger é criar um esboço do aplicativo.

Para receber mensagens do Facebook, é preciso configurar dois webhooks que permitam que o aplicativo receba dados sobre as mensagens e o status de entrega.

Vamos começar criando o aplicativo básico com essas duas rotas.

Em uma nova pasta, inicialize um novo aplicativo Node.js executando

npm init -y

Em seguida, instale as dependências do projeto:

npm i koa koa-route koa-bodyparser @vonage/server-sdk dialogflow

Além disso, vamos usar o excelente Nodemon e DotEnv para manter nosso aplicativo em funcionamento enquanto as alterações são feitas, assim você não precisa ficar reiniciando-o. Instale-os como devDependencies.

npm i -D nodemon dotenv

Por fim, crie uma pequena estrutura de pastas criando routes e controllers pastas na raiz do seu diretório.

mkdir routes controllers

Adicionar as variáveis de ambiente

O código do GitHub vem com um .env.sample arquivo; copie-o e renomeie-o para env. Você deverá adicionar os valores às seguintes chaves.

VONAGE_API_KEY: Ele pode ser encontrado na página inicial do Painel da Vonage, após o login.

VONAGE_API_SECRET: Após fazer login, ele pode ser encontrado no Painel da API da Vonage.

VONAGE_APPLICATION_ID: Ele pode ser encontrado no Painel da Vonage, dentro do aplicativo.

VONAGE_PRIVATE_KEY: Um arquivo que pode ser baixado do Painel da Vonage, dentro do aplicativo, com recursos de mensagens.

FACEBOOK_PAGE_ID: Você pode encontrar essas informações acessando as configurações do perfil. Elas aparecem logo abaixo de Resumo > Informações da página.

DIALOGFLOW_PROJECT_ID: Você pode encontrar o ID do projeto tanto no Google Cloud Platform quanto na aba “Geral” das configurações do projeto do Dialogflow, no painel do Dialogflow ES. Aqui está uma maneira alternativa de encontrar o ID da página, fornecida pelas perguntas frequentes (FAQs).

DIALOGFLOW_SESSION_ID: O ID da sessão pode ser uma sequência de caracteres gerada aleatoriamente ou um identificador de usuário com hash. Seu comprimento deve ser de, no máximo, 36 caracteres.

DIALOGFLOW_LANGUAGE_CODE: Você pode escolher vários idiomas; adicione aquele que encontrar no seu painel do Dialogflow.

GOOGLE_APPLICATION_CREDENTIALS: Você pode criar uma chave de conta de serviço aqui.

Criar o servidor Koa

Koa é um framework para Node.js desenvolvido pelos criadores do Express. É leve e vem com apenas um conjunto básico de recursos prontos para uso, o que o torna perfeito para criar um pequeno servidor de webhooks como o que precisamos aqui.

Crie o arquivo principal do servidor adicionando um novo arquivo no diretório raiz chamado server.js.

Neste novo arquivo, adicione o seguinte código:

const Koa = require('koa');
const router = require('koa-route');
const bodyParser = require('koa-bodyparser');
const routes = require('./routes');
const port = process.env.PORT || 3000;

// Set up a new Koa app and tell it to use
// the bodyParser middleware for inbound requests
const app = new Koa();
app.use(bodyParser());

// Routes
app.use(router.post('/webhooks/status', routes.status));
app.use(router.post('/webhooks/inbound', routes.inbound));

// Have the app listen on a default port or 3000
app.listen(port, () => console.log(`App is waiting on port ${port}`));

A routes constante é usada para armazenar e acessar as rotas no aplicativo:

const routes = require('./routes');

Também precisaremos de um novo arquivo na routes pasta chamada index.js. Vá em frente e crie-o, e adicione o seguinte código:

const routes = {
  inbound: async ctx => {
    // Get the detail of who sent the message, and the message itself
    const { from, message } = ctx.request.body;
    console.log(from, message);
    ctx.status = 200;
  },
  status: async ctx => {
    const status = await ctx.request.body;
    console.log(status);
    ctx.status = 200;
  }
};

module.exports = routes;

Com tudo isso configurado, execute o seguinte comando para iniciar o servidor:

nodemon server.js

O aplicativo será lançado na porta 3000.

Use o Ngrok para abrir essa porta para o mundo e anote as URLs que ele gerar para você; elas devem ter um formato semelhante a este: https://f70f-82-10-85-156.ngrok.io

Aqui está um guia prático para trabalhar com o Ngrok , caso seja a primeira vez que você o utiliza.

Resumo? Você pode iniciar o Ngrok (se estiver instalado) executando este comando em uma aba separada do terminal:

ngrok HTTP 3000

2. Criar um aplicativo de mensagens na API da Vonage

Em seguida, você precisará criar um aplicativo “Mensagens” na sua conta da API da Vonage. Esse aplicativo permitirá que você conecte o Facebook e o Dialogflow e envie mensagens entre eles.

Configure um novo aplicativo de Mensagens pelo Painel de Controle da Vonage.

Certifique-se de acrescentar /webhooks/inbound e /webhooks/status ao URL que você obtém do Ngrok ao colá-lo no formulário (como na imagem abaixo).

Webhooks containing inbound and statusMessages Webhook

Lembre-se de clicar também no link “Gerar par de chaves pública/privada” . Isso fará o download de um arquivo chamado private.key.

Localize o private.key arquivo no seu sistema e mova-o para a pasta raiz do seu aplicativo.

Conclua a configuração do aplicativo clicando no botão Criar aplicativo e pronto, a configuração está concluída.

Anote o ID do seu aplicativo; você precisará dele na próxima etapa.

3. Conecte a Messages API do Vonage ao Facebook

Para que o Facebook reconheça seu aplicativo de chatbot recém-criado, você deve conectá-lo ao Facebook.

Primeiro, você precisará criar um JSON Web Token para autorizar o Facebook a usar seu aplicativo, e você pode fazer isso com a CLI da Vonage.

Abra o terminal e certifique-se de que está na raiz da pasta do seu aplicativo.

Usando o CLI da Vonage, execute o seguinte comando:

JWT="$(vonage jwt --key_file=private.key --app_id=VONAGE_APPLICATION_ID)"

Certifique-se de substituir VONAGE_APPLICATION_ID pelo ID do aplicativo que você acabou de criar.

Ao executar esse comando, será exibida uma longa sequência de letras e números — esse é o seu JSON Web Token. Copie tudo.

Em seguida, você pode visualizar o JWT com:

echo $JWT

Para conectar sua página do Facebook ao seu aplicativo, criamos uma página prática:

Conectar página do Facebook

Siga as etapas a seguir:

  • Faça login com suas credenciais do Facebook.

  • Selecione a página do Facebook que você deseja conectar ao seu aplicativo Vonage.

  • Clique em Concluir a configuração.

Se tudo correr bem, você verá uma janela de diálogo verde aparecendo, parabenizando-o pelo sucesso e informando o ID da sua página do Facebook.

Anote esse número de identificação.

Você pode verificar o conteúdo do seu JWT usando jwt.io.

Observação: Caso algum elemento deste documento precise de esclarecimentos, há um um guia sobre como criar JWTs para uso neste contexto em nosso tutorial do Facebook Messenger._

Teste a conexão

Seu aplicativo já está conectado à sua página do Facebook.

Com o seu servidor ainda em execução e o Ngrok ainda expondo-o para o mundo, acesse sua página do Facebook e localize o botão de mensagens.

Facebook Messenger Button

Clique aqui para abrir a janela de mensagens e começar a enviar mensagens maravilhosas. Como alternativa, basta começar com “Olá”.

Qualquer mensagem que você enviar será encaminhada para o Webhook de entrada que você especificou na configuração do seu aplicativo. Isso se corresponde diretamente à inbound função no routes.js arquivo.

Atualmente, a inbound função está configurada para registrar o from e message parte do que está sendo enviado do Facebook para o console.

Você deverá ver suas mensagens aparecendo no console.

Messages appearing in the console

4. Enviar mensagens do Facebook para o Dialogflow

Agora que o aplicativo está recebendo mensagens, é hora de encaminhá-las ao Dialogflow.

Na controllers pasta, crie um novo arquivo chamado dialogflow.js e adicione o conteúdo do arquivo JavaScript controllers/dialogflow.js.

A função exportada no arquivo realiza o seguinte:

  • Uma função assíncrona chamada dialogflowHandler é instanciada e aceita um parâmetro chamado query.

  • É criado um objeto chamado request é criado, contendo todas as chaves que o Dialogflow espera.

  • O objeto da solicitação é enviado ao Dialogflow.

  • A resposta do agente do Small Talk, contida em result[0].queryResult.fulfillmentText é retornada.

const dialogflowHandler = async query => {
  // Create a text query request object
  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        text: query,
        languageCode: languageCode
      }
    }
  };

  // Send the text query over to Dialogflow and await the result
  // using .catch to throw any errors
  const result = await sessionClient
    .detectIntent(request)
    .catch(err => console.error('ERROR:', err));

  // Pick out the response text from the returned array of objects
  const reply = await result[0].queryResult.fulfillmentText;

  // Return the reply
  return reply;
};

module.exports = dialogflowHandler;

Para utilizar essa dialogflowHandler função, abra o routes/index.js arquivo e inclua a função no início:

const dialogflowHandler = require('../controllers/dialogflow');

Modifique a inbound função para que fique assim:

inbound: async ctx => {
  const { from, message } = await ctx.request.body;

  console.log(from, message);

  const dialogflowResponse = await dialogflowHandler(message.content.text);

  console.log(dialogflowResponse);

  ctx.status = 200;
};

Envie uma nova mensagem (algo como “Olá!”) pela sua página do Facebook (ou pelo aplicativo do Facebook Messenger).

Desta vez, você verá a mensagem recebida sendo registrada no console, bem como a resposta enviada pelo Dialogflow.

Reponse from Dialogflow

Observação: Se precisar de ajuda para configurar o Dialogflow, siga o guia do Agente Pré-configurado do SmallTalk .

5. Enviar respostas do Dialogflow para o Facebook

A última peça desse quebra-cabeça é pegar a resposta do Dialogflow e enviá-la ao usuário por meio do bot do Facebook Messenger.

A Messages API da Vonage cuidará de tudo isso para nós.

Crie um novo arquivo na controllers pasta chamada vonage.js e preencha-o com o conteúdo deste arquivo: controllers/vonage.js.

A principal função exportada neste arquivo se chama messageResponder.

Esta função utiliza a Biblioteca de Cliente Vonage para Node.js para enviar uma mensagem de volta ao usuário.

É passado à função um objeto chamado message que conterá o id do usuário para quem a resposta será enviada e o dialogflowResponse (o texto a ser enviado na mensagem).

const messageResponder = async (message) => {

  vonage.messages.send(
    new MessengerText({
      text: message.dialogflowResponse,
      to: process.env.FACEBOOK_PAGE_ID, // Who the message goes to
      from: $FB_RECIPIENT_ID, // Who the message comes from. The PSID of the user you want to reply to. The FB_RECIPIENT_ID is the PSID of the Facebook User you are messaging. This value is the from.id value you received in the inbound messenger event on your Inbound Message Webhook URL.
    }),
    (err, data) => {
      if (err) {
        throw new Error(err);
      } else {
        console.log(
          `Replied to ${message.id} with '${message.dialogflowResponse}' (ID: ${
            data.message_uuid
          })`
        );
      }
    }
  );
};

Para utilizar essa messageResponder função, importe-a no routes/index.js arquivo:

No início do arquivo, logo abaixo da require instrução do dialogflow.js arquivo criado anteriormente, adicione o seguinte:

const messageResponder = require('../controllers/vonage');

Em seguida, na inbound função, adicione o seguinte código logo acima da ctx.status = 200 linha:

messageResponder({ from, dialogflowResponse });
ctx.status = 200;

Como você pode ver, estamos passando um objeto para messageResponder com o conteúdo de from, com a resposta do Dialogflow ES.

Isso fará com que o objeto passado para a função fique assim:

{
  from: '111111111111', // ID of the user on Facebook that sent the message
  dialogflowResponse: 'Greetings!'
}

6. Teste seu bot do Facebook Messenger

Tudo está pronto. Com esse arquivo final, o ciclo foi fechado, e qualquer mensagem recebida deverá receber uma resposta imediatamente. Agora você está pronto para testar seu bot do Facebook Messenger e sua integração com o Dialogflow.

Mais uma vez, envie uma mensagem pela sua página do Facebook. A resposta do Dialogflow deve aparecer agora na mesma janela!

Conclusão

Parabéns! Seguindo as etapas deste tutorial, você criou um bot para o Facebook Messenger com a tecnologia do Dialogflow, com a ajuda da Messages API do Vonage.

O pré-montado Small Talk é ótimo para testes, mas o próximo passo aqui seria criar seu próprio agente, capaz de transmitir algum conhecimento que seja útil para o usuário.

Para obter mais informações sobre como começar a criar agentes no Dialogflow, você pode consultar os guias práticos do Dialogflow.

Com o código deste tutorial, você já tem a integração entre o Facebook e o Dialoglow, então pode seguir em frente e criar o agente mais poderoso de todos os tempos.

Se você tiver alguma dúvida sobre esta postagem do blog, sinta-se à vontade para entrar em contato conosco na nossa Slack da Comunidade Vonage ou nos enviar uma mensagem no X, anteriormente conhecido como Twitter.

Leituras complementares

Compartilhar:

https://a.storyblok.com/f/270183/250x250/d0444194cd/martyn.png
Martyn DaviesEx-funcionários da Vonage

Ex-diretor de Formação de Desenvolvedores da Vonage. Com experiência como desenvolvedor criativo, gerente de produto e organizador de hack days, Martyn atua como defensor da tecnologia desde 2012, tendo trabalhado anteriormente no setor de radiodifusão e em grandes gravadoras. Ele se dedica a capacitar e empoderar desenvolvedores em todo o mundo.