
Cómo enviar un mensaje de WhatsApp con Node.js (Tutorial)
Tiempo de lectura: 5 minutos
Introducción
En este tutorial, aprenderás a crear una aplicación que envíe y reciba mensajes mediante la API de mensajes de Vonage Messages APIy el SDK de nodo de Vonagey el WhatsApp Sandbox. El código del repositorio de GitHub para este proyecto se encuentra aquí.
Requisitos previos
Para empezar a enviar mensajes de WhatsApp con Node.js, necesitarás los siguientes requisitos previos:
Vonage API Account To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Opcional Cuenta WhatsApp Business para funciones y características adicionales
Crear una aplicación de Vonage
Los pasos a continuación te muestran cómo crear una nueva aplicación de Vonage desde el panel. Como alternativa, puedes usar la CLI para crear una aplicación.
Crear una nueva aplicación
Ir a Tus Applications en el panel de Vonage y haz clic para crear una nueva aplicación.
Generar credenciales
Cree un par de claves pública y privada para la autenticación de la API. Haz clic en "Generar clave pública y privada" para obtener la clave privada. El archivo se descargará en la ubicación que hayas configurado en tu navegador para los archivos descargados. Asegúrate de añadir ese archivo a la carpeta del proyecto.
Capacidad de la API de Messages
Iniciar una instancia de ngrok Tunelling
Si no has utilizado ngrok antes, puedes empezar aquí. He añadido los pasos para ejecutar una instancia debajo de la imagen.
Ejecute el siguiente comando para iniciar una instancia de túnel ngrok.
ngrok http 8000Salida
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 vuelta en el panel de la API de Vonage, en tus aplicaciones, activa la opción Mensajes en capacidades y establece la URL pública de tu servidor desde ngrok como el punto final para mensajes entrantes y eventos. Debería verse como: https://xyz.ngrok.com/inbound para entrada y https://xyz.ngrok.com/status para estado. Si desea aprender más sobre webhooks, está en nuestra documentación de Vonage.
Messages capability
Configurar el entorno de pruebas de WhatsApp de la API de Messages API de Vonage
Utilizaremos el WhatsApp Sandbox para este tutorial, que es un entorno de pruebas. Puede utilizar una cuenta de WhatsApp para empresas una vez que esté listo para poner su aplicación en producción. Además de WhatsApp, puedes integrar esta aplicación con canales como Viber, Facebook Messenger e Instagram con unas pocas líneas de código y ajustes de configuración.
Crear un Messages API WhatsApp Sandbox
Vaya a la página Página del entorno de pruebas de la API de Messages API de Vonage y configura tu Messages API WhatsApp Sandbox.
Añadir WebHooks
Añada la URL generada por ngrok a su aplicación y el Mensajes API Sandboxañade /webhooks/inbound-message y /webhooks/message-status, respectivamente, y haz clic en 'Guardar webhooks'.
Webhooks
Variables de entorno
Debemos crear un .env filey añadir las variables de entorno necesarias. Ya hemos generado algunas de ellas antes, pero explicaré dónde encontrar cada una.
# Vonage API keys
VONAGE_APPLICATION_ID=
VONAGE_PRIVATE_KEY=
VONAGE_WHATSAPP_NUMBER=
VONAGE_API_SIGNATURE_SECRET=
# Server port (optional; default is 8000)
PORT=8000El sitio VONAGE_WHATSAPP_NUMBER se encuentra en la Página Sandbox de Mensajes. Es el número al que se enviará un mensaje de WhatsApp. Para las pruebas del sandbox, el número es 14157386102.
La dirección VONAGE_APPLICATION_ID puede encontrarse dentro de la aplicación que haya creado.
Application id
La dirección VONAGE_PRIVATE_KEY es la ruta al archivo private.key que se generó al crear la aplicación.
VONAGE_API_SIGNATURE_SECRET es el secreto utilizado para firmar la solicitud que corresponde al secreto de firma asociado a la api_key incluida en las reivindicaciones JWT. Puede identificar su secreto de firma en los Configuración del panel.
> NOTA: Cuando introduzca un número de teléfono, no utilice el signo + ni el 00; empiece por el prefijo del país, por ejemplo 16600700000
El puerto es el que nuestro servidor express estará ejecutando. Yo lo he puesto a 8000, pero siéntete libre de cambiarlo.
Instalar las dependencias
Utilizaremos el SDK de servidor de Vonage, SDK de mensajes de Vonage para Node.js, Vonage JWT SDK para Node.js, Expressy Dotenv. Instálelos con este comando:
npm install @vonage/server-sdk @vonage/messages @vonage/jwt express dotenv Implementar la lógica del código
Cree un server.js archivo.
Requerir e inicializar los paquetes que utilizaremos para este proyecto.
// 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());Inicializa un nuevo cliente de Vonage; los valores leídos de process.env son las variables de entorno que añadiste previamente a tu archivo .env file.
La dirección apiHost proporcionada es la URL del entorno sandbox para el servicio de mensajería de Vonage.
const vonage = new Vonage(
{
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: process.env.VONAGE_PRIVATE_KEY,
},
{
apiHost: "https://messages-sandbox.nexmo.com",
}
);Tenemos una función de verificación JWT para verificar si el mensaje entrante proviene de Vonage. Puedes obtener más información sobre verificar la solicitud.
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');
}
La conversación se iniciará cuando el usuario envíe un mensaje de WhatsApp. Creemos una función para enviar un mensaje de WhatsApp al usuario con el texto "Mensaje recibido".
// 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
);
}
};Crea un /inbound endpoint para manejar el mensaje entrante, el que se agregó como webhook en el panel de Vonage. Registra cuando se recibe un mensaje y lo envía de vuelta al usuario permitido listado en el Sandbox diciendo: "Mensaje recibido".
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.");
}
});Crear un /status endpoint que registre los datos de la solicitud, compruebe si el usuario está autorizado mediante un JWT y, a continuación, responda con un mensaje de éxito.
app.post('/status', (req, res) => {
console.log(req.body);
verifyJWT(req);
console.log('Received status update');
res.status(200).send();
});El servidor escucha en el puerto especificado.
// Start the server
const PORT = process.env.PORT || 8000;
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
}); Pruebe su código
A continuación, puede probar a enviar un mensaje desde su sandbox de WhatsApp a su número de WhatsApp permitido. Desde el directorio donde está guardado el archivo, ejecute:
> $ node src/server.js
Server is listening on port 8000
Received message from <Number>
JWT verified
Message sent with messageUUID: e295613c-a2fc-40f4-a9ae-fa16f5c685cfEn este punto, la respuesta del mensaje de prueba debería aparecer en WhatsApp en su dispositivo permitido. Ahora, puede probar diferentes tipos de mensajes y aprender más sobre Conceptos de WhatsApp.
Conclusión
WhatsApp se utiliza mucho en todo el mundo; consulté la Play Store en mi teléfono Android y es una de las aplicaciones más descargadas en el Reino Unido. Cuando volví a mi país natal, Brasil, de vacaciones, me di cuenta de lo mucho que se extendía entre los negocios; podía comprar açaí, ponerme en contacto con el servicio de atención al cliente, comprobar si los sitios estaban abiertos y hablar con amigos y familiares. Las posibilidades de aprender a enviar y recibir mensajes por WhatsApp son infinitas.
¿Tienes alguna pregunta o algo que compartir? Únete a la conversación en Slack de la comunidad de Vonagey mantente actualizado con el Boletín para desarrolladoressíguenos en X (antes Twitter)suscríbete a nuestro canal de YouTube para ver tutoriales en video, y sigue la página de página para desarrolladores de Vonage en LinkedInun espacio para que los desarrolladores aprendan y se conecten con la comunidad. Mantente conectado, comparte tu progreso y entérate de las últimas noticias, consejos y eventos para desarrolladores.
