Automated system that retrieves Bitcoin price and sentiment, sending daily alerts via Telegram and email using NestJS, n8n, and Docker.
CryptoAlert es un sistema completo de monitoreo y alertas para criptomonedas construido con NestJS y Nx. El proyecto incluye tres microservicios principales que trabajan en conjunto para proporcionar funcionalidades de scraping, notificaciones por email y Telegram.
crypto-alert/
├── apps/
│ ├── mailer/ # Servicio de envío de emails
│ ├── telegram/ # Servicio de notificaciones Telegram
│ └── scraper/ # Servicio de web scraping
├── n8n_data/ # Datos de configuración de n8n
├── docker-compose.yml # Configuración de contenedores
└── package.json # Dependencias del workspace
git clone <repository-url>
cd crypto-alert
pnpm install
Crea un archivo .env
en la raíz del proyecto:
# Resend API (para emails)
RESEND_API_KEY=your_resend_api_key_here
# Telegram Bot Token
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
# Redis Configuration (opcional, valores por defecto)
REDIS_HOST=redis
REDIS_PORT=6379
# Playwright Configuration
PLAYWRIGHT_HEADLESS=true
docker-compose up -d
Esto iniciará todos los servicios:
Para desarrollo individual de cada servicio:
# Servicio de emails
pnpm nx serve mailer
# Servicio de Telegram
pnpm nx serve telegram
# Servicio de scraping
pnpm nx serve scraper
Endpoint: GET http://localhost:3002/api/scraper
Extrae datos del índice de miedo y codicia de criptomonedas desde alternative.me.
{
"Now": 70,
"Yesterday": 73,
"Last week": 66,
"Last month": 61,
"image": "https://alternative.me/crypto/fear-and-greed-index.png"
}
curl http://localhost:3002/api/scraper
Endpoint: POST http://localhost:3000/api/mailer/send
Envía emails utilizando la API de Resend.
{
"from": "contact@your-domain.com",
"to": ["example@gmail.com"],
"subject": "Alerta de Criptomonedas",
"html": "<h1>Índice de Miedo y Codicia</h1><p>El valor actual es: 70</p>"
}
{
"id": "text-uuid"
}
curl -X POST http://localhost:3000/api/mailer/send \
-H "Content-Type: application/json" \
-d '{
"from": "contact@your-domain.com",
"to": ["example@gmail.com"],
"subject": "Test",
"html": "test de n8n"
}'
Endpoint: POST http://localhost:3001/api/telegram/send-message
Envía mensajes a través de un bot de Telegram.
{
"chatId": "123456789",
"text": "¡Alerta! El índice de miedo y codicia es: 70"
}
{
"ok": true,
"result": {
"message_id": 123,
"from": {...},
"chat": {...},
"date": 1234567890,
"text": "¡Alerta! El índice de miedo y codicia es: 70"
}
}
curl -X POST http://localhost:3001/api/telegram/send-message \
-H "Content-Type: application/json" \
-d '{
"chatId": "123123",
"text": "hi iam automated message"
}'
El proyecto incluye n8n para automatizar workflows. Accede a la interfaz web en:
http://localhost:5678
# Ejecutar todos los tests
pnpm nx run-many -t test
# Linting
pnpm nx run-many -t lint
# Build de todos los proyectos
pnpm nx run-many -t build
# Ver gráfico de dependencias
pnpm nx graph
# Construir imágenes individuales
pnpm nx docker-build mailer
pnpm nx docker-build telegram
pnpm nx docker-build scraper
# Ver logs de un servicio específico
docker compose logs -f scraper
# Reiniciar un servicio
docker compose restart mailer
El proyecto incluye configuración de GitHub Actions para CI/CD automático.
# Todos los servicios
docker compose logs
# Servicio específico
docker compose logs scraper
# Seguir logs en tiempo real
docker compose logs -f
GET http://localhost:3002/api/scraper
GET http://localhost:3000/health
(si implementado)GET http://localhost:3001/health
(si implementado)# Configuración de Playwright
PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=false
# Configuración de n8n
N8N_BASIC_AUTH_ACTIVE=false
N8N_PROTOCOL=http
N8N_HOST=0.0.0.0
N8N_PORT=5678
# Configuración de Redis
REDIS_PASSWORD=your_redis_password
Cada servicio tiene su propio Dockerfile
que puedes modificar según tus necesidades:
apps/mailer/Dockerfile
apps/telegram/Dockerfile
apps/scraper/Dockerfile
git checkout -b feature/AmazingFeature
)git commit -m 'Add some AmazingFeature'
)git push origin feature/AmazingFeature
)Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE
para más detalles.
Si tienes problemas o preguntas:
CryptoAlert - Sistema de Monitoreo y Alertas de Criptomonedas
Construido con ❤️ usando NestJS, Nx y Docker