Una interfaz segura para la API WAHA local que proporciona autenticación mediante clave API de 256 bits.
WAHA Secure API es una interfaz segura que actúa como intermediario entre aplicaciones externas e Internet y la API WAHA local. Proporciona una capa de autenticación mediante una clave API de 256 bits para proteger el acceso a la funcionalidad de envío de mensajes de WhatsApp.
- Python 3.8 o superior
- API WAHA funcionando en la red local
- Conexión a Internet (para la API externa)
- Asegúrate de tener Python 3.8+ instalado
- Configura las variables de entorno en el archivo
.env:PUB_WAHA_KEY=tu_clave_api_de_256_bits PUB_WAHA_PORT=22100 WAHA_API_URL=http://tu_ip_local:3000/api
Reemplaza:
tu_clave_api_de_256_bitscon una clave segura de 256 bits (puedes generar una con herramientas como OpenSSL)tu_ip_localcon la dirección IP donde se ejecuta la API WAHA
Ejemplo de generación de clave API con OpenSSL:
openssl rand -hex 32# Crear entorno virtual (opcional pero recomendado)
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
# Instalar dependencias
pip install -r requirements.txt# Usando el script de inicio
chmod +x start_server.sh # Solo la primera vez
./start_server.sh
# O directamente con Python
python main.pyEl servidor se iniciará en http://0.0.0.0:22100 (o el puerto que hayas configurado).
Para instalar la API como un servicio del sistema que se inicie automáticamente al arrancar:
# Hacer ejecutable el script de instalación
chmod +x install_service.sh
# Ejecutar el script de instalación
./install_service.shEl script realizará las siguientes acciones:
- Verificará que todos los archivos necesarios existan
- Creará un entorno virtual si no existe
- Instalará el servicio systemd
- Configurará el servicio para iniciarse automáticamente al arrancar el sistema
Una vez instalado, puedes gestionar el servicio con los siguientes comandos:
# Iniciar el servicio
sudo systemctl start waha-secure-api.service
# Detener el servicio
sudo systemctl stop waha-secure-api.service
# Ver el estado del servicio
sudo systemctl status waha-secure-api.service
# Ver los logs del servicio
sudo journalctl -u waha-secure-api.service -fPara desinstalar el servicio:
# Hacer ejecutable el script de desinstalación (si no lo está)
chmod +x uninstall_service.sh
# Ejecutar el script de desinstalación
./uninstall_service.shTodas las solicitudes a la API deben incluir el encabezado X-API-Key con la clave API configurada.
Endpoint: POST /api/sendText
Headers:
Content-Type: application/jsonX-API-Key: tu_clave_api_de_256_bits
Cuerpo de la solicitud:
{
"chatId": "5491122334455@c.us",
"text": "Mensaje de prueba",
"reply_to": null,
"linkPreview": true,
"linkPreviewHighQuality": false,
"session": "default"
}Parámetros:
chatId(obligatorio): ID del chat de WhatsApp (número@c.us para chats individuales)text(obligatorio): Texto del mensaje a enviarreply_to(opcional): ID del mensaje al que se respondelinkPreview(opcional): Habilitar vista previa de enlaces (por defecto: true)linkPreviewHighQuality(opcional): Usar vista previa de alta calidad (por defecto: false)session(opcional): Nombre de la sesión (por defecto: "default")
Respuesta exitosa:
{
"success": true,
"message": "Message sent successfully",
"data": {
"message_id": ""
}
}Nota: El campo message_id puede estar vacío dependiendo de la respuesta de la API WAHA. El éxito de la operación se determina por el campo success: true.
Respuesta de error:
{
"success": false,
"message": "Error: [descripción del error]",
"data": null
}Endpoint: GET /health
Respuesta:
{
"status": "healthy"
}curl -X 'POST' \
'http://tu_servidor:22100/api/sendText' \
-H 'accept: application/json' \
-H 'X-API-Key: abc123def456ghi789jkl012mno345pqr678stu901vwx234yz' \
-H 'Content-Type: application/json' \
-d '{
"chatId": "5491122334455@c.us",
"text": "Mensaje de prueba desde cURL",
"linkPreview": true,
"session": "default"
}'const axios = require('axios');
async function sendWhatsAppMessage() {
try {
const response = await axios.post('http://tu_servidor:22100/api/sendText', {
chatId: '5491122334455@c.us',
text: 'Mensaje de prueba desde Node.js',
linkPreview: true,
session: 'default'
}, {
headers: {
'X-API-Key': 'abc123def456ghi789jkl012mno345pqr678stu901vwx234yz',
'Content-Type': 'application/json'
}
});
console.log('Respuesta:', response.data);
if (response.data.success) {
console.log('Mensaje enviado correctamente. ID:', response.data.data.message_id);
} else {
console.error('Error al enviar mensaje:', response.data.message);
}
} catch (error) {
console.error('Error en la solicitud:', error.message);
}
}
sendWhatsAppMessage();<?php
// Configuración
$apiUrl = 'http://tu_servidor:22100/api/sendText';
$apiKey = 'abc123def456ghi789jkl012mno345pqr678stu901vwx234yz';
// Datos del mensaje
$phoneNumber = '5491122334455'; // Sin el signo +
$message = 'Mensaje de prueba desde PHP';
// Preparar datos para la solicitud
$data = [
'chatId' => $phoneNumber . '@c.us',
'text' => $message,
'linkPreview' => true,
'session' => 'default'
];
// Inicializar cURL
$curl = curl_init();
// Configurar opciones de cURL
curl_setopt_array($curl, [
CURLOPT_URL => $apiUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
],
]);
// Ejecutar la solicitud
$response = curl_exec($curl);
$err = curl_error($curl);
// Cerrar cURL
curl_close($curl);
// Procesar la respuesta
if ($err) {
echo "Error cURL: " . $err;
} else {
$responseData = json_decode($response, true);
if ($responseData['success']) {
echo "Mensaje enviado correctamente. ID: " . $responseData['data']['message_id'];
} else {
echo "Error al enviar mensaje: " . $responseData['message'];
}
}
?>Una vez que el servidor esté en funcionamiento, puedes acceder a la documentación interactiva de la API en:
- Swagger UI: http://localhost:22100/docs
- ReDoc: http://localhost:22100/redoc
- Protección de la clave API: Mantén tu clave API segura y no la compartas públicamente.
- HTTPS: Considera configurar HTTPS para proteger las comunicaciones entre tus aplicaciones y la API.
- Firewall: Configura reglas de firewall para limitar el acceso al servidor de la API.
- Verifica que la API WAHA local esté funcionando correctamente.
- Comprueba que la URL de la API WAHA en el archivo
.envsea correcta. - Asegúrate de que el formato del
chatIdsea correcto (número@c.us).
- Verifica que estás utilizando la clave API correcta en el encabezado
X-API-Key. - Comprueba que la clave API en el archivo
.envcoincida con la que estás utilizando en las solicitudes.
Este error se ha corregido en la versión actual. Si aún lo experimentas:
- Reinicia el servicio:
sudo systemctl restart waha-secure-api.service - Verifica que estés usando la versión más reciente del código
- El mensaje se envía correctamente aunque aparezca este error (verifica en WhatsApp)
