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.
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)
- In Telegram den offiziellen @BotFather suchen (verifizierter Bot von Telegram selbst).
/newbotsenden, Namen vergeben — du erhältst einen Token (lange Zeichenkette).- 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
getUpdatesliefert 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.
Das kann ich jetzt
- Mein Agent meldet sich aufs Handy und gehorcht auf
/statusund/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.