
Dil 🇹🇷 Türkçe
Genel Bakış
Uygulama
Perde Arkası
FastComments ile sistemimizde bir yorum eklendiğinde, güncellendiğinde veya kaldırıldığında bir API endpoint'i çağırmak mümkündür.
Bunu HTTP/HTTPS üzerinden asenkron webhooks ile gerçekleştiriyoruz.
Webhook'lar Nedir? 
Webhook, iki sistem arasında bir mekanizma veya entegrasyon olup "üretici" (FastComments) bir olay tetikler ve "tüketici" (Siz) bu olayı bir API çağrısı ile tüketir.
Desteklenen Olaylar ve Kaynaklar 
FastComments yalnızca Comment kaynağı için webhookları destekler.
Yorum oluşturma, silme ve güncelleme için webhookları destekliyoruz.
Her biri sistemimizde ayrı olaylar olarak kabul edilir ve bu nedenle webhook olayları için farklı semantiklere ve yapılara sahiptir.
Yerel Geliştirme Kurulumu 
Yerel geliştirme için ngrok gibi bir araç kullanın.
Sistemin güvenliğinin korunmasını kolaylaştırmak için, yerel geliştirme diğer ortamların kurulması ve güvenliğinin sağlanmasıyla aynı süreci izler.
Adım 1: Hesabınızdaki alanlara "localhost" ekleyin.
"localhost"u alan olarak buraya ekleyin.
Adım 2: Bir API Key seçin
Alanınız için webhook yapılandırması ekleyeceğiz, bu yüzden bir API Key'e ihtiyacımız olacak. Bunu burada yapabilirsiniz.
"Associate with domain" altında - "localhost" alanınızı seçin.
NOT: Alternatif olarak, tüm test etkinlikleri ve staging ortamları için tek bir API Secret kullanabilirsiniz. Basitçe "All Domains" için bir API Secret ekleyin ve adını "test" gibi verin.
Üretim alan(lar)ınız için bir API Secret tanımlı olduğundan emin olun. Diğer tüm alanlar için olaylar wildcard (testing) secret'ını kullanacaktır.
Adım 3: Webhook'unuzu ekleyin
ngrok veya benzeri bir araç çalışırken, "localhost" için değeri buraya ayarlayın.
Send Test Payload'a tıkladığınızda, API Key'i doğruladığınızı kontrol etmek için iki test olayı göndereceğiz.
Doğrulandıktan sonra Save'e basın.
Adım 4: Bir Yorum Ekleyin
Artık yorum ekleyebilir, düzenleyebilir veya silebilir ve test API Key'inizi kullanarak olaylarla yerel geliştirme makinenizi aradığımızı görebilirsiniz. 30 saniyeye kadar gecikme olabilir olayların makinenize ulaşması için.
Kurulum 
localhost için, production'da uyguladığınız aynı adımları izleyin. production alan adlarının ve API Secrets'in yapılandırıldığından emin olun.
First, navigate to the Webhooks yönetimi. This is accessible via Manage Data -> Webhooks.
The configuration page appears as follows:
In this page you can specify endpoints for each type of comment event.
For each type of event, be sure to click Send Test Payload to ensure you've set up your integration correctly. See the next section, "Testing", for details.
Test Etme 
Webhooks yönetim panelinde her bir etkinlik türü (Create, Update, Delete) için Send Test Payload düğmeleri bulunur. Create ve Update etkinlikleri sahte bir WebhookComment object gönderirken, Delete testi yalnızca bir ID içeren sahte bir istek gövdesi gönderecektir.
Verifying Payloads
Webhook entegrasyonunuzu test ederken, gelen isteklerin aşağıdaki başlıkları içerdiğini doğrulayın:
token- API Gizli AnahtarınızX-FastComments-Timestamp- Unix zaman damgası (saniye)X-FastComments-Signature- HMAC-SHA256 imzası
Gelen payload'ların gerçekliğini sağlamak için HMAC imza doğrulamasını kullanın.
Testing Tools
Geliştirme sırasında gelen webhook payload'larını incelemek için webhook.site veya ngrok gibi araçları kullanabilirsiniz.
Event Types
- Create Event: Yeni bir yorum oluşturulduğunda tetiklenir. Varsayılan yöntem: PUT
- Update Event: Bir yorum düzenlendiğinde tetiklenir. Varsayılan yöntem: PUT
- Delete Event: Bir yorum silindiğinde tetiklenir. Varsayılan yöntem: DELETE
Her etkinlik, istek gövdesinde tam yorum verilerini içerir (yük formatı için bkz. Veri Yapıları).
Veri Yapıları 
Webhook'lar aracılığıyla gönderilen tek yapı aşağıda TypeScript ile özetlenen WebhookComment nesnesidir.
WebhookComment Nesnesi Yapısı
"Create" Olay Yapısı
"create" olay isteği gövdesi bir WebhookComment nesnesidir.
"Update" Olay Yapısı
"update" olay isteği gövdesi bir WebhookComment nesnesidir.
"Delete" Olay Yapısı
"delete" olay isteği gövdesi bir WebhookComment nesnesidir.
14 Kasım 2023 itibarıyla değişiklik
Daha önce "delete" olay isteği gövdesi yalnızca yorum id'sini içeriyordu. Artık silme anındaki tam yorumu içerir.
Run 
Kullanıcılar bir yorumda etiketlendiğinde, bilgiler mentions adlı bir listede saklanır. O listedeki her nesne aşağıdaki yapıya sahiptir.
Run 
HTTP Yöntemleri
Yönetici panelinde her webhook olay türü için HTTP yöntemini yapılandırabilirsiniz:
- Create Event: POST veya PUT (varsayılan: PUT)
- Update Event: POST veya PUT (varsayılan: PUT)
- Delete Event: DELETE, POST veya PUT (varsayılan: DELETE)
Tüm istekler bir ID içerdiğinden, Create ve Update işlemleri varsayılan olarak idempotenttir (PUT). Aynı Create veya Update isteğini tekrarlamak, sizin tarafınızda yinelenen nesneler oluşturmemelidir.
İstek Başlıkları
Her webhook isteği aşağıdaki başlıkları içerir:
| Başlık | Açıklama |
|---|---|
Content-Type |
application/json |
token |
API Gizli Anahtarınız |
X-FastComments-Timestamp |
İsteğin imzalandığı Unix zaman damgası (saniye) |
X-FastComments-Signature |
HMAC-SHA256 imzası (sha256=<hex>) |
HMAC imzasını doğrulama hakkında bilgi için Güvenlik ve API Anahtarları sayfasına bakın.
Güvenlik ve API Jetonları 
FastComments webhook istekleri güvenlik için birden fazla kimlik doğrulama mekanizması içerir.
Gönderilen Başlıklar
| Header | Açıklama |
|---|---|
token |
API Gizli Anahtarınız (geriye dönük uyumluluk için) |
X-FastComments-Timestamp |
İsteğin imzalandığı Unix zaman damgası (saniye) |
X-FastComments-Signature |
Gönderinin HMAC-SHA256 imzası |
HMAC İmza Doğrulaması (Önerilen)
Webhook gönderilerinin orijinal ve değiştirilmemiş olduğunu sağlamak için HMAC imzasını doğrulamanızı şiddetle tavsiye ederiz.
İmza Formatı: sha256=<hex-encoded-signature>
İmzanın nasıl hesaplandığı:
- Birleştir:
timestamp + "." + JSON_payload_body - Anahtar olarak API Gizli Anahtarınızı kullanarak HMAC-SHA256 hesaplayın
- Sonucu hexadecimal (hex) olarak kodlayın
Doğrulama Örneği (Node.js)
const crypto = require('crypto');
function verifyWebhookSignature(req, apiSecret) {
const timestamp = req.headers['x-fastcomments-timestamp'];
const signature = req.headers['x-fastcomments-signature'];
if (!timestamp || !signature) {
return false;
}
// Zaman damgasının güncel olduğunu doğrula (5 dakika içinde)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Tekrar oynatma (replay) saldırılarını önlemek için
}
// İmzayı doğrula
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Doğrulama Örneği (Python)
import hmac
import hashlib
import time
import json
def verify_webhook_signature(headers, body, api_secret):
timestamp = headers.get('X-FastComments-Timestamp')
signature = headers.get('X-FastComments-Signature')
if not timestamp or not signature:
return False
# Zaman damgasının güncel olduğunu doğrula
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# İmzayı doğrula
payload = json.dumps(body, separators=(',', ':'))
message = f"{timestamp}.{payload}"
expected = hmac.new(
api_secret.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature == f"sha256={expected}"
Doğrulama Örneği (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Zaman damgasının güncel olduğunu doğrula (5 dakika içinde)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// İmzayı doğrula
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Eski Kimlik Doğrulama
token başlığı, API Gizli Anahtarınızı içeren, geriye dönük uyumluluk için hâlâ gönderilmektedir. Ancak, tekrar oynatma saldırılarına karşı koruma sağladığı için geliştirilmiş güvenlik için HMAC doğrulamasına geçmenizi öneririz.
Nasıl Çalışır ve Yeniden Denemelerin İşlenmesi 
Sistemdeki Comment nesnesindeki tüm değişiklikler, bir kuyruğa düşen bir olay tetikler.
İlk webhook olayı genellikle olay kaynağının gerçekleşmesinden itibaren altı saniye içinde gönderilir.
API'niz çalışmayı durdurursa bu kuyruğu Webhooks yönetiminde izleyebilirsiniz.
API'nize yapılan bir istek başarısız olursa, onu belirli bir takvime göre yeniden kuyruğa alacağız.
That schedule is 1 Minute * the retry count. If the call fails once, it'll try again in
bir dakika içinde. Eğer iki kez başarısız olursa, o zaman iki dakika bekleyecek ve böyle devam eder. Bu, böylece biz
API'nizi yükle ilgili nedenlerle kapanırken aşırı yüklememek içindir.
Webhooks, kayıtlar sayfası üzerinden iptal edilebilir.
Sonuç olarak
Bu, Webhooks belgelerimizin sonudur.
Umarız FastComments Webhook entegrasyonunu anlaşılması kolay ve kurulumu hızlı bulursunuz.
Belgelerimizde herhangi bir boşluk tespit ettiğinizi düşünüyorsanız, lütfen aşağıdan bize bildirin.