Zum Inhalt springen
Lokale KI lernen
Mission 6

Den Agenten bequem steuern

Dein Agent meldet sich aufs Handy und gehorcht auf Befehle — über einen eigenen Telegram-Bot, mit Zugriffsschutz und Not-Aus aus der Ferne.

Dauer
ca. 60 Minuten
Lernziel
Dein Agent schickt Statusmeldungen auf dein Handy und nimmt Befehle entgegen — abgesichert auf genau dein Konto.
Voraussetzungen
Mission 5 (Ordner-Agent läuft) · Kernmodul 8 (Sicherheitsregeln) · Telegram-Konto (kostenlos)

Warum Telegram — und warum (noch) nicht WhatsApp?

Für die erste Fernsteuerung braucht es eine Schnittstelle, die offiziell, kostenlos und einfach ist. Das ist die Telegram-Bot-Schnittstelle: Bots sind dort ein offizielles Konzept mit dokumentierter API.

WhatsApp — die harte Kursregel: Praktische Projekte laufen ausschliesslich über die offizielle WhatsApp Business Platform (Meta Cloud API) — sie ist auf Geschäftskunden ausgerichtet, mit eigener Registrierung und Kosten je nach Nutzung. Werkzeuge, die dein privates WhatsApp-Konto automatisieren, verletzen die Nutzungsbedingungen und riskieren die Sperrung deines Kontos — sie bleiben in diesem Kurs Risikowissen, niemals Anleitung. WhatsApp ist damit eine mögliche spätere Erweiterung für Fortgeschrittene; heute nehmen wir den sicheren, einfachen Weg.

Schritt 1: Bot erstellen (5 Minuten)

  1. In Telegram den offiziellen @BotFather suchen (verifizierter Bot von Telegram selbst).
  2. /newbot senden, Namen vergeben — du erhältst einen Token (lange Zeichenkette).
  3. Der Token ist ein Geheimnis (KM8: Secrets-Hygiene!). Er kommt gleich in eine Umgebungsvariable, nie ins Skript.

Schritt 2: Deine Chat-ID herausfinden

Der Bot soll nur dir gehorchen. Schreibe deinem neuen Bot in Telegram irgendeine Nachricht, dann (Token einsetzen):

$env:BOT_TOKEN = "HIER-DEIN-TOKEN"
Invoke-RestMethod "https://api.telegram.org/bot$($env:BOT_TOKEN)/getUpdates" | ConvertTo-Json -Depth 8

In der Antwort findest du unter message.chat.id eine Zahl — deine persönliche Chat-ID. Notiere sie.

Schritt 3: Die Fernbedienung

Speichere als fernbedienung.py in KI-Experimente (Konzept: beobachtet den Ausgang deines Mission-5-Agenten und meldet neue Zusammenfassungen; versteht die Befehle /status und /stop):

# fernbedienung.py — Telegram-Anbindung fuer den Ordner-Agenten (Mission 6)
# Meldet neue Zusammenfassungen aufs Handy; Befehle: /status, /stop.
# Sicherheit: reagiert NUR auf deine Chat-ID; Token nur aus Umgebungsvariable.
import json
import os
import time
import urllib.parse
import urllib.request
from pathlib import Path

TOKEN = os.environ.get("BOT_TOKEN", "")
MEINE_CHAT_ID = "HIER-DEINE-CHAT-ID"          # Schritt 2 — als Zeichenkette
AUSGANG = Path.home() / "KI-Experimente" / "Ausgang"
NOT_AUS = Path.home() / "KI-Experimente" / "Eingang" / "STOP.txt"
API = f"https://api.telegram.org/bot{TOKEN}"

def senden(text: str) -> None:
    daten = urllib.parse.urlencode({"chat_id": MEINE_CHAT_ID, "text": text}).encode()
    urllib.request.urlopen(urllib.request.Request(API + "/sendMessage", data=daten), timeout=30)

def befehle_abholen(ab_id: int) -> list:
    with urllib.request.urlopen(f"{API}/getUpdates?timeout=20&offset={ab_id}", timeout=40) as a:
        return json.load(a).get("result", [])

