Ein Discord Webhook ist der schnellste Weg, um in einen Kanal zu posten: Ohne eine vollständige Bot-Anwendung zu schreiben, kannst du Text, Embeds und Dateien senden, indem du einfach eine HTTP-Anfrage an eine einzige URL stellst. Sobald du ein Ereignis von deinem Server (eine neue Anmeldung, einen Fehler, eine Zahlung, einen fertigen Build) in Echtzeit in einen Kanal bringen willst, ist ein Webhook fast immer die praktischste Option. In dieser Anleitung erkläre ich Schritt für Schritt, was ein Webhook ist, wie man einen erstellt und wie man Nachrichten aus Code oder von einem externen Dienst sendet.
Webhook im Vergleich zum Bot
Ein Bot und ein Webhook sind nicht dasselbe. Ein Bot verbindet sich mit dem Discord-Gateway, kann Nachrichten lesen, auf Befehle reagieren und auf Benutzerinteraktionen lauschen; er ist eine dauerhaft laufende Anwendung. Ein Webhook dagegen ist einseitig: Er sendet nur Nachrichten, kann nichts lesen und nicht auf Befehle antworten. Im Gegenzug ist er in Sekunden eingerichtet und braucht weder einen Token noch einen dauerhaft laufenden Prozess.
- Du willst nur eine Benachrichtigung/ein Log in einen Kanal schicken → Webhook.
- Du brauchst Befehle, Buttons, Slash-Commands oder das Lesen von Nachrichten → Bot.
- Ein Webhook kann bei jeder gesendeten Nachricht einen eigenen Namen und Avatar anzeigen, ideal, um verschiedene Quellen im selben Kanal zu unterscheiden.
Wie man einen Webhook erstellt
Um einen Webhook zu erstellen, brauchst du in diesem Kanal die Berechtigung Kanal verwalten. Die Schritte sind:
- Klicke auf das Zahnradsymbol (Kanal bearbeiten) neben dem Zielkanal.
- Folge Integrationen → Webhooks → Neuer Webhook.
- Gib ihm einen Namen und Avatar, wähle den Kanal und klicke auf Webhook-URL kopieren.
Die URL hat die Form https://discord.com/api/webhooks/<id>/<token>. Der letzte Teil dieser URL ist ein Token; jeder, der ihn kennt, kann in diesen Kanal posten. Verankere die URL also nicht fest im Code und pushe sie nicht zu GitHub; bewahre sie in einer Umgebungsvariable auf (zum Beispiel in einer .env-Datei).
Das einfachste Senden: curl
Du musst keinen Code schreiben, um zu testen, ob der Webhook funktioniert. Ein einzeiliger curl-Befehl genügt:
curl -H "Content-Type: application/json" \
-d '{"content":"Hallo Kanal! Dies ist eine Webhook-Nachricht."}' \
"https://discord.com/api/webhooks/ID/TOKEN"
Bei Erfolg gibt Discord 204 No Content zurück und die Nachricht erscheint sofort im Kanal. Die am häufigsten verwendeten Felder im JSON-Body, den du sendest, sind:
content— Klartext-Nachricht (bis zu 2000 Zeichen).username— der für diese Nachricht angezeigte Name (überschreibt den Standard des Webhooks).avatar_url— der Avatar für diese Nachricht.embeds— ein Array mit Inhalt in Form einer angereicherten Karte.
Einen Webhook mit Python senden
In einer echten Anwendung sendest du meist aus einer Programmiersprache. In Python genügen ein paar Zeilen mit der requests-Bibliothek:
import os
import requests
WEBHOOK_URL = os.environ["DISCORD_WEBHOOK_URL"]
payload = {
"username": "Server Bot",
"content": "Neue Anmeldung: **alice** ist gerade beigetreten.",
}
resp = requests.post(WEBHOOK_URL, json=payload, timeout=10)
resp.raise_for_status() # Fehler auslösen, wenn nicht 2xx
Beachte, dass wir die URL über os.environ auslesen; der Token steht nie im Code. Mit raise_for_status() vermeidest du, fehlgeschlagene Anfragen stillschweigend zu verschlucken.
Node.js und das Senden eines Embeds
In Node.js brauchst du nicht einmal eine zusätzliche Bibliothek; moderne Versionen bringen ein eingebautes fetch mit. Das folgende Beispiel sendet ein farbiges Embed statt Klartext:
const url = process.env.DISCORD_WEBHOOK_URL;
const body = {
username: "Deploy Bot",
embeds: [
{
title: "Veröffentlichung abgeschlossen",
description: "Version `v1.4.2` ist jetzt live.",
color: 0x2ecc71, // grün
fields: [
{ name: "Umgebung", value: "production", inline: true },
{ name: "Dauer", value: "42s", inline: true },
],
timestamp: new Date().toISOString(),
},
],
};
await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
In Embeds ist color eine dezimale oder hexadezimale Ganzzahl, fields erzeugt geordnete Bereiche in der Karte, und inline: true reiht sie nebeneinander auf. Du kannst pro Anfrage höchstens 10 Embeds senden.
Rate Limits und häufige Fehler
Discord-Webhooks erzwingen ein Rate Limit. Wenn du zu oft Anfragen abfeuerst, erhältst du 429 Too Many Requests; das Feld retry_after in der Antwort sagt dir, wie viele Sekunden du warten musst. Für das Senden in großer Menge bündele deine Nachrichten (Batch) oder verwende eine Warteschlange. Weitere häufige Stolpersteine:
- Inhalt darf nicht leer sein: mindestens eines der Felder
content,embedsoderfilemuss gefüllt sein. - 2000-Zeichen-Grenze: kürze lange Logs oder hänge sie als Datei an.
- Token-Leck: wenn die URL offengelegt wird, lösche den alten Webhook und erstelle einen neuen.
- Sofortige Antwort: füge der URL
?wait=truehinzu, und Discord gibt die erstellte Nachricht als JSON zurück, praktisch, wenn du die Nachrichten-ID brauchst.
Häufige Fragen
Sind Webhooks kostenlos, und gibt es ein Limit?
Ja, Webhooks sind völlig kostenlos. Ein Kanal kann bis zu 10 und ein Server insgesamt einige Hundert Webhooks haben. Die eigentliche Einschränkung ist nicht die Anzahl, sondern das Rate Limit für die Menge der Anfragen, die du in kurzer Zeit sendest.
Kann ich mit einem Webhook eingehende Nachrichten lesen?
Nein. Ein Webhook ist einseitig und sendet nur. Um Nachrichten zu lesen, auf Befehle zu reagieren oder auf Benutzerinteraktionen zu lauschen, brauchst du einen echten Bot (discord.js oder discord.py).
Was passiert, wenn ich meine Webhook-URL versehentlich teile?
Jeder mit dieser URL kann in den betreffenden Kanal posten. Gehe sofort in die Webhook-Einstellungen in Discord und lösche den alten Webhook; das macht die URL augenblicklich ungültig. Erstelle danach einen neuen Webhook und speichere die neue URL sicher.
Willst du deine Discord-Automatisierung auf die nächste Stufe heben? Ob ein einfacher Benachrichtigungs-Webhook oder ein vollständiger Bot, der auf Befehle reagiert, ich baue ihn für dich. Nimm Kontakt mit mir auf und lass uns über dein Projekt sprechen.