https://a.storyblok.com/f/270183/69948/1591b1d6fa/node-js_whatsapp.png

Como enviar uma mensagem pelo WhatsApp com o Node.js (Tutorial)

Publicado em March 13, 2025

Tempo de leitura: 5 minutos

Introdução

Neste tutorial, você aprenderá a criar uma aplicação que envia e recebe mensagens usando a API de mensagens da Vonage Messages API, o SDK do Vonage para Nodee o WhatsApp Sandbox. O código do repositório do GitHub para este projeto está disponível aqui

Pré-requisitos

Para começar a enviar mensagens pelo WhatsApp com o Node.js, você precisará dos seguintes pré-requisitos:

Criar uma aplicação da Vonage

As etapas a seguir mostram como criar uma nova aplicação da Vonage a partir do painel de controle. Como alternativa, você pode usar a CLI para criar um aplicativo.

Criar um novo aplicativo

Acesse “Seus Applications” no painel da Vonage e clique para criar um novo aplicativo.

Gerar credenciais

Crie um par de chaves pública e privada para autenticação na API. Clique em “Gerar chave pública e privada” para obter a chave privada. O arquivo será baixado para o local definido no seu navegador para arquivos baixados. Certifique-se de adicionar esse arquivo à pasta do projeto.

Recursos da Messages API

Iniciar uma instância de tunelamento do ngrok

Se você ainda não usou o ngrok, pode começar por aqui. Adicionei as etapas para executar uma instância abaixo da imagem. 

Execute o comando a seguir para iniciar uma instância de tunelamento do ngrok.

ngrok http 8000

Saída 

ngrok                                                                 (Ctrl+C to quit)
                                                                                                 
👋 Goodbye tunnels, hello Agent Endpoints: https://ngrok.com/r/aep                               
                                                                                                 
Session Status                online                                                             
Account                       plan name                                         
Version                       3.19.1                                                             
Region                        Europe (eu)                                                        
Latency                       31ms                                                               
Web Interface                 http://127.0.0.1:4040                                              
Forwarding                    https://xyz.ngrok.app -> http://localhost:8000            
                                                                                                 
Connections                   ttl     opn     rt1     rt5     p50     p90                        
                              14      0       0.03    0.03    6.10    7.79   

Configurar Webhooks

De volta ao Painel da API da Vonage, na seção “Aplicativos”, ative a opção “Mensagens” em “Recursos” e defina a URL pública do seu servidor do ngrok como o endpoint para mensagens e eventos recebidos. Deve ficar assim: https://xyz.ngrok.com/inbound para mensagens recebidas e https://xyz.ngrok.com/status para status. Se você quiser saber mais sobre webhooks, consulte nossa documentação da Vonage.

the inbound URL contains the ngrok URL with /inbound appended. The Status URL contains the ngrok URL with /status appended.Messages capability

Configurar o ambiente de testes do WhatsApp da Messages API do Vonage

Vamos usar o WhatsApp Sandbox para este tutorial, que é um ambiente de testes. Você pode usar uma account comercial do WhatsApp quando estiver pronto para colocar seu aplicativo em produção. Além do WhatsApp, você pode integrar esse aplicativo a canais como Viber, Facebook Messenger e Instagram com apenas algumas linhas de código e ajustes de configuração.

Criar uma Messages API no WhatsApp Sandbox

Acesse a página do ambiente de testes da Messages API do Vonage e configure sua Messages API do WhatsApp no Sandbox.

Adicionar WebHooks

Adicione a URL gerada pelo ngrok ao seu aplicativo e à Sandbox da Messages API, acrescente /webhooks/inbound-message e /webhooks/message-status, respectivamente, e clique em “Salvar webhooks”.

Two fields, one for inbound and outbound URLs.Webhooks

Variáveis de ambiente

Precisamos criar um .env filee adicionar as variáveis de ambiente necessárias. Já geramos algumas delas anteriormente, mas vou explicar onde encontrar cada uma.

# Vonage API keys

VONAGE_APPLICATION_ID=

VONAGE_PRIVATE_KEY=

VONAGE_WHATSAPP_NUMBER=

VONAGE_API_SIGNATURE_SECRET=

# Server port (optional; default is 8000)

PORT=8000

O VONAGE_WHATSAPP_NUMBER está na página de sandbox de mensagens. É o número para o qual você enviará uma mensagem pelo WhatsApp. Para testes na área de testes, o número é 14157386102.

O VONAGE_APPLICATION_ID pode ser encontrado no aplicativo que você criou.

Application ID found on the application.Application id

O VONAGE_PRIVATE_KEY é o caminho para o private.key arquivo que foi gerado quando você criou seu aplicativo.

VONAGE_API_SIGNATURE_SECRET é o segredo usado para assinar a solicitação, que corresponde ao segredo de assinatura associado ao api_key incluído nas reivindicações do JWT. Você pode identificar seu segredo de assinatura na configurações do painel.

> OBSERVAÇÃO: Ao inserir um número de telefone, não use um + ou 00 no início; comece com o código do país, como 16600700000

