AlertIT es un servicio de notificaciones meteorológicas que detecta condiciones de lluvia o viento fuertes y envía alertas automáticamente por WhatsApp. El proyecto demuestra integración con APIs externas, procesamiento en tiempo real y automatización de tareas utilizando un stack moderno y ampliamente demandado en la industria.
- Consumo de APIs externas (WeatherAPI) usando WebClient.
- Procesamiento de datos y reglas de negocio para evaluar condiciones climáticas.
- Automatización de tareas mediante Spring Scheduler.
- Envío de notificaciones por WhatsApp usando Twilio API.
- Arquitectura pensada para testing automatizado y contenedorización (Docker) — pendiente de implementación.
- Java 17+
- Spring Boot
- WebClient
- Spring Scheduler
- Twilio WhatsApp API
- Springdoc OpenAPI (Swagger)
- Docker (pendiente)
- Testing automatizado (pendiente)
- Java 17+
- Maven 3.8+
- API Key de WeatherAPI
- Cuenta en Twilio (SID, Auth Token, número sandbox de WhatsApp)
- Conexión a Internet
- (Opcional) Docker para contenerización
-
Clonar el repositorio
git clone https://github.com/tu-usuario/AlertIT.git cd AlertIT -
Configurar variables de entorno
WEATHER_API_KEY=tu_api_key_de_weatherapi TWILIO_ACCOUNT_SID=tu_sid TWILIO_AUTH_TOKEN=tu_auth_token TWILIO_WHATSAPP_FROM=whatsapp:+14155238886 WHATSAPP_TO=whatsapp:+54911XXXXXXXXImportante:
El número TWILIO_WHATSAPP_FROM corresponde al sandbox de Twilio. El número WHATSAPP_TO debe estar registrado en tu sandbox.
-
Instalar dependencias
mvn clean install -
Ejecutar la aplicación
mvn spring-boot:run
La aplicación iniciará en: http://localhost:8080
- Obtiene información actualizada del clima (viento, lluvia, tormenta) usando WebClient.
- Trabaja con datos reales en tiempo real.
- Procesa los datos recibidos y determina si existen condiciones severas según criterios definidos para Bahía Blanca (adaptable a otras ciudades).
- Demuestra aplicación de lógica de negocio sobre datos externos.
- Cuando se cumplen las condiciones configuradas, se genera una alerta interna lista para ser enviada al usuario.
- Integra Twilio para enviar mensajes automáticamente a un número configurado.
- Ejecución periódica (Scheduler)
- Un proceso automático se ejecuta cada 1 minuto (configurable; recomendado cada 6 horas) para:
- Consultar el clima.
- Analizar los datos.
- Enviar notificaciones si es necesario.
No requiere interacción del usuario, pero la ubicación de la consulta se puede cambiar mediante el endpoint correspondiente.
Arquitectura hexagonal (DDD):
AlertIT
│
├───application
│ ├───scheduler
│ └───services
├───domain
│ ├───enums
│ ├───models
│ ├───ports
│ │ └───outbound
│ └───services
├───infrastructure
│ ├───adapters
│ │ └───outbound
│ │ ├───notification
│ │ └───weather
│ │ └───client
│ │ └───dto
│ ├───config
└───presentation
├───dto
└───rest
Todos los endpoints de AlertIT están bajo:
/api/v1/weather
- Obtener clima actual
-
GET:
/current?location=Bahia+Blanca -
Parámetro: location (nombre de la ciudad o ubicación)
-
Respuesta: WeatherData con información actual del clima
{ "temperature": 21.3, "condition": "Soleado", "location": "Bahia Blanca", "region": "Buenos Aires", "humidity": 56, "windSpeed": 8.3, "extremeTemperature": false }
- Obtener coordenadas de una dirección (geocoding)
-
GET
/geocoding?location=Bahía Blanca -
Parámetro: address (dirección a geolocalizar)
-
Respuesta: GeocodingData con latitud y longitud
{ "latitude": -38.72, "longitude": -62.28, "formattedAddress": "Bahia Blanca, Argentina", "city": "Bahia Blanca", "region": "Buenos Aires", "country": "Argentina", "validLocation": true }
- Procesar alerta para una ubicación
-
GET
/alert?location=Bahía Blanca -
Parámetro: address (dirección a evaluar)
-
Respuesta: Map<String, Object> con:
{ "alertasActivas": [], "recomendaciones": [], "clima": { "temperature": 21.3, "condition": "Soleado", "location": "Bahia Blanca", "region": "Buenos Aires", "humidity": 56, "windSpeed": 8.3, "extremeTemperature": false }, "nivelAlerta": "VERDE", "geocoding": { "latitude": -38.72, "longitude": -62.28, "formattedAddress": "Bahia Blanca, Argentina", "city": "Bahia Blanca", "region": "Buenos Aires", "country": "Argentina", "validLocation": true }, "fuente": "Sistema de Alertas - Criterios Bahía Blanca", "resumen": "Sin alertas meteorológicas activas.", "timestamp": "2025-11-29T16:53:33.417009700" }
- En desarrollo.
- Próximamente: testing automatizado y contenedorización con Docker.