# Telegram Bots Dokumentation aller Telegram-Bots im ManaCore Monorepo. ## Übersicht | Bot | Port | Zweck | Status | |-----|------|-------|--------| | [telegram-stats-bot](#telegram-stats-bot) | 3300 | Analytics & Statistiken von Umami | βœ… Aktiv | | [telegram-ollama-bot](#telegram-ollama-bot) | 3301 | Lokale LLM-Inferenz via Ollama | βœ… Aktiv | | [telegram-project-doc-bot](#telegram-project-doc-bot) | 3302 | Projektdokumentation & Blogpost-Generierung | βœ… Aktiv | | [telegram-calendar-bot](#telegram-calendar-bot) | 3303 | Kalender-Termine & Erinnerungen | 🚧 In Entwicklung | | [telegram-contacts-bot](#telegram-contacts-bot) | 3304 | Kontaktsuche & Geburtstags-Erinnerungen | 🚧 In Entwicklung | ## Gemeinsame Architektur Alle Bots teilen dieselbe technische Basis: ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Telegram Bot Service β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ NestJS 10 β”‚ β”‚ Telegraf β”‚ β”‚ nestjs-telegraf β”‚ β”‚ β”‚ β”‚ Framework β”‚ β”‚ Library β”‚ β”‚ Integration β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Standard Module Structure β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ src/main.ts # Entry point β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ src/app.module.ts # Root module β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ src/health.controller.ts # /health endpoint β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ src/config/ # Configuration β”‚ β”‚ β”‚ β”‚ └── src/bot/ # Bot commands β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Gemeinsame Features - **Health Endpoint**: Alle Bots haben `/health` fΓΌr Monitoring - **User-BeschrΓ€nkung**: Optional via `TELEGRAM_ALLOWED_USERS` - **Docker Support**: Dockerfile fΓΌr Container-Deployment - **Graceful Shutdown**: Sauberes Beenden bei SIGTERM ### Standard Environment Variables ```env # Alle Bots PORT=33xx # Port fΓΌr Health-Endpoint TELEGRAM_BOT_TOKEN=xxx # Bot Token von @BotFather TELEGRAM_ALLOWED_USERS=123,456 # Optional: Erlaubte User IDs NODE_ENV=production # Environment ``` --- ## telegram-stats-bot **Zweck:** Liefert Analytics und Statistiken von Umami (stats.mana.how) via Telegram. ### Features - Übersicht aller App-Statistiken (30 Tage) - TΓ€gliche und wΓΆchentliche Reports - Echtzeit-Besucherzahlen - Registrierte User-Statistiken - Automatische geplante Reports ### Commands | Command | Beschreibung | |---------|--------------| | `/start` | Hilfe anzeigen | | `/stats` | Übersicht aller Apps (letzte 30 Tage) | | `/today` | Heutige Statistiken | | `/week` | Wochenstatistiken | | `/realtime` | Aktive Besucher jetzt | | `/users` | Registrierte User-Statistiken | | `/help` | VerfΓΌgbare Commands anzeigen | ### Scheduled Reports | Report | Schedule | Timezone | |--------|----------|----------| | TΓ€glich | 09:00 | Europe/Berlin | | WΓΆchentlich | Montag 09:00 | Europe/Berlin | ### Environment Variables ```env PORT=3300 TZ=Europe/Berlin # Telegram TELEGRAM_BOT_TOKEN=xxx TELEGRAM_CHAT_ID=xxx # Chat fΓΌr automatische Reports # Umami UMAMI_API_URL=http://umami:3000 UMAMI_USERNAME=admin UMAMI_PASSWORD=xxx # Database (optional, fΓΌr User-Counts) DATABASE_URL=postgresql://... ``` ### Projekt-Struktur ``` services/telegram-stats-bot/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ main.ts β”‚ β”œβ”€β”€ app.module.ts β”‚ β”œβ”€β”€ health.controller.ts β”‚ β”œβ”€β”€ config/ β”‚ β”‚ └── configuration.ts # Website IDs β”‚ β”œβ”€β”€ bot/ β”‚ β”‚ β”œβ”€β”€ bot.module.ts β”‚ β”‚ β”œβ”€β”€ bot.service.ts # Send messages β”‚ β”‚ └── bot.update.ts # Command handlers β”‚ β”œβ”€β”€ umami/ β”‚ β”‚ └── umami.service.ts # Umami API client β”‚ β”œβ”€β”€ analytics/ β”‚ β”‚ β”œβ”€β”€ analytics.service.ts # Data aggregation β”‚ β”‚ └── formatters.ts # Message formatters β”‚ β”œβ”€β”€ users/ β”‚ β”‚ └── users.service.ts # User count from auth DB β”‚ └── scheduler/ β”‚ └── report.scheduler.ts # Cron jobs └── Dockerfile ``` ### Neue Website hinzufΓΌgen In `src/config/configuration.ts`: ```typescript export const WEBSITE_IDS: Record = { 'new-app-webapp': 'uuid-from-umami', }; export const DISPLAY_NAMES: Record = { 'new-app-webapp': 'New App', }; ``` --- ## telegram-ollama-bot **Zweck:** Lokale LLM-Inferenz via Ollama auf dem Mac Mini Server. ### Features - Chat mit lokalem LLM (Gemma 3 4B Standard) - Mehrere Konversations-Modi - Dynamischer Modell-Wechsel - Chat-Verlauf (10 Nachrichten Kontext) - Automatisches Message-Splitting bei langen Antworten ### Commands | Command | Beschreibung | |---------|--------------| | `/start` | Hilfe anzeigen | | `/help` | Hilfe anzeigen | | `/models` | VerfΓΌgbare Modelle auflisten | | `/model [name]` | Modell wechseln | | `/mode [modus]` | System-Prompt Γ€ndern | | `/clear` | Chat-Verlauf lΓΆschen | | `/status` | Ollama-Status prΓΌfen | ### Modi | Modus | Beschreibung | |-------|--------------| | `default` | Allgemeiner Assistent | | `classify` | Text-Klassifizierung | | `summarize` | Zusammenfassungen | | `translate` | Übersetzungen | | `code` | Programmier-Hilfe | ### Environment Variables ```env PORT=3301 # Telegram TELEGRAM_BOT_TOKEN=xxx TELEGRAM_ALLOWED_USERS=123,456 # Optional # Ollama OLLAMA_URL=http://localhost:11434 OLLAMA_MODEL=gemma3:4b OLLAMA_TIMEOUT=120000 # Timeout in ms ``` ### Projekt-Struktur ``` services/telegram-ollama-bot/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ main.ts β”‚ β”œβ”€β”€ app.module.ts β”‚ β”œβ”€β”€ health.controller.ts β”‚ β”œβ”€β”€ config/ β”‚ β”‚ └── configuration.ts # System Prompts β”‚ β”œβ”€β”€ bot/ β”‚ β”‚ β”œβ”€β”€ bot.module.ts β”‚ β”‚ └── bot.update.ts # Command handlers β”‚ └── ollama/ β”‚ β”œβ”€β”€ ollama.module.ts β”‚ └── ollama.service.ts # Ollama API client └── Dockerfile ``` ### Deployment **Option 1: Docker** ```yaml telegram-ollama-bot: image: ghcr.io/memo-2023/telegram-ollama-bot:latest environment: TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN} OLLAMA_URL: http://host.docker.internal:11434 ``` **Option 2: Nativ (empfohlen fΓΌr Performance)** ```bash cd ~/projects/manacore-monorepo/services/telegram-ollama-bot pnpm build TELEGRAM_BOT_TOKEN=xxx pnpm start:prod ``` --- ## telegram-project-doc-bot **Zweck:** Sammelt Projektdokumentation (Fotos, Sprachnotizen, Text) und generiert automatisch BlogbeitrΓ€ge. ### Features - Multi-Projekt-Verwaltung - Foto-Speicherung in S3 - Automatische Voice-Transkription (Whisper) - Text-Notizen - AI-Blogpost-Generierung (mehrere Stile) - Markdown-Export ### Commands | Command | Beschreibung | |---------|--------------| | `/start` | Hilfe anzeigen | | `/help` | Hilfe anzeigen | | `/new [Name]` | Neues Projekt erstellen | | `/projects` | Alle Projekte auflisten | | `/switch [ID]` | Projekt wechseln | | `/status` | Status des aktiven Projekts | | `/archive` | Projekt archivieren | | `/generate` | Blogbeitrag generieren | | `/generate [Stil]` | Mit bestimmtem Stil generieren | | `/styles` | VerfΓΌgbare Stile anzeigen | | `/export` | Letzte Generierung als Datei | ### Blog-Stile | Stil | Beschreibung | |------|--------------| | `casual` | Locker & persΓΆnlich | | `formal` | Professionell & sachlich | | `tutorial` | Anleitung mit Schritten | | `diary` | Tagebuch-Stil | ### User Flow ``` 1. /new Gartenhaus-Renovierung β†’ Projekt erstellen 2. πŸ“· Foto senden β†’ Wird gespeichert 3. 🎀 Sprachnotiz senden β†’ Transkribiert + gespeichert 4. "Heute das Fundament gegossen" β†’ Text-Notiz 5. /status β†’ Übersicht 6. /generate tutorial β†’ Blogbeitrag erstellen 7. /export β†’ Als .md Datei ``` ### Environment Variables ```env PORT=3302 # Telegram TELEGRAM_BOT_TOKEN=xxx TELEGRAM_ALLOWED_USERS=123,456 # Database DATABASE_URL=postgresql://postgres:postgres@localhost:5432/projectdoc # Storage (MinIO) S3_ENDPOINT=http://localhost:9000 S3_REGION=us-east-1 S3_ACCESS_KEY=minioadmin S3_SECRET_KEY=minioadmin S3_BUCKET=projectdoc-storage # AI - Transcription OPENAI_API_KEY=sk-xxx # AI - Generation LLM_PROVIDER=ollama # ollama oder openai OLLAMA_URL=http://localhost:11434 OLLAMA_MODEL=gemma3:4b ``` ### Projekt-Struktur ``` services/telegram-project-doc-bot/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ main.ts β”‚ β”œβ”€β”€ app.module.ts β”‚ β”œβ”€β”€ health.controller.ts β”‚ β”œβ”€β”€ config/ β”‚ β”‚ └── configuration.ts # Blog-Stile β”‚ β”œβ”€β”€ database/ β”‚ β”‚ β”œβ”€β”€ database.module.ts β”‚ β”‚ └── schema.ts # Drizzle schema β”‚ β”œβ”€β”€ bot/ β”‚ β”‚ β”œβ”€β”€ bot.module.ts β”‚ β”‚ └── bot.update.ts # Command handlers β”‚ β”œβ”€β”€ project/ β”‚ β”‚ └── project.service.ts # Projekt CRUD β”‚ β”œβ”€β”€ media/ β”‚ β”‚ β”œβ”€β”€ media.service.ts # Foto/Voice/Text β”‚ β”‚ └── storage.service.ts # S3 Upload/Download β”‚ β”œβ”€β”€ transcription/ β”‚ β”‚ └── transcription.service.ts # Whisper API β”‚ └── generation/ β”‚ └── generation.service.ts # Blogpost AI β”œβ”€β”€ drizzle/ β”œβ”€β”€ drizzle.config.ts └── Dockerfile ``` ### Datenbank-Schema ``` projects β”œβ”€β”€ id (UUID) β”œβ”€β”€ telegram_user_id (INT) β”œβ”€β”€ name (TEXT) β”œβ”€β”€ description (TEXT) β”œβ”€β”€ status (TEXT: active, archived, completed) β”œβ”€β”€ created_at, updated_at media_items β”œβ”€β”€ id (UUID) β”œβ”€β”€ project_id (UUID FK) β”œβ”€β”€ type (TEXT: photo, voice, text) β”œβ”€β”€ storage_key (TEXT) β”œβ”€β”€ caption (TEXT) β”œβ”€β”€ transcription (TEXT) β”œβ”€β”€ ai_description (TEXT) β”œβ”€β”€ metadata (JSONB) β”œβ”€β”€ telegram_file_id (TEXT) β”œβ”€β”€ order_index (INT) β”œβ”€β”€ created_at generations β”œβ”€β”€ id (UUID) β”œβ”€β”€ project_id (UUID FK) β”œβ”€β”€ style (TEXT) β”œβ”€β”€ content (TEXT - Markdown) β”œβ”€β”€ pdf_key (TEXT) β”œβ”€β”€ is_latest (BOOL) β”œβ”€β”€ created_at ``` --- ## telegram-calendar-bot **Zweck:** Telegram-Integration fΓΌr die Calendar-App mit Termin-Abfragen, Quick-Add und Erinnerungen. **Status:** πŸ“‹ Geplant Siehe [Plan](#telegram-calendar-bot-plan) unten fΓΌr Details. --- ## Entwicklung ### Neuen Bot erstellen 1. **Bot bei Telegram registrieren:** - Γ–ffne @BotFather in Telegram - Sende `/newbot` - WΓ€hle Namen und Username - Kopiere den Token 2. **Service erstellen:** ```bash mkdir -p services/telegram-{name}-bot/src cd services/telegram-{name}-bot pnpm init ``` 3. **Dependencies installieren:** ```bash pnpm add @nestjs/core @nestjs/common @nestjs/config nestjs-telegraf telegraf pnpm add -D @types/node typescript ``` 4. **Standard-Struktur anlegen:** ``` src/ β”œβ”€β”€ main.ts β”œβ”€β”€ app.module.ts β”œβ”€β”€ health.controller.ts β”œβ”€β”€ config/ β”‚ └── configuration.ts └── bot/ β”œβ”€β”€ bot.module.ts └── bot.update.ts ``` ### Lokale Entwicklung ```bash # Bot starten (aus dem Service-Verzeichnis) pnpm start:dev # Health Check testen curl http://localhost:33xx/health ``` ### Docker Build ```bash # Aus dem Monorepo-Root docker build -f services/telegram-{name}-bot/Dockerfile -t telegram-{name}-bot . ``` --- ## Deployment ### Mac Mini Server Alle Bots laufen auf dem Mac Mini Server. Status prΓΌfen: ```bash ssh mana-server ./scripts/mac-mini/status.sh ``` ### Docker Compose ```yaml # docker-compose.macmini.yml services: telegram-stats-bot: image: ghcr.io/memo-2023/telegram-stats-bot:latest restart: always ports: - "3300:3300" environment: PORT: 3300 TELEGRAM_BOT_TOKEN: ${TELEGRAM_STATS_BOT_TOKEN} # ... telegram-ollama-bot: image: ghcr.io/memo-2023/telegram-ollama-bot:latest restart: always ports: - "3301:3301" environment: PORT: 3301 TELEGRAM_BOT_TOKEN: ${TELEGRAM_OLLAMA_BOT_TOKEN} OLLAMA_URL: http://host.docker.internal:11434 # ... telegram-project-doc-bot: image: ghcr.io/memo-2023/telegram-project-doc-bot:latest restart: always ports: - "3302:3302" environment: PORT: 3302 TELEGRAM_BOT_TOKEN: ${TELEGRAM_PROJECT_DOC_BOT_TOKEN} # ... ``` ### Health Checks ```bash # Alle Bots prΓΌfen curl http://localhost:3300/health # stats-bot curl http://localhost:3301/health # ollama-bot curl http://localhost:3302/health # project-doc-bot ``` --- ## Monitoring ### Telegram Notifications Bei Fehlern werden Benachrichtigungen via telegram-stats-bot gesendet: ```bash # Health Check Script ./scripts/mac-mini/health-check.sh ``` ### Logs ```bash # Docker Logs docker logs manacore-telegram-stats-bot -f docker logs manacore-telegram-ollama-bot -f docker logs manacore-telegram-project-doc-bot -f # Native Service Logs journalctl -u telegram-ollama-bot -f ``` --- ## telegram-calendar-bot Plan ### Übersicht Ein Telegram-Bot fΓΌr die Calendar-App, der Termin-Abfragen, Quick-Add und Erinnerungen via Telegram ermΓΆglicht. ### Geplante Commands | Command | Beschreibung | |---------|--------------| | `/start` | Hilfe & Account-VerknΓΌpfung | | `/help` | VerfΓΌgbare Commands | | `/today` | Heutige Termine | | `/tomorrow` | Morgige Termine | | `/week` | WochenΓΌbersicht | | `/next [n]` | NΓ€chste n Termine (default: 5) | | `/add [text]` | Schnell-Termin via natΓΌrliche Sprache | | `/calendars` | Kalender-Übersicht | | `/remind` | Erinnerungseinstellungen | | `/link` | Account verknΓΌpfen | | `/unlink` | Account trennen | ### Geplante Features 1. **Termin-Abfragen** - TΓ€gliche/wΓΆchentliche Übersicht - Suche nach Terminen - Kalender-Filter 2. **Quick-Add** - NatΓΌrliche Spracheingabe: "Meeting morgen um 14 Uhr" - Strukturiertes Format: `/add Meeting | 2024-12-20 14:00 | 1h` - Kalender-Auswahl 3. **Erinnerungen via Telegram** - Push-Notifications fΓΌr anstehende Termine - Konfigurierbare Vorlaufzeit - Morgen-Briefing (tΓ€gliche Zusammenfassung) 4. **Account-VerknΓΌpfung** - OAuth oder Token-basierte VerknΓΌpfung - Mehrere Telegram-Accounts pro User mΓΆglich ### Technische Architektur ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ telegram-calendar-bot (Port 3303) β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Bot β”‚ β”‚ Calendar β”‚ β”‚ Reminder β”‚ β”‚ β”‚ β”‚ Module β”‚ β”‚ Client β”‚ β”‚ Scheduler β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Calendar Backend API (Port 3016) β”‚ β”‚ β”‚ β”‚ GET /api/v1/events?start=...&end=... β”‚ β”‚ β”‚ β”‚ POST /api/v1/events β”‚ β”‚ β”‚ β”‚ GET /api/v1/calendars β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ PostgreSQL (calendar database) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Environment Variables (geplant) ```env PORT=3303 # Telegram TELEGRAM_BOT_TOKEN=xxx TELEGRAM_ALLOWED_USERS=123,456 # Optional # Calendar Backend CALENDAR_API_URL=http://localhost:3016 MANA_CORE_AUTH_URL=http://localhost:3001 # Database (fΓΌr User-VerknΓΌpfungen) DATABASE_URL=postgresql://... # Reminder Settings REMINDER_CHECK_INTERVAL=60000 # Check every minute MORNING_BRIEFING_TIME=07:00 # Daily briefing time MORNING_BRIEFING_TIMEZONE=Europe/Berlin ``` ### Projekt-Struktur (geplant) ``` services/telegram-calendar-bot/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ main.ts β”‚ β”œβ”€β”€ app.module.ts β”‚ β”œβ”€β”€ health.controller.ts β”‚ β”œβ”€β”€ config/ β”‚ β”‚ └── configuration.ts β”‚ β”œβ”€β”€ database/ β”‚ β”‚ β”œβ”€β”€ database.module.ts β”‚ β”‚ └── schema.ts # telegram_users Tabelle β”‚ β”œβ”€β”€ bot/ β”‚ β”‚ β”œβ”€β”€ bot.module.ts β”‚ β”‚ └── bot.update.ts # Command handlers β”‚ β”œβ”€β”€ calendar/ β”‚ β”‚ β”œβ”€β”€ calendar.module.ts β”‚ β”‚ └── calendar.client.ts # Calendar API client β”‚ β”œβ”€β”€ reminder/ β”‚ β”‚ β”œβ”€β”€ reminder.module.ts β”‚ β”‚ └── reminder.scheduler.ts # Cron fΓΌr Erinnerungen β”‚ └── nlp/ β”‚ β”œβ”€β”€ nlp.module.ts β”‚ └── nlp.service.ts # NatΓΌrliche Spracheingabe β”œβ”€β”€ drizzle/ β”œβ”€β”€ drizzle.config.ts └── Dockerfile ``` ### Datenbank-Schema (geplant) ```sql -- telegram_users: VerknΓΌpfung Telegram <-> ManaCore CREATE TABLE telegram_users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), telegram_user_id BIGINT UNIQUE NOT NULL, telegram_username VARCHAR(255), mana_user_id UUID NOT NULL, access_token TEXT, refresh_token TEXT, token_expires_at TIMESTAMP WITH TIME ZONE, settings JSONB DEFAULT '{}', is_active BOOLEAN DEFAULT true, linked_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- telegram_reminder_settings: User-spezifische Einstellungen CREATE TABLE telegram_reminder_settings ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), telegram_user_id BIGINT REFERENCES telegram_users(telegram_user_id), default_reminder_minutes INTEGER DEFAULT 15, morning_briefing_enabled BOOLEAN DEFAULT false, morning_briefing_time TIME DEFAULT '07:00', timezone VARCHAR(100) DEFAULT 'Europe/Berlin', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); ``` ### Message Formatters (Beispiele) **TagesΓΌbersicht:** ``` πŸ“… Deine Termine fΓΌr heute (Mo, 27. Januar) πŸ”΅ 09:00 - 10:00 | Team Standup πŸ“ Zoom Meeting 🟒 12:30 - 13:30 | Mittagessen mit Lisa πŸ“ Restaurant Bella πŸ”΄ 15:00 - 16:30 | Projekt Review πŸ“ Konferenzraum A πŸ“ Q4 Ergebnisse prΓ€sentieren ─────────────── 3 Termine heute ``` **Quick-Add BestΓ€tigung:** ``` βœ… Termin erstellt! πŸ“Œ Meeting mit Team πŸ“… Morgen, 14:00 - 15:00 πŸ“ BΓΌro πŸ—“οΈ Kalender: Arbeit /undo zum RΓΌckgΓ€ngig machen ``` **Erinnerung:** ``` ⏰ Erinnerung in 15 Minuten πŸ“Œ Team Standup ⏱️ 09:00 - 10:00 πŸ“ Zoom Meeting [Zum Termin] [Verschieben] [Absagen] ```