From 48c5ff31dc6b9bd6c287dfa2673d204fa59925e4 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 27 Jan 2026 19:22:40 +0000 Subject: [PATCH] docs: add unified Telegram bots documentation - Document all 3 existing bots (stats, ollama, project-doc) - Include common architecture, environment variables, and deployment - Add comprehensive plan for telegram-calendar-bot - Cover features, commands, database schema, and message formatters https://claude.ai/code/session_01LwmhvhKpEsvVtY1ZKhYu6f --- docs/TELEGRAM_BOTS.md | 724 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 724 insertions(+) create mode 100644 docs/TELEGRAM_BOTS.md diff --git a/docs/TELEGRAM_BOTS.md b/docs/TELEGRAM_BOTS.md new file mode 100644 index 000000000..7bb3c3145 --- /dev/null +++ b/docs/TELEGRAM_BOTS.md @@ -0,0 +1,724 @@ +# 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 | πŸ“‹ Geplant | + +## 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] +```