
Como enviar uma mensagem pelo WhatsApp com o Node.js (Tutorial)
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:
Opcional - Account do WhatsApp Business para recursos e funcionalidades adicionais
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 8000Saí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.
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”.
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=8000O 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
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-fa16f5c685cfNeste 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?
Inscreva-se no Boletim Informativo para Desenvolvedores
Siga-nos no X (antigo Twitter) para ficar por dentro das novidades
Assista aos tutoriais no nosso canal do YouTube
Conecte-se conosco na página de desenvolvedores da Vonage no LinkedIn
Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.