Hermes Agent mit WhatsApp verbinden: Schritt-für-Schritt-Anleitung
Diese Anleitung führt Sie durch den Prozess, einen Hermes Agent (basierend auf der Nous-Hermes-Modellfamilie oder einem Hermes-Agentic-Framework) mit WhatsApp zu verknüpfen. Dadurch kann Ihr KI-Agent direkt auf WhatsApp-Nachrichten reagieren, Aufgaben ausführen und als persönlicher oder geschäftlicher Assistent fungieren.
In diesem Tutorial nutzen wir die offizielle Meta WhatsApp Cloud API in Kombination mit einem Python-Backend, das Anfragen an den Hermes Agent weiterleitet.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes bereitgestellt haben:
- Meta for Developers Account: Ein Entwicklerkonto bei developers.facebook.com.
- Hermes Agent: Ein lokal laufendes Modell (z. B. via Ollama/vLLM) oder Zugriff über eine Inferenz-API (z. B. Together AI, Fireworks oder OpenRouter).
- Python 3.10+ auf Ihrem Server oder Entwicklungsrechner.
- Ein Tunneling-Tool: Z. B.
ngrok, um Ihre lokale Umgebung mit WhatsApp zu verbinden (für Produktion: ein vServer mit SSL-Zertifikat).
Schritt 1: WhatsApp Business API einrichten
- Melden Sie sich im Meta for Developers Portal an.
- Klicken Sie auf App erstellen und wählen Sie als Typ Business.
- Geben Sie der App einen Namen und scrollen Sie im Dashboard zum Produkt WhatsApp. Klicken Sie auf Einrichten.
- Sie erhalten Zugriff auf ein temporäres Test-Dashboard. Notieren Sie sich folgende Daten:
- Temporäres Zugriffstoken (Temporary Access Token)
- Telefonnummern-ID (Phone Number ID)
- Fügen Sie Ihre private Mobilnummer als Empfängernummer zum Testen hinzu.
Schritt 2: Hermes Agent bereitstellen
Für dieses Tutorial nutzen wir Ollama, um ein Nous-Hermes-Modell lokal laufen zu lassen (alternativ können Sie jedes API-basierte Hermes-Setup nutzen).
- Installieren Sie Ollama und laden Sie das Hermes-Modell herunter:
ollama run nous-hermes2 - Das Modell läuft nun lokal und ist standardmäßig unter
http://localhost:11434erreichbar.
Schritt 3: Webhook-Server mit Python erstellen
Der Webhook fungiert als Brücke: Er empfängt Nachrichten von WhatsApp, leitet sie an den Hermes Agent weiter und sendet die generierte Antwort zurück an den Nutzer.
-
Installieren Sie die nötigen Python-Pakete:
pip install fastapi uvicorn requests httpx -
Erstellen Sie eine Datei namens
hermes_whatsapp.py:
import httpx
import requests
from fastapi import FastAPI, HTTPException, Query, Request
app = FastAPI()
# KONFIGURATION (Ersetzen Sie diese durch Ihre Meta-Daten)
WHATSAPP_TOKEN = "IHR_META_ACCESS_TOKEN"
PHONE_NUMBER_ID = "IHRE_PHONE_NUMBER_ID"
VERIFY_TOKEN = (
"MEIN_GEHEIMER_VERIFY_TOKEN" # Frei wählbar (z.B. "hermes_secret_123")
)
HERMES_API_URL = "http://localhost:11434/api/generate" # Ollama Endpunkt
# 1. WhatsApp Webhook-Verifizierung (GET)
@app.get("/webhook")
async def verify_webhook(
mode: str = Query(None, alias="hub.mode"),
token: str = Query(None, alias="hub.verify_token"),
challenge: str = Query(None, alias="hub.challenge"),
):
if mode == "subscribe" and token == VERIFY_TOKEN:
return int(challenge)
raise HTTPException(status_code=403, detail="Verifizierung fehlgeschlagen")
# 2. Nachrichten empfangen & antworten (POST)
@app.post("/webhook")
async def receive_whatsapp(request: Request):
data = await request.json()
try:
# Prüfen, ob eine Textnachricht vorliegt
entry = data["entry"][0]["changes"][0]["value"]
if "messages" in entry:
message = entry["messages"][0]
from_number = message["from"] # WhatsApp-Nummer des Nutzers
user_text = message["text"]["body"]
# Anfrage an Hermes Agent senden
hermes_reply = ask_hermes(user_text)
# Antwort via WhatsApp zurücksenden
send_whatsapp_message(from_number, hermes_reply)
except (KeyError, IndexError):
# Benachrichtigungen wie "Status gelesen" ignorieren
pass
return {"status": "ok"}
def ask_hermes(prompt: str) -> str:
"""Interaktion mit dem Hermes Agent."""
payload = {
"model": "nous-hermes2",
"prompt": f"System: Du bist ein nützlicher WhatsApp-KI-Assistent, angetrieben von Hermes.\nUser: {prompt}\nAssistant:",
"stream": False,
}
response = requests.post(HERMES_API_URL, json=payload)
return response.json().get("response", "Entschuldigung, ein Fehler trat auf.")
def send_whatsapp_message(to_number: str, text: str):
"""Nachricht über Meta Graph API senden."""
url = f"https://graph.facebook.com/v18.0/{PHONE_NUMBER_ID}/messages"
headers = {
"Authorization": f"Bearer {WHATSAPP_TOKEN}",
"Content-Type": "application/json",
}
payload = {
"messaging_product": "whatsapp",
"to": to_number,
"type": "text",
"text": {"body": text},
}
requests.post(url, headers=headers, json=payload)
Schritt 4: Server öffentlich erreichbar machen & Webhook konfigurieren
WhatsApp muss Ihren Server über eine öffentlich erreichbare HTTPS-Adresse erreichen können.
-
Server starten:
uvicorn hermes_whatsapp:app --host 0.0.0.0 --port 8000 -
Tunneling via ngrok starten (in einem zweiten Terminal):
ngrok http 8000Kopieren Sie die generierte HTTPS-URL (z. B.
https://a1b2-c3d4.ngrok-free.app). -
Webhook bei Meta hinterlegen:
- Gehen Sie in Ihrem Meta App-Dashboard zu WhatsApp > Konfiguration.
- Klicken Sie bei Webhook auf Bearbeiten.
- Callback-URL: Fügen Sie Ihre URL mit
/webhookein (z. B.https://a1b2-c3d4.ngrok-free.app/webhook). - Verifizierungstoken: Tragen Sie denselben Token ein, den Sie im Python-Skript gewählt haben (z. B.
hermes_secret_123). - Klicken Sie auf Verifizieren und speichern.
- Klicken Sie auf Webhook-Felder verwalten und abonnieren Sie das Feld
messages.
Schritt 5: Verbindung testen
- Nehmen Sie das Telefon zur Hand, dessen Nummer Sie in Schritt 1 als Testnummer autorisiert haben.
- Senden Sie eine WhatsApp-Nachricht an die temporäre Telefonnummer von Meta.
- Ergebnis:
- Die Nachricht landet im Python-Webhook.
- Der Server übergibt die Eingabe an den Hermes Agent.
- Hermes verarbeitet den Prompt und sendet die Antwort innerhalb von Sekunden per WhatsApp zurück.
Wichtige Hinweise für den Produktivbetrieb
- Persistente Tokens: Das Meta-Testtoken läuft nach 24 Stunden ab. Für den Live-Betrieb müssen Sie im Meta Business Manager ein System-Benutzer-Token (Permanent Token) anlegen.
- Hosting: Nutzen Sie für den Produktiveinsatz keinen temporären Tunnel (wie ngrok), sondern hosten Sie das Skript auf einem Server (z. B. via Docker, AWS, Hetzner) mit einer festen Domain und SSL-Zertifikat (z. B. via Let’s Encrypt).
- Konversationsverlauf (Memory): Das gezeigte Minimal-Skript ist "stateless". Um dem Agenten ein Gedächtnis zu geben, sollten Sie eine Datenbank (z. B. Redis oder SQLite) anbinden, die Chat-Verläufe anhand der
from_numberspeichert und als Kontext an Hermes übergibt.