n8n İş Akışı Kurulumu

n8n, kendi sunucunuzda çalışan bir otomasyon platformu: bir tetiği HTTP çağrılarına, AI düğümlerine ve koşullara zincirlediğiniz görsel bir editör. jekcms bu zincirin iki ucunda da durmak üzere tasarlandı. API'si üzerinden iş dağıtır, biten makaleyi geri alır; sitede bir şey olduğunda da iş akışlarınıza POST atar.

jekcms ayarlarındaki API ve Otomasyon sekmesi
Aynı ekranda iki ayrı şey: dışarıdan gelen otomasyon için REST API anahtarı, ve AI sağlayıcı anahtarları.

En hızlı giriş yolu iş akışı kurmak değil. jekcms üç tanesini, önlerinde tek bir yapılandırma düğümüyle, bağlanmış hâlde gönderiyor.

Hazır bir iş akışıyla başlayın

Panelde Toplu İçerik Planla ekranını açın (İçerik Stüdyosu → Toplu İçerik Planla) ve n8n paneline inin. Orada kendi sitenizin webhook adresini, API anahtarı oluşturma bağlantısını ve üç indirmeyi bulacaksınız:

İçerik Kuyruğu: Persona Yazarı iki saatte bir çalışır, planladığınız gruptan bir görev alır, makaleyi sizin tanımladığınız persona sesiyle yazar, kapak görseli üretir ve yayınlar. Araştırmalı Üretim + 3 Görsel aynısını dört saatlik döngüyle yapar ama konuyu önce web destekli bir çağrıyla araştırır ve kapağın yanında iki içerik görseliyle yayınlar. RSS İçerik Fabrikası farklı olanı: bir düzine beslemeyi okur, modele aday seçtirir, konuyu daha önce işleyip işlemediğinizi kontrol eder, yeniden yazar ve yayınlar. Onu açmadan önce başkasının içeriğini yeniden yazmayla ilgili bölümü okuyun.

Her biri JSON dosyası olarak iner. n8n'de Workflows → Import from File deyin, dosyayı seçin ve en baştaki Ayarlar düğümünü açın. Değiştirmeniz gereken her şey o tek düğümde durur: sonunda eğik çizgi olmadan site adresiniz, jekcms API anahtarınız, sağlayıcı anahtarlarınız, makale dili, sitenizin konusu ve iş akışının yazarken kullandığı persona ya da kategori listesi. Aşağıdaki her düğüm oradan okur.

Yer tutucular dururken iş akışı çalışmayı reddeder ve hangi alanın boş olduğunu söyler. Bu bilinçlidir - yarım yapılandırılmış bir hattın on dokuzuncu düğümde patlaması, ikinci düğümde durmasından çok daha zor ayıklanır.

Hem iş akışları hem de sürdükleri REST API ücretsiz sürüme dahildir.

API anahtarı

Anahtarı önce oluşturun: Yönetim → API Anahtarları. Bir kez gösterilir; sayfadan ayrılmadan kopyalayın.

jekcms anahtarının kendine ait bir yetki kapsamı yoktur. Hangi kullanıcı için üretildiyse o kullanıcı gibi, tam olarak o rolün yetkileriyle davranır. Rolleri planlamadan önce şunu bilin: API Anahtarları ekranı yalnız yöneticiye açık ve ürettiği her anahtarı o an giriş yapmış yöneticinin üstüne yazıyor. Kullanıcı seçici yok, yani panelden daha düşük yetkili anahtar üretemezsiniz. Ürettiğiniz her anahtara yönetici kimliği gibi davranın. Yazma eylemleri ayrıca publish_posts yetkisi ister. Ayrıntılar API Kimlik Doğrulama sayfasında.

n8n'in HTTP Request düğümünde kimlik doğrulamayı bir başlıkla kurun: Authorization: Bearer <anahtarınız>. X-API-Key de çalışır; Apache ve CGI kurulumları Authorization başlığını PHP'ye her zaman geçirmediği için jekcms başlığın düşmüş olabileceği birkaç yere birden bakar.

