Bir Discord webhook, bir kanala mesaj göndermenin en hızlı yoludur: tam bir bot uygulaması yazmadan, sadece bir URL'ye HTTP isteği atarak yazı, embed ve dosya gönderebilirsiniz. Sunucunuzdaki bir olayı (yeni kayıt, hata, ödeme, build tamamlandı) anlık olarak bir kanala düşürmek istediğinizde webhook neredeyse her zaman en pratik çözümdür. Bu rehberde webhook'un ne olduğunu, nasıl oluşturulduğunu ve koddan veya dış servisten nasıl mesaj atılacağını adım adım anlatıyorum.
Webhook ile bot arasındaki fark
Bot ve webhook aynı şey değildir. Bir bot Discord Gateway'e bağlanır, mesajları okuyabilir, komutlara cevap verir, kullanıcı etkileşimlerini dinler; sürekli çalışan bir uygulamadır. Bir webhook ise tek yönlüdür: sadece mesaj gönderir, hiçbir şey okuyamaz, komutlara cevap veremez. Buna karşılık kurulumu saniyeler sürer, token veya sürekli çalışan bir süreç gerektirmez.
- Sadece bir kanala bildirim/log atacaksanız → webhook.
- Komut, buton, slash command, mesaj okuma gerekiyorsa → bot.
- Webhook gönderdiği her mesajda özel bir isim ve avatar gösterebilir; aynı kanalda farklı kaynakları ayırmak için idealdir.
Webhook nasıl oluşturulur
Webhook oluşturmak için kanalda Kanalı Yönet iznine ihtiyacınız var. Adımlar şöyle:
- Hedef kanalın yanındaki dişli simgesine (Kanalı Düzenle) tıklayın.
- Entegrasyonlar → Webhook'lar → Yeni Webhook yolunu izleyin.
- İsim ve avatar verin, kanalı seçin ve Webhook URL'sini Kopyala deyin.
URL şu biçimdedir: https://discord.com/api/webhooks/<id>/<token>. Bu URL'nin son kısmı bir token'dır; onu bilen herkes o kanala mesaj atabilir. Bu yüzden URL'yi koda gömmeyin, GitHub'a pushlamayın; ortam değişkeninde (örneğin .env) saklayın.
En basit gönderim: curl
Webhook'un çalıştığını test etmek için hiçbir kod yazmanıza gerek yok. Tek satırlık bir curl komutu yeterli:
curl -H "Content-Type: application/json" \
-d '{"content":"Merhaba kanal! Bu bir webhook mesajı."}' \
"https://discord.com/api/webhooks/ID/TOKEN"
Başarılı olursa Discord 204 No Content döner ve mesaj anında kanalda görünür. Gönderdiğiniz JSON gövdesinde en sık kullanılan alanlar şunlardır:
content— düz metin mesaj (en fazla 2000 karakter).username— bu mesajda gösterilecek isim (webhook'un varsayılanını ezer).avatar_url— bu mesajdaki avatar.embeds— zengin kart biçiminde içerik dizisi.
Python ile webhook gönderme
Gerçek bir uygulamada genellikle bir programlama dilinden gönderirsiniz. Python'da requests kütüphanesiyle birkaç satır yeterli:
import os
import requests
WEBHOOK_URL = os.environ["DISCORD_WEBHOOK_URL"]
payload = {
"username": "Sunucu Botu",
"content": "Yeni kayıt: **ayse** az önce katıldı.",
}
resp = requests.post(WEBHOOK_URL, json=payload, timeout=10)
resp.raise_for_status() # 2xx değilse hata fırlat
URL'yi os.environ üzerinden okuduğumuza dikkat edin; token kodun içinde durmaz. raise_for_status() ile başarısız istekleri sessizce yutmaktan kaçınırsınız.
Node.js ve embed gönderme
Node.js'te ek bir kütüphaneye bile gerek yok; modern sürümlerde yerleşik fetch kullanılabilir. Aşağıdaki örnek düz metin yerine renkli bir embed gönderiyor:
const url = process.env.DISCORD_WEBHOOK_URL;
const body = {
username: "Deploy Bot",
embeds: [
{
title: "Yayın tamamlandı",
description: "`v1.4.2` sürümü canlıya alındı.",
color: 0x2ecc71, // yeşil
fields: [
{ name: "Ortam", value: "production", inline: true },
{ name: "Süre", value: "42s", inline: true },
],
timestamp: new Date().toISOString(),
},
],
};
await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
Embed'lerde color ondalık veya onaltılık bir tamsayıdır, fields kart içinde düzenli alanlar oluşturur, inline: true ise alanları yan yana dizer. Tek istekte en fazla 10 embed gönderebilirsiniz.
Hız sınırları ve sık yapılan hatalar
Discord webhook'ları rate limit uygular. Çok sık istek atarsanız 429 Too Many Requests alırsınız; yanıttaki retry_after alanı kaç saniye beklemeniz gerektiğini söyler. Yüksek hacimde gönderim yapacaksanız mesajları toplu (batch) hâlde gönderin veya bir kuyruk kullanın. Sık karşılaşılan diğer noktalar:
- İçerik boş olamaz:
content,embedsveyafilealanlarından en az biri dolu olmalı. - 2000 karakter sınırı: uzun logları kırpın ya da dosya olarak ekleyin.
- Token sızıntısı: URL açığa çıkarsa eski webhook'u silip yenisini oluşturun.
- Anlık yanıt isteme: URL'ye
?wait=trueeklerseniz Discord oluşturulan mesajı JSON olarak geri döner; mesaj ID'sine ihtiyacınız varsa kullanışlıdır.
Sık Sorulan Sorular
Webhook ücretsiz mi ve sınırı var mı?
Evet, webhook'lar tamamen ücretsizdir. Bir kanalda en fazla 10, bir sunucuda toplam birkaç yüz webhook tanımlanabilir. Asıl kısıt sayı değil, kısa sürede attığınız istek miktarına uygulanan rate limit'tir.
Webhook ile gelen mesajları okuyabilir miyim?
Hayır. Webhook tek yönlüdür ve yalnızca gönderim yapar. Mesaj okumak, komutlara yanıt vermek veya kullanıcı etkileşimi dinlemek için gerçek bir bota (discord.js veya discord.py) ihtiyacınız var.
Webhook URL'mi yanlışlıkla paylaşırsam ne olur?
O URL'ye sahip herkes ilgili kanala mesaj gönderebilir. Hemen Discord'da webhook ayarlarına gidip eski webhook'u silin; bu, URL'yi anında geçersiz kılar. Ardından yeni bir webhook oluşturup yeni URL'yi güvenli biçimde saklayın.
Discord otomasyonunuzu bir üst seviyeye taşımak mı istiyorsunuz? İster basit bir bildirim webhook'u, ister komutlara cevap veren tam bir bot olsun, sizin için kurabilirim. Benimle iletişime geçin ve projenizi konuşalım.