Essa é a porta na qual nosso servidor expresso estará rodando. Eu a configurei como 8000, mas fique à vontade para alterá-la.

Instale as dependências

Vamos usar o SDK do servidor da Vonage, SDK do Vonage Messages para Node.js, Vonage JWT SDK para Node.js, Express, e Dotenv. Instale-os com este comando:

npm install @vonage/server-sdk @vonage/messages @vonage/jwt express dotenv

Implementar a lógica do código

Crie um server.js arquivo.

Instalamos e inicializamos os pacotes que usaremos neste projeto.

// src/server.js

require("dotenv").config();

const express = require("express");

const { Vonage } = require("@vonage/server-sdk");

const { WhatsAppText } = require("@vonage/messages");

const { verifySignature } = require("@vonage/jwt");

const app = express();

app.use(express.json());

Inicialize um novo cliente Vonage; os valores lidos em process.env são as variáveis de ambiente que você adicionou anteriormente ao seu .env file.

O apiHost aqui fornecida é a URL do ambiente de teste do serviço de mensagens da Vonage.

const vonage = new Vonage(
 {
   applicationId: process.env.VONAGE_APPLICATION_ID,
   privateKey: process.env.VONAGE_PRIVATE_KEY,
 },
 {
   apiHost: "https://messages-sandbox.nexmo.com",
 }
);

Temos uma função de verificação de JWT para verificar se a mensagem recebida veio da Vonage. Você pode saber mais sobre verificação da solicitação

const verifyJWT = (req) => {
  // Verify if the incoming message came from Vonage
  const jwtToken = req.headers.authorization.split(" ")[1];
  if(!verifySignature(jwtToken, process.env.VONAGE_API_SIGNATURE_SECRET)) {
    console.error("Unauthorized request");
    throw new Error('Not a messages API request');
  }

  console.log('JWT verified');
}

A conversa será iniciada quando o usuário enviar uma mensagem pelo WhatsApp. Vamos criar uma função para enviar uma mensagem de resposta ao usuário pelo WhatsApp com o texto “Mensagem recebida”.

// Function to send a message via Vonage

const sendMessage = async (to_number) => {

 const text = "Message received."; // The reply message

 try {

   const { messageUUID } = await vonage.messages.send(

     new WhatsAppText({

       from: process.env.VONAGE_WHATSAPP_NUMBER,

       to: to_number,

       text: text,

     })

   );

   console.log(`Message sent with messageUUID: ${messageUUID}`);

 } catch (error) {

   console.error(

     "Error sending message:",

     error.response ? error.response.body : error.message

   );

 }

};

Crie um /inbound ponto de extremidade para processar a mensagem recebida, aquela adicionada como webhook no painel da Vonage. Ele registra quando uma mensagem é recebida e envia de volta ao usuário autorizado listado no Sandbox a mensagem: “Mensagem recebida”.

app.post("/inbound", async (req, res) => {

 const { from: requesterNumber } = req.body;

 console.log(`Received message from ${requesterNumber}`);

 try {

   // Send the "Message received" reply

   await sendMessage(requesterNumber);

   res.status(200).send(); // Acknowledge the received message

 } catch (error) {

   console.error("Error handling incoming message:", error);

   res.status(500).send("An error occurred while processing the message.");

 }

});

Crie um /status endpoint que registre os dados da solicitação, verifique se o usuário está autorizado por meio de um JWT e, em seguida, responda com uma mensagem de sucesso.

app.post('/status', (req, res) => {

  console.log(req.body);

  verifyJWT(req);

  console.log('Received status update');

  res.status(200).send();

});

O servidor fica à escuta na porta especificada.

// Start the server

const PORT = process.env.PORT || 8000;

app.listen(PORT, () => {

 console.log(`Server is listening on port ${PORT}`);

});

Teste seu código

Depois disso, você pode testar o envio de uma mensagem da sua sandbox do WhatsApp para o seu número do WhatsApp incluído na lista de permissões. No diretório onde o arquivo está salvo, execute:

> $ node src/server.js
Server is listening on port 8000
Received message from <Number>
JWT verified
Message sent with messageUUID: e295613c-a2fc-40f4-a9ae-fa16f5c685cf

Neste momento, a resposta à mensagem de teste deve aparecer no WhatsApp no seu dispositivo autorizado. Agora, você pode testar diferentes tipos de mensagens e saber mais sobre Concepts do WhatsApp.

Conclusão

O WhatsApp é amplamente utilizado em todo o mundo; verifiquei na Play Store do meu celular Android e ele é um dos aplicativos mais baixados no Reino Unido. Quando voltei ao meu país natal, o Brasil, para passar férias, percebi o quanto ele se popularizou entre as empresas; eu podia comprar açaí, entrar em contato com o atendimento ao cliente, verificar se os estabelecimentos estavam abertos e conversar com amigos e familiares. As possibilidades de aprender a enviar e receber mensagens pelo WhatsApp são infinitas. 

Tem alguma dúvida ou quer compartilhar o que está criando?

Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.

Leitura complementar

Compartilhar:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroRepresentante de Desenvolvedores