Bir iş akışının gerçekten kullandığı uçlar

Her çağrı, JSON gövdeyle https://siteniz.com/api/v1/webhook/{eylem} adresine POST'tur.

Kuyruk güdümlü bir hat üç uç kullanır. queue-pending, Toplu İçerik Planla ile planlanmış bir gruptan zamanı gelen görevleri ister ve dağıttıklarını işleniyor olarak işaretler. content-generate biten makaleyi geri gönderir, kapak görselini bağlar ve görevi kapatır. queue-fail ise iş akışının tamamlayamadığı görevi bildirir; böylece görev kaybolmak yerine kırmızı görünür.

Konusunu kendi bulan bir hat üç uç kullanır. Yazıyı oluşturmak için publish, draft ya da schedule. Az önce ürettiği görseli yüklemek için media-base64. Bir kaynak adresin daha önce içe aktarılıp aktarılmadığını sormak için de check-source. Sonuncusu olmadan zamanlı koşan bir RSS iş akışı aynı haberi tekrar tekrar yayınlar.

İçerik kuyruğu için bir API ucu yoktur; o ayrı bir hattır. Onu beslemek için JSON ya da CSV dosyası üretip içe aktarın ya da bir tablodan eşitleyin.

Her eylemi, kimlik doğrulama seçeneklerini ve hata yanıtlarını Webhook'lar sayfası belgeliyor.

Çıktıya ne olacağını seçmek

Son düğümünüzün işaret ettiği uç, editöryel politikanızın kendisidir.

draft uçunu gösterirseniz makale Yazılar ekranında taslak durumda belirir. Siz açıp okuyup yayınlayana kadar sitede hiçbir şey görünmez. Bir şablon ya da istem yeniyken doğru ayar budur.

publish uçunu gösterirseniz içerik, iş akışı biter bitmez yayına girer; arada kimse olmaz. content-generate uçu da aynı sonucu verir, çünkü o uç bir kuyruk görevini kapatmak için var ve her zaman yayınlar.

İkisi de meşrudur. Hangisini seçtiğiniz ne kadar editöryel risk taşımaya razı olduğunuza bağlıdır ve dürüst duruş şudur: otomatik taslaklar yanlış, tekrarlı ya da yüzeysel olabilir; okumadan yayınlamak arama görünürlüğüne ve okur güvenine mal olur. Aklıselim yöntem, yeni bir iş akışını ilk birkaç düzine öğede draft üzerinden koşturmak, çıktıları okumak ve gözetimsiz üretimin sağlam durduğunu gördükten sonra o düğümü değiştirmektir.

Her hâlükârda içerik kalite kapısı yayın anında çalışır. Engellenen bir makale, gerekçe listesiyle birlikte 422 olarak döner - çok kısa, H2 yok, başlık ikizlenmiş, kapak görseli eksik gibi - ve yayınlanmaz. İş akışınızı bunu ağ hatası saymak yerine kaydedecek şekilde kurun; aynı gövdeyi tekrar göndermek aynı sonucu verir.

Başkasının içeriğini yeniden yazmak

RSS iş akışı iyi bir varsayılan olduğu için değil, insanlar istediği için var. Başkasının makalesini bir modelden geçirip yeniden yayınlamak okura pek bir şey katmaz; sözcükler değişmiş olsa bile. Arama motorlarının "ölçekli içerik kötüye kullanımı" dediği şeye de yakın durur.

Kullanacaksanız kopyalama değil küratörlük iş akışı yapın. Kaynağa bağlantı verin ve yayıncıyı anın. Kaynakta olmayanı ekleyin: kendi analiziniz, yerel bağlam, bir görüş, güncellenmiş rakamlar. Çıktıyı draft üzerinden geçirin ki her parçayı bir insan yayından önce okusun. Ve tavan konusunda gerçekçi olun - çoğunlukla yeniden yazılmış besleme içeriğinden oluşan bir alan adı, arada iş akışı ne yaparsa yapsın, hem okura hem arama motoruna içerik çiftliği gibi okunur.

