Files
math2-platform/backend/TELEGRAM_ARCHITECTURE.md
Renato bc43c9e772
Some checks failed
Test Suite / test-backend (push) Has been cancelled
Test Suite / test-frontend (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / coverage-check (push) Has been cancelled
🎓 Initial commit: Math2 Platform - Plataforma de Álgebra Lineal PRO
 Características:
- 45 ejercicios universitarios (Basic → Advanced)
- Renderizado LaTeX profesional
- IA generativa (Z.ai/DashScope)
- Docker 9 servicios
- Tests 123/123 pasando
- Seguridad enterprise (JWT, XSS, Rate limiting)

🐳 Infraestructura:
- Next.js 14 + Node.js 20
- PostgreSQL 15 + Redis 7
- Docker Compose completo
- Nginx + SSL ready

📚 Documentación:
- 5 informes técnicos completos
- README profesional
- Scripts de deployment automatizados

Estado: Producción lista 
2026-03-31 11:27:11 -03:00

18 KiB

Telegram Notifications Module - Architecture Diagram

System Architecture

┌─────────────────────────────────────────────────────────────────────────┐
│                         Math Platform Backend                            │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                           │
│  ┌─────────────────────────────────────────────────────────────────────┐│
│  │                     Application Modules                              ││
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐           ││
│  │  │   User   │  │ Exercise │  │ Progress │  │ Ranking  │           ││
│  │  │  Module  │  │  Module  │  │  Module  │  │  Module  │           ││
│  │  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘           ││
│  │       │             │             │             │                   ││
│  │       └─────────────┴─────────────┴─────────────┘                   ││
│  │                             │                                       ││
│  │                             ▼                                       ││
│  │              ┌───────────────────────────┐                          ││
│  │              │  Notification Service     │                          ││
│  │              │  - sendNotification()     │                          ││
│  │              │  - notifyNewUser()        │                          ││
│  │              │  - notifySystemError()    │                          ││
│  │              │  - notifyModuleCompleted()│                          ││
│  │              └─────────────┬─────────────┘                          ││
│  │                            │                                        ││
│  └────────────────────────────┼──────────────────────────────────────┘┘
│                               │
│                               ▼
│  ┌────────────────────────────────────────────────────────────────────┐│
│  │                    Notification Layer                               ││
│  │                                                                      ││
│  │  ┌──────────────────────────────────────────────────────────────┐  ││
│  │  │              Message Templates (templates/)                  │  ││
│  │  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │  ││
│  │  │  │ Alert        │  │ Progress     │  │ Achievement  │       │  ││
│  │  │  │ Templates    │  │ Templates    │  │ Templates    │       │  ││
│  │  │  └──────────────┘  └──────────────┘  └──────────────┘       │  ││
│  │  │                                                              │  ││
│  │  │  - System Notifications    - User Registration              │  ││
│  │  │  - Error Notifications     - Exercise Completion            │  ││
│  │  │  - Security Alerts         - Module Completion              │  ││
│  │  │  - Performance Metrics     - Achievements                   │  ││
│  │  └──────────────────────────────────────────────────────────────┘  ││
│  │                              │                                     ││
│  │                              ▼                                     ││
│  │  ┌──────────────────────────────────────────────────────────────┐  ││
│  │  │             Telegram Client (telegram.client.ts)            │  ││
│  │  │                                                              │  ││
│  │  │  - sendMessage()    - sendPhoto()    - sendDocument()       │  ││
│  │  │  - getMe()           - healthCheck()  - Error Handling       │  ││
│  │  │                                                              │  ││
│  │  │              Axios HTTP Client with Retry Logic              │  ││
│  │  └──────────────────────────────────────────────────────────────┘  ││
│  └──────────────────────────────┬───────────────────────────────────┘┘
│                                   │
│                                   ▼
│  ┌────────────────────────────────────────────────────────────────────┐│
│  │                      Queue & Worker Layer                           ││
│  │                                                                      ││
│  │  ┌──────────────────────────────────────────────────────────────┐  ││
│  │  │        Bull Queue (notification-sender.worker.ts)            │  ││
│  │  │                                                              │  ││
│  │  │  ┌────────────┐  ┌────────────┐  ┌────────────┐             │  ││
│  │  │  │   Queue    │  │  Worker    │  │  Retry     │             │  ││
│  │  │  │ Management │  │ Processor  │  │ Logic      │             │  ││
│  │  │  └────────────┘  └────────────┘  └────────────┘             │  ││
│  │  │                                                              │  ││
│  │  │  - Job Priority     - Rate Limiting    - Auto Cleanup       │  ││
│  │  │  - Concurrency      - Exponential Backoff                  │  ││
│  │  └──────────────────────────────────────────────────────────────┘  ││
│  └──────────────────────────────┬───────────────────────────────────┘┘
│                                   │
└───────────────────────────────────┼───────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                            External Services                             │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                           │
│  ┌──────────────────────┐        ┌──────────────────────┐              │
│  │                       │        │                       │              │
│  │    Redis Queue        │        │   Telegram API        │              │
│  │                       │        │                       │              │
│  │  - Job Storage        │        │  - Bot API            │              │
│  │  - State Management   │        │  - Message Delivery   │              │
│  │  - Retry Tracking     │        │  - Webhooks (optional)│              │
│  │                       │        │                       │              │
│  └──────────────────────┘        └──────────────────────┘              │
│                                                                           │
└───────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
                         ┌─────────────────────┐
                         │                     │
                         │   Admin Telegram    │
                         │       Chat          │
                         │                     │
                         │  - Notifications    │
                         │  - Alerts           │
                         │  - Reports          │
                         │                     │
                         └─────────────────────┘

Data Flow

1. Notification Creation Flow

User Action
    │
    ▼
Module Event (e.g., User Registration)
    │
    ▼
Notification Service
    │
    ├─→ Create Notification in Database
    │       (status: PENDING)
    │
    ├─→ Format Message (Templates)
    │       - HTML formatting
    │       - Data sanitization
    │       - Emoji addition
    │
    └─→ Queue for Processing
            (Bull Queue + Redis)

2. Notification Processing Flow

Worker Process
    │
    ├─→ Get Job from Queue
    │       (Priority-based)
    │
    ├─→ Update Attempt Count
    │
    ├─→ Send via Telegram Client
    │       │
    │       ├─→ Success?
    │       │       │
    │       │       ├─→ Yes: Mark as SENT
    │       │       │       - Update DB
    │       │       │       - Log success
    │       │       │       - Remove from queue
    │       │       │
    │       │       └─→ No: Handle Error
    │       │               - Check retry limit
    │       │               - Exponential backoff
    │       │               - Requeue or mark FAILED
    │       │
    │       └─→ HTTP Request
    │               (Axios with retry)
    │
    └─→ Next Job

3. Error Handling Flow

Error Occurs
    │
    ▼
Error Type Detection
    │
    ├─→ Rate Limit (429)?
    │       └─→ Wait retry_after seconds
    │           └─→ Retry
    │
    ├─→ Client Error (400, 403)?
    │       └─→ Log and mark FAILED
    │           └─→ Don't retry
    │
    ├─→ Server Error (500, 502)?
    │       └─→ Exponential backoff
    │           └─→ Retry up to limit
    │
    └─→ Network Error?
            └─→ Exponential backoff
                └─→ Retry up to limit

Component Details

1. Configuration (config/telegram.ts)

Responsibilities:

  • Bot token management
  • Admin chat ID storage
  • API endpoint configuration
  • Priority filtering
  • Validation

Key Functions:

  • getConfig() - Get current configuration
  • getBotToken() - Get bot token
  • getAdminChatId() - Get admin chat ID
  • shouldSendByPriority() - Check priority filter
  • healthCheck() - Validate configuration

2. Telegram Client (telegram/telegram.client.ts)

Responsibilities:

  • HTTP communication with Telegram API
  • Request retry logic
  • Error handling and mapping
  • Message formatting

Key Functions:

  • sendMessage() - Send text message
  • sendPhoto() - Send photo
  • sendDocument() - Send document
  • getMe() - Get bot info
  • healthCheck() - Test connection

Error Handling:

  • 429: Rate limiting (wait and retry)
  • 401: Invalid token (don't retry)
  • 403: Bot blocked (don't retry)
  • 400: Bad request (don't retry)
  • 500+: Server errors (retry with backoff)

3. Templates (telegram/templates/)

Alert Template:

  • System notifications
  • Error alerts
  • Daily summaries
  • Security alerts

Progress Template:

  • Exercise completion
  • Module completion
  • Streak updates
  • Progress summaries

Achievement Template:

  • Badge unlocks
  • Ranking milestones
  • Top 10 entries
  • Achievement summaries

4. Notification Service (notification.service.ts)

Responsibilities:

  • Business logic for notifications
  • Queue management
  • Statistics tracking
  • Convenience methods

Key Functions:

  • sendNotification() - Generic notification sender
  • notifyNewUser() - User registration alert
  • notifySystemError() - Error reporting
  • notifyModuleCompleted() - Module completion
  • notifyTop10Entry() - Top 10 achievement
  • getStatistics() - Get notification stats

5. Worker (workers/notification-sender.worker.ts)

Responsibilities:

  • Background job processing
  • Queue management
  • Retry logic
  • Job cleanup

Key Functions:

  • queueNotification() - Add job to queue
  • retryFailedNotifications() - Retry failed jobs
  • getQueueStats() - Get queue statistics
  • pauseQueue() / resumeQueue() - Queue control

Queue Configuration:

  • Concurrency: 3 jobs
  • Rate limit: 20 messages/minute
  • Max retries: 3
  • Backoff: Exponential
  • Cleanup: 24h (completed), 7d (failed)

Security Considerations

1. No End-User Exposure

  • Telegram completely hidden from users
  • Bot token never exposed in API
  • Admin chat ID is server-side only

2. Input Sanitization

  • HTML escaping in templates
  • Length limits on messages
  • Truncation of long content

3. Rate Limiting

  • Built-in rate limiting (20/min)
  • Respects Telegram API limits
  • Queue prevents spam

4. Error Filtering

  • Sensitive data not in errors
  • Stack traces truncated
  • User data anonymized

Performance Optimizations

1. Async Processing

  • All notifications queued
  • Non-blocking for main thread
  • Background worker processing

2. Connection Pooling

  • Axios instance reuse
  • HTTP/2 support
  • Keep-alive connections

3. Efficient Queue

  • Redis for fast operations
  • Job prioritization
  • Batch processing support

4. Smart Retry

  • Exponential backoff
  • Respect retry-after header
  • Skip non-retryable errors

Monitoring & Observability

1. Logging

  • Structured logging with Winston
  • Correlation IDs for tracking
  • Debug level for development

2. Metrics

  • Queue depth
  • Processing time
  • Success/failure rates
  • Rate limit hits

3. Health Checks

  • Telegram connection
  • Queue status
  • Worker status
  • Redis connection

4. Statistics

  • Total notifications
  • By type
  • By status
  • Today's counts

Scalability Considerations

Horizontal Scaling

  • Worker can run on multiple servers
  • Redis shared queue
  • No local state

Vertical Scaling

  • Configurable concurrency
  • Adjustable rate limits
  • Memory-efficient queue

Load Handling

  • Queue absorbs spikes
  • Priority ensures important messages first
  • Rate limiting prevents overload

Summary

The Telegram Notifications Module provides:

  1. Complete Implementation: All components in place
  2. Production Ready: Error handling, retry, monitoring
  3. Well Architected: Separation of concerns, modular design
  4. Scalable: Async processing, queue-based
  5. Secure: No user exposure, input sanitization
  6. Maintainable: Clear structure, good documentation
  7. Testable: Test scripts, health checks
  8. Observable: Logging, metrics, statistics

The module is ready for production use and can handle high notification loads while maintaining reliability and performance.