Neden webhook?
Bir SEO makalesinin üretimi (rakip analizi + yazım + görsel sentezi) 2 ila 4 dakika sürebilir. İstemcinin bu süre boyunca bağlantıyı açık tutup beklemesi (isteğin zaman aşımına — timeout'a — uğraması) pratik değildir. Bu yüzden SeoGeo, üretim işini asenkron başlatır ve iş bittiğinde sonucu sizin belirttiğiniz bir adrese kendisi gönderir. Bu mekanizmaya webhook denir.
Akış şu şekilde işler:
POST /v1/generateisteğindewebhookUrlparametresiyle kendi endpoint'inizi belirtirsiniz.- SeoGeo isteği hemen
"status": "processing"ve birjobIdile yanıtlar; bağlantı burada kapanır. - Üretim arka planda tamamlandığında SeoGeo, belirttiğiniz
webhookUrladresine birPOSTisteği atar. - Sizin endpoint'iniz bu isteği işler ve
200 OKdöner.
/v1/generate isteği nasıl kurulur?
İlk istek Authorization: Bearer YOUR_API_KEY başlığıyla, HTTPS üzerinden atılır (HTTP üzerinden yapılan istekler reddedilir). Gövdede kullanılan alanlar:
keyword(zorunlu) — hedeflenecek anahtar kelime veya konu başlığı.language(opsiyonel, varsayılan"tr") — çıktı dili.includeImage(opsiyonel, varsayılantrue) — kapak görseli sentezi yapılsın mı.webhookUrl(opsiyonel) — üretim tamamlandığında sonucunPOSTedileceği adres.
{
"keyword": "2026 Elektrikli Araç Trendleri",
"language": "tr",
"wordCount": 1000,
"includeImage": true,
"webhookUrl": "https://api.siteniz.com/blog/import"
}
Bu isteğe anında dönen yanıt şudur (henüz makale hazır değildir, sadece iş kabul edilmiştir):
{
"status": "processing",
"jobId": "req_12345abc",
"message": "Makale üretimi başlatıldı."
}
Webhook'a düşen gerçek gövde ne görünür?
Üretim tamamlandığında webhookUrl adresinize aşağıdaki gibi bir JSON gövdesi ile POST isteği gelir:
{
"id": "req_12345abc",
"status": "completed",
"article": {
"title": "2026 Elektrikli Araç Trendleri",
"slug": "2026-elektrikli-arac-trendleri",
"htmlContent": "<h1>2026 Elektrikli Araç Trendleri</h1><p>...</p>",
"metaDescription": "Elektrikli araç pazarında 2026 trendleri...",
"imageUrl": "https://cdn.seogeo.com/.../image.jpg",
"tags": ["otomotiv", "teknoloji"]
}
}
Dikkat edilmesi gereken nokta: gövde içeriği article nesnesinin altında geliyor ve makale gövdesi htmlContent alanında — düz metin değil, doğrudan yayına hazır HTML olarak.
Kendi endpoint'inizi kurarken
WordPress veya kendi CMS'inizde dışarıdan POST kabul eden bir yol açmanız gerekir (örneğin /api/blog/import). Bu yolu kurarken:
- Güvenlik doğrulaması ekleyin. Payload içindeki statik bir token/secret değerini doğrulayarak isteğin gerçekten SeoGeo'dan geldiğini teyit edin; doğrulanmamış bir endpoint'i açık bırakmayın.
200 OKdönmeyi unutmayın. İsteği başarıyla işlediğinizde200 OKyanıtı vermeniz gerekir; aksi halde sistem isteği başarısız kabul edebilir.id/slugalanlarını idempotent işleyin. Aynıidile ikinci kez gelen bir isteği (yeniden deneme senaryosunda) yinelenen yayın oluşturmadan işleyebilecek şekilde tasarlayın.htmlContent'i olduğu gibi kaydedin. İçerik zaten yayına hazır HTML olarak geldiği için, ayrıca markdown veya başka bir formatta dönüştürmeye gerek yoktur.
WordPress özelinde pratik yaklaşım
WordPress tarafında en basit yol, webhookUrl olarak özel bir REST API route'u (custom endpoint) tanımlamak ve gelen article.title, article.slug, article.htmlContent, article.metaDescription, article.imageUrl alanlarını sırasıyla yazı başlığı, slug, içerik, meta açıklama (SEO eklentinizin ilgili alanı) ve öne çıkan görsel olarak eşlemektir. tags alanı doğrudan WordPress etiketleri olarak atanabilir.
Özet
Webhook entegrasyonu üç parçadan oluşur: /v1/generate isteğinde webhookUrl belirtmek, kendi tarafınızda bu adrese gelecek POST isteğini kabul eden bir endpoint açmak ve bu endpoint'in article nesnesindeki alanları CMS'inize doğru eşleyip 200 OK döndürmesini sağlamak. Üretim süresi 2-4 dakika olduğu için senkron bekleme yerine bu asenkron akış tercih edilir.
