Telegram bot for uploading images to Payload CMS Media library (multi-tenant)
Find a file
2026-03-01 10:13:48 +00:00
src fix: remove unnecessary backslash before em-dash in tenant list, verbose health check logging 2026-03-01 10:13:48 +00:00
.env.example chore: project scaffold with deps and config 2026-03-01 09:17:07 +00:00
.gitignore chore: project scaffold with deps and config 2026-03-01 09:17:07 +00:00
ecosystem.config.cjs feat: add entry point with graceful shutdown and PM2 config 2026-03-01 09:26:20 +00:00
package.json chore: project scaffold with deps and config 2026-03-01 09:17:07 +00:00
pnpm-lock.yaml chore: project scaffold with deps and config 2026-03-01 09:17:07 +00:00
README.md docs: add README with setup and deployment instructions 2026-03-01 09:27:13 +00:00
tsconfig.json chore: project scaffold with deps and config 2026-03-01 09:17:07 +00:00

Telegram Media Upload Bot

Telegram Bot zum Hochladen von Bildern in die Payload CMS Media-Bibliothek mit Multi-Tenant-Unterstützung.

Features

  • Bilder als Foto oder Dokument (Originalqualität) hochladen
  • Album/Bulk-Upload (bis zu 10 Bilder)
  • Multi-Tenant: Ziel-Tenant per Inline-Keyboard wählen
  • Automatische Bildverarbeitung (responsive Größen) durch Payload CMS
  • User-Whitelist (nur autorisierte Telegram-User)
  • Rate-Limiting (10 Uploads/Minute pro User)
  • Token-Caching mit Auto-Refresh

Setup

# Dependencies installieren
pnpm install

# .env konfigurieren
cp .env.example .env
# → Werte in .env eintragen (Bot-Token, Payload-Credentials, User-IDs)

Telegram Bot erstellen

  1. @BotFather in Telegram öffnen
  2. /newbot senden
  3. Token in .env als TELEGRAM_BOT_TOKEN eintragen
  4. Eigene Telegram User-ID in ALLOWED_USER_IDS eintragen
  5. Optional: /setcommands beim BotFather:
    start - Bot starten und Hilfe anzeigen
    tenant - Ziel-Tenant wechseln
    list - Letzte Uploads anzeigen
    status - Bot- und API-Status prüfen
    help - Ausführliche Hilfe
    

Entwicklung

pnpm dev          # tsx watch mode
pnpm lint         # TypeScript check
pnpm build        # Kompilieren nach dist/

Production

pnpm build
pm2 start ecosystem.config.cjs
pm2 save
pm2 logs telegram-media-bot

Bot-Befehle

Befehl Beschreibung
/start Begrüßung und Kurzanleitung
/tenant Ziel-Tenant wechseln
/list Letzte 5 Uploads anzeigen
/status Bot- und API-Status
/help Ausführliche Hilfe

Umgebungsvariablen

Variable Pflicht Beschreibung
TELEGRAM_BOT_TOKEN Ja Bot-Token von @BotFather
ALLOWED_USER_IDS Ja Kommaseparierte Telegram User-IDs
PAYLOAD_API_URL Ja Payload API URL (z.B. https://cms.c2sgmbh.de/api)
PAYLOAD_ADMIN_EMAIL Ja Payload Admin E-Mail
PAYLOAD_ADMIN_PASSWORD Ja Payload Admin Passwort
DEFAULT_TENANT_ID Nein Standard-Tenant (Default: 4)
LOG_LEVEL Nein Log-Level: debug, info, warn, error (Default: info)
NODE_ENV Nein Environment (Default: development)

Architektur

src/
├── index.ts              # Entry Point
├── bot.ts                # Grammy Bot + Session + Rate-Limiting
├── config.ts             # Typisierte Konfiguration
├── payload/
│   └── client.ts         # Payload API Client (Login, Upload, Token-Caching)
├── telegram/
│   ├── handlers.ts       # Alle Message- und Command-Handler
│   └── keyboards.ts      # Inline Keyboards (Tenant-Auswahl)
├── middleware/
│   └── auth.ts           # User-Whitelist Middleware
└── utils/
    ├── logger.ts         # Console Logger mit Levels
    └── download.ts       # File Download Helper