Ters yön

jekcms'in n8n'e haber vermesi için jekcms tarafında iş akışı kurmanız gerekmez. Yönetim → API Anahtarları ekranını açın, Giden Webhook'lar bölümüne inin ve n8n Webhook düğümünüzün production adresini ilgilendiğiniz olaylarla birlikte ekleyin: yazı yayınlandı, yazı güncellendi, yazı silindi, yorum geldi, üye kaydı.

jekcms imzalı bir JSON gövdesi POST'lar ve her denemeyi HTTP durumuyla kaydeder; yani bozuk bir uç panelde görünür, sessiz kalmaz. İmza X-Jek-Signature başlığında, sha256= ardından gövdenin imza anahtarıyla alınmış HMAC-SHA256 değeri olarak gelir.

Doğrulamayı Webhook düğümünün hemen ardındaki bir Code düğümünde yapın. Önce Webhook düğümünün Raw Body seçeneğini açın - HMAC, jekcms'in gönderdiği baytların tam karşılığıdır; n8n'in ayrıştırıp yeniden serileştirdiği bir gövde tutmaz:

const crypto = require('crypto');

const raw = $json.body;                       // ham gövde, geldiği gibi
const sent = $json.headers['x-jek-signature'];
const expected = 'sha256=' + crypto
    .createHmac('sha256', $env.JEKCMS_WEBHOOK_SECRET)
    .update(raw)
    .digest('hex');

if (expected !== sent) {
    throw new Error('Gecersiz imza');
}
return [{ json: JSON.parse(raw) }];

n8n webhook adresiniz internetten erişilebilir olduğu her durumda - ki genelde öyledir - bu önemlidir.

Kısaca n8n kurulumu

n8n'i henüz çalıştırmıyorsanız en kısa yol Docker:

docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n

http://sunucu-ip:5678 adresini açın ve sahip hesabını güçlü bir parolayla oluşturun - n8n sonunda ona bağladığınız her servisin API anahtarını taşır. Yerel denemenin ötesindeki her şey için önüne HTTPS ters vekil koyun.

İnsanlara bir saate mal olan tek ağ notu: n8n Docker içinde, jekcms aynı makinede Docker dışında çalışıyorsa iş akışındaki site adresi localhost değil host.docker.internal olmalıdır.

Çalışmadığında

İş akışı 401 diyorsa anahtar ya PHP'ye ulaşmıyordur ya yanlıştır. API Anahtarları ekranında anahtarın var olduğunu, etkin olduğunu ve süresinin dolmadığını doğrulayın. Sonra last_used_at sütununa bakın: hiç güncellenmiyorsa istek kimlik doğrulama aşamasına hiç gelmiyor demektir. O zaman suçlu büyük ihtimalle başlıktır.

422 diyorsa blocks dizisini okuyun. O kalite kapısıdır, hata değil.

409 diyorsa o başlıkta ya da kısa adda bir yazı zaten vardır. Bu, ikizlenme korumasının işini yapmasıdır ve genellikle iş akışının daha önce işlediği bir konuyu yeniden seçtiği anlamına gelir; üretimden önce check-source koymak bunu engeller.

jekcms sizin uç noktanızı çağırmıyorsa API Anahtarları ekranında webhook satırını açın ve teslimat kaydını okuyun. Her deneme aldığı HTTP durumunu gösterir; alıcı tarafı düzelttikten sonra Yeniden gönder düğmesi saklanan gövdenin aynısını tekrar yollar.

Yeniliklerden ilk sen haberdar ol

Yeni özellikler, sürüm notları ve CMS rehberleri. Ayda birkaç e-posta gönderiyoruz.