if not TOKEN:
    raise SystemExit("BOT_TOKEN fehlt. Vorher setzen: $env:BOT_TOKEN = \"...\"")

bekannt = {d.name for d in AUSGANG.glob("*.txt")}
naechste_update_id = 0
senden("Fernbedienung aktiv. Befehle: /status, /stop")

while True:
    # 1) Neue Zusammenfassungen melden
    for datei in AUSGANG.glob("*.txt"):
        if datei.name not in bekannt:
            bekannt.add(datei.name)
            senden("Neue Zusammenfassung: " + datei.name)

    # 2) Befehle verarbeiten — ausschliesslich von der eigenen Chat-ID
    for update in befehle_abholen(naechste_update_id):
        naechste_update_id = update["update_id"] + 1
        nachricht = update.get("message", {})
        if str(nachricht.get("chat", {}).get("id")) != MEINE_CHAT_ID:
            continue  # Fremde werden ignoriert — und nicht einmal beantwortet
        text = nachricht.get("text", "")
        if text == "/status":
            senden(f"{len(bekannt)} Zusammenfassungen im Ausgang. Agent-Not-Aus gesetzt: {NOT_AUS.exists()}")
        elif text == "/stop":
            NOT_AUS.write_text("Fern-Stopp per Telegram", encoding="utf-8")
            senden("Not-Aus gesetzt — der Ordner-Agent stoppt beim naechsten Kontrollgang.")

    time.sleep(3)

Starten (im selben Fenster, in dem BOT_TOKEN gesetzt wurde):

python "$HOME\KI-Experimente\fernbedienung.py"

Erwartetes Ergebnis: «Fernbedienung aktiv» erscheint auf deinem Handy. Lässt du parallel den Mission-5-Agenten laufen und legst eine Textdatei in Eingang, meldet sich kurz darauf dein Handy mit der fertigen Zusammenfassung. Und /stop stoppt den Agenten aus der Ferne — über denselben STOP.txt-Mechanismus, den du in Mission 5 gebaut hast.

Datenschutz ehrlich eingeordnet

Mit dieser Mission verlässt erstmals etwas dein Gerät: die Meldungstexte laufen über Telegrams Server (Bot-Chats sind dort nicht Ende-zu-Ende-verschlüsselt). Für Dateinamen und Statusmeldungen ist das vertretbar — Inhalte deiner Dokumente schickst du bewusst nicht mit. Wer gar nichts nach aussen geben will, nimmt die Alternative: eine lokale Weboberfläche (etwa Open WebUI auf dem eigenen Rechner) plus sicherer Fernzugriff per VPN — genau das Thema von Kernmodul 9.

Fehlerbehebung

  • getUpdates liefert nichts: Erst dem Bot eine Nachricht schicken — vorher gibt es keine Updates. Läuft parallel das Skript, konsumiert es die Updates; Skript kurz stoppen.
  • BOT_TOKEN fehlt: Die Umgebungsvariable gilt pro PowerShell-Fenster — im Skript-Fenster erneut setzen.
  • Keine Meldung bei neuer Datei: Zusammenfassung schon vor dem Start vorhanden? Das Skript meldet nur, was nach dem Start dazukommt.

Rücksetzweg

Skript stoppen (Ctrl + C) → in Telegram beim @BotFather /deletebot → Umgebungsvariable verfällt mit dem Fenster. Damit existiert der Zugangsweg nicht mehr.

Kurz geprüft

3 Fragen zum Festigen — Feedback kommt sofort.

Warum ignoriert das Skript fremde Chat-IDs, statt höflich «kein Zugriff» zu antworten?
Warum ist die Automatisierung des privaten WhatsApp-Kontos im Kurs tabu?
Was verlässt bei dieser Mission dein Gerät?

Das kann ich jetzt

  • Mein Agent meldet sich aufs Handy und gehorcht auf /status und /stop — nur mir.
  • Ich behandle Tokens als Geheimnisse und begrenze Fernmacht auf Berichten + Not-Aus.
  • Ich kann den Datenschutz-Kompromiss benennen und kenne die vollständig lokale Alternative.