Webhook'lar
jekcms'te webhook'lar içeri doğru çalışır: dış araçlar sitenize içerik ve komut gönderir. Bir n8n akışı makaleyi yazıp bitirdiğinde sonucu sitenize POST eder; yazı — hangisini istediyseniz — taslak olarak, ileri tarihli planlanmış olarak ya da doğrudan yayında belirir. Aynı uçlar medya yüklemeyi, toplu içe aktarmayı ve durum sorgulamayı da yürütür.
Ters yön için (bir şey olduğunda jekcms'in başka servislere haber vermesi) bu uçları bir n8n zamanlı tetikleyicisiyle ya da REST API ile birleştirin — okuma uçları için API referansına bakın.
Uçlar
Tüm webhook çağrıları JSON gövdeli POST https://siteniz.com/api/v1/webhook/{aksiyon} biçimindedir. Desteklenen aksiyonlar:
publish— yazı oluştur ve hemen yayınlaschedule— ileri bir tarihe planlanmış yazı oluşturdraft— taslak yazı oluşturupdate— mevcut yazıyı güncelledelete— yazı silmedia— URL'den medya yüklemedia-base64— base64 veriden medya yüklebulk-publish— tek çağrıda birden çok yazı yayınlabulk-import— RSS/JSON'dan toplu yazı aktarai-enhance— içeriği AI metaverisiyle zenginleştirstatus— yazının güncel durumunu getircheck-source— kaynak URL daha önce aktarılmış mı diye baktrigger— özel otomasyon tetikleyicisi çalıştır
Kimlik doğrulama
Bir webhook çağrısını doğrulamanın iki yolu vardır; biri yeterlidir:
- API anahtarı — Yönetim → API Anahtarları (
admin/api-keys.php) altında oluşturduğunuz anahtarı Bearer token olarak gönderin. Başlık alanı ayarlamak kolay olduğu için n8n ve Zapier'de önerilen yol budur. - HMAC imzası — config'inizde
N8N_WEBHOOK_SECRETtanımlayın ve her isteği imzalayın:X-Webhook-Signaturebaşlığı (kabul edilen diğer ad:X-N8N-Signature), ham istek gövdesinin bu gizli anahtarla alınmış HMAC-SHA256 özetini taşımalıdır. Ne API anahtarı ne de geçerli imza varsa çağrı401 Invalid webhook signatureile reddedilir.
İmzalama örnekleri (gönderen taraf)
PHP
$body = json_encode(['title' => 'Merhaba', 'content' => '...']);
$signature = hash_hmac('sha256', $body, getenv('JEKCMS_WEBHOOK_SECRET'));
$ch = curl_init('https://siteniz.com/api/v1/webhook/draft');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-Webhook-Signature: ' . $signature,
],
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
Node.js
const crypto = require('crypto');
const body = JSON.stringify({ title: 'Merhaba', content: '...' });
const signature = crypto
.createHmac('sha256', process.env.JEKCMS_WEBHOOK_SECRET)
.update(body)
.digest('hex');
await fetch('https://siteniz.com/api/v1/webhook/draft', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Webhook-Signature': signature,
},
body,
});
Python
import hmac, hashlib, json, os, requests
body = json.dumps({'title': 'Merhaba', 'content': '...'})
signature = hmac.new(
os.environ['JEKCMS_WEBHOOK_SECRET'].encode(),
body.encode(),
hashlib.sha256,
).hexdigest()
requests.post(
'https://siteniz.com/api/v1/webhook/draft',
data=body,
headers={
'Content-Type': 'application/json',
'X-Webhook-Signature': signature,
},
)
İmza, gönderdiğiniz baytların birebir kendisinden hesaplanır — gövdeyi bir kez serileştirin ve o metni imzalayın; çıkışta yeniden kodlamak imzayı geçersiz kılar.
Editoryal güvenlik
Sürece insan katmak istiyorsanız publish yerine draft (ya da schedule) hedefleyin: içerik yönetim paneline sıradan bir taslak olarak düşer ve ancak bir editör yayınlayınca canlıya çıkar. İçerik kuyruğu (bkz. İçerik Kuyruğu) bunun üstüne bir inceleme hattı ekler.
n8n hızlı başlangıç
- Yönetim → API Anahtarları altında bir API anahtarı oluşturun.
- n8n'de bir HTTP Request düğümü ekleyin: yöntem
POST, URLhttps://siteniz.com/api/v1/webhook/draft, kimlik doğrulama Bearer token ve anahtarınız. - Akış alanlarınızı JSON gövdeye eşleyin (
title,content,category,tags,featured_image…). - Akışı çalıştırın — yazı, panelinizde taslak olarak görünür.