Este es un sistema completo de API REST para WhatsApp que permite a múltiples usuarios crear sesiones independientes, obtener sus propias API Keys y enviar mensajes de WhatsApp de forma programática.
- 🔐 Sistema de autenticación con API Keys únicas
- 👥 Múltiples sesiones simultáneas de WhatsApp
- 📱 Interfaz web para gestión de sesiones
- 🔄 Códigos QR automáticos para conexión
- 📨 Envío de mensajes individuales y masivos
- 📎 Envío de archivos multimedia
- 🛡️ Autenticación segura por headers o body
- 📊 Dashboard completo para gestión
- Node.js v18 o superior
- npm o yarn
-
Instalar dependencias:
npm install
-
Iniciar el servidor:
npm start # o npm run dev -
Acceder a la aplicación:
- Abrir navegador en:
http://localhost:3001
- Abrir navegador en:
- Ve a
http://localhost:3001 - Ingresa un nombre único para tu sesión (ej: "MiEmpresa", "Personal")
- Haz clic en "Crear Sesión"
- Guarda tu API Key - la necesitarás para todas las peticiones
- Escanea el código QR con WhatsApp
- ¡Listo! Tu sesión está conectada
- Ve a
http://localhost:3001/dashboard - Desde aquí puedes:
- Enviar mensajes individuales
- Enviar archivos multimedia
- Realizar envíos masivos
- Ver el estado de tu conexión
- Reiniciar tu sesión
Todas las peticiones a la API requieren autenticación. Puedes enviar tu API Key de dos formas:
Opción 1: Header (Recomendado)
X-API-Key: tu_api_key_aquiOpción 2: En el body
{
"apiKey": "tu_api_key_aqui",
"number": "+1234567890",
"message": "Hola"
}POST /api/send/message
Content-Type: application/json
X-API-Key: tu_api_key
{
"number": "+1234567890",
"message": "Hola, este es un mensaje de prueba"
}Respuesta:
{
"success": true,
"message": "Mensaje enviado correctamente",
"to": "+1234567890"
}POST /api/send/bulk
Content-Type: application/json
X-API-Key: tu_api_key
{
"numbers": ["+1234567890", "+0987654321", "+1122334455"],
"message": "Mensaje masivo para todos"
}Respuesta:
{
"success": true,
"results": [
{
"number": "+1234567890",
"status": "enviado",
"error": null
},
{
"number": "+0987654321",
"status": "error",
"error": "Número inválido"
}
]
}POST /api/send/media
Content-Type: application/json
X-API-Key: tu_api_key
{
"number": "+1234567890",
"mediaUrl": "https://ejemplo.com/imagen.jpg",
"caption": "Descripción opcional del archivo"
}GET /api/session/info
X-API-Key: tu_api_keyRespuesta:
{
"sessionName": "MiEmpresa",
"isReady": true,
"hasQR": false
}POST /api/session/restart
X-API-Key: tu_api_key# Enviar mensaje individual
curl -X POST http://localhost:3001/api/send/message \
-H "Content-Type: application/json" \
-H "X-API-Key: tu_api_key_aqui" \
-d '{
"number": "+1234567890",
"message": "Hola desde cURL"
}'
# Envío masivo
curl -X POST http://localhost:3001/api/send/bulk \
-H "Content-Type: application/json" \
-H "X-API-Key: tu_api_key_aqui" \
-d '{
"numbers": ["+1234567890", "+0987654321"],
"message": "Mensaje masivo desde cURL"
}'-
Configurar Headers:
Content-Type: application/jsonX-API-Key: tu_api_key_aqui
-
Body (raw JSON):
{ "number": "+1234567890", "message": "Mensaje desde Postman" }
const axios = require('axios');
const apiKey = 'tu_api_key_aqui';
const baseURL = 'http://localhost:3001';
// Enviar mensaje individual
async function enviarMensaje(numero, mensaje) {
try {
const response = await axios.post(`${baseURL}/api/send/message`, {
number: numero,
message: mensaje
}, {
headers: {
'X-API-Key': apiKey,
'Content-Type': 'application/json'
}
});
console.log('Mensaje enviado:', response.data);
} catch (error) {
console.error('Error:', error.response.data);
}
}
// Envío masivo
async function envioMasivo(numeros, mensaje) {
try {
const response = await axios.post(`${baseURL}/api/send/bulk`, {
numbers: numeros,
message: mensaje
}, {
headers: {
'X-API-Key': apiKey,
'Content-Type': 'application/json'
}
});
console.log('Envío masivo completado:', response.data);
} catch (error) {
console.error('Error:', error.response.data);
}
}
// Usar las funciones
enviarMensaje('+1234567890', 'Hola desde Node.js');
envioMasivo(['+123', '+456', '+789'], 'Mensaje masivo desde Node.js');import requests
import json
api_key = 'tu_api_key_aqui'
base_url = 'http://localhost:3001'
headers = {
'Content-Type': 'application/json',
'X-API-Key': api_key
}
# Enviar mensaje individual
def enviar_mensaje(numero, mensaje):
data = {
'number': numero,
'message': mensaje
}
response = requests.post(
f'{base_url}/api/send/message',
headers=headers,
json=data
)
return response.json()
# Envío masivo
def envio_masivo(numeros, mensaje):
data = {
'numbers': numeros,
'message': mensaje
}
response = requests.post(
f'{base_url}/api/send/bulk',
headers=headers,
json=data
)
return response.json()
# Usar las funciones
result = enviar_mensaje('+1234567890', 'Hola desde Python')
print(result)
result = envio_masivo(['+123', '+456'], 'Mensaje masivo desde Python')
print(result)- API Keys únicas: Cada sesión tiene su propia API Key
- Sesiones aisladas: Las sesiones no pueden acceder a datos de otras
- Validación de entrada: Todos los datos son validados antes del procesamiento
- Rate limiting: Pausa automática entre mensajes para evitar spam
- Límites de WhatsApp: Respeta los límites de WhatsApp para evitar bloqueos
- Uso responsable: No uses la API para spam o mensajes no solicitados
- Backup de API Keys: Guarda tus API Keys de forma segura
- Reconexión: Si WhatsApp se desconecta, usa el endpoint de restart
- Formato de números: Usa formato internacional (+código_país + número)
- Verifica que estés enviando la API Key en el header
X-API-Keyo en el body
- Ve al dashboard y verifica el estado de conexión
- Si es necesario, reinicia la sesión
- Asegúrate de usar formato internacional:
+1234567890 - No incluyas espacios, guiones o paréntesis
- Verifica que el servidor esté ejecutándose
- Revisa la consola del servidor para errores
- Intenta reiniciar la sesión
El servidor muestra logs detallados:
🚀 Servidor API de WhatsApp ejecutándose en http://localhost:3001
📱 Abre tu navegador en: http://localhost:3001
🔑 Crea una nueva sesión para obtener tu API Key
QR Code recibido para usuario abc123
Cliente de WhatsApp listo para usuario abc123
GET /api/admin/sessionsMuestra todas las sesiones activas (útil para monitoreo).
- Webhooks para recibir mensajes
- Programación de mensajes
- Plantillas de mensajes
- Estadísticas de envío
- Base de datos persistente
- Autenticación con usuarios y contraseñas
Si tienes problemas o preguntas:
- Revisa esta documentación
- Verifica los logs del servidor
- Prueba con el dashboard web primero
- Verifica que WhatsApp esté conectado
¡Disfruta usando la API de WhatsApp! 🎉