n8n Trigger Nedir: Webhook ve Zamanlama ile Tetikleme

Otomasyon dünyasına adım attığınızda ilk karşılaştığınız kavramlardan biri “tetikleyici” yani trigger’dır. n8n’de bir iş akışı kendi kendine çalışmaz; ona “şimdi başla” diyecek bir şeye ihtiyacı vardır. İşte bu noktada trigger node’lar devreye girer. Yıllar içinde onlarca farklı otomasyon aracı kullandım, ama n8n’in trigger mekanizması beni en çok etkileyen özelliklerden biri oldu. Hem webhook bazlı hem de zamanlama bazlı tetikleme seçenekleri ile neredeyse her senaryoyu kapsayabiliyorsunuz.

Trigger Node Nedir ve Neden Bu Kadar Önemli?

n8n’de her workflow bir trigger node ile başlamak zorundadır. Bu node, iş akışının ne zaman ve hangi koşulda çalışacağını belirler. Trigger olmadan bir workflow sadece manuel olarak “Execute Workflow” butonuna basıldığında çalışır ki bu da otomasyon sayılmaz.

Trigger node’ları ikiye ayırabiliriz:

  • Aktif trigger’lar: Bir olay gerçekleştiğinde anında tetiklenir (webhook, email geldiğinde, veritabanında değişiklik olduğunda)
  • Pasif trigger’lar: Belirli aralıklarla çalışır ve bir şeyler kontrol eder (her 5 dakikada bir API’yi sorgula, her sabah 08:00’de rapor al)

Gerçek dünya senaryolarında bu ikisini doğru seçmek kritik önem taşır. Webhook kullanılabilecek bir yerde cron trigger kullanmak hem sistemi gereksiz yere yorar hem de gecikmeye yol açar.

Webhook Trigger: Anlık Tetikleme

Webhook trigger, dışarıdan gelen bir HTTP isteği ile workflow’u başlatan mekanizmadır. Basitçe söylemek gerekirse: n8n size bir URL verir, bu URL’ye POST veya GET isteği atıldığında workflow çalışmaya başlar.

Webhook Node Kurulumu

n8n arayüzünde yeni bir workflow açtığınızda, “Add first step” alanına tıklayıp “Webhook” yazarak node’u ekleyebilirsiniz. Karşınıza birkaç önemli parametre çıkar:

  • HTTP Method: GET, POST, PUT, DELETE seçenekleri mevcut. Genellikle veri göndermek için POST kullanılır
  • Path: Webhook URL’inizin son kısmı. Örneğin “yeni-siparis” yazarsanız URL /webhook/yeni-siparis şeklinde olur
  • Authentication: Webhook’a gelen istekleri kimin atabileceğini kontrol eder. Basic Auth, Header Auth gibi seçenekler var
  • Respond: Workflow çalışırken mi cevap versin, hemen mi cevap versin seçeneği

Webhook URL’niz tipik olarak şu formatta olur:

# Production URL (workflow aktifken)
https://sizin-n8n-adresiniz.com/webhook/yeni-siparis

# Test URL (geliştirme sırasında)
https://sizin-n8n-adresiniz.com/webhook-test/yeni-siparis

Webhook’u Test Etmek

Geliştirme aşamasında test URL’sini kullanmanız gerekir. Production URL’si sadece workflow aktif hale getirildiğinde çalışır. Test sırasında n8n “Listen for test event” moduna geçer ve siz isteği atana kadar bekler.

# curl ile basit POST isteği gönderme
curl -X POST https://sizin-n8n-adresiniz.com/webhook-test/yeni-siparis 
  -H "Content-Type: application/json" 
  -d '{"siparis_id": "12345", "musteri": "Ahmet Yılmaz", "tutar": 250.00}'

Bu isteği attıktan sonra n8n arayüzünde gelen veriyi görebilir ve sonraki node’larda {{ $json.siparis_id }} gibi ifadelerle kullanabilirsiniz.

Authentication ile Güvenlik

Webhook’unuzu açık bırakmak ciddi güvenlik riski oluşturur. Header Auth kullanımı en pratik yöntemlerden biridir:

# Header Auth ile istek gönderme
curl -X POST https://sizin-n8n-adresiniz.com/webhook/yeni-siparis 
  -H "Content-Type: application/json" 
  -H "X-Api-Key: gizli-anahtar-buraya" 
  -d '{"siparis_id": "12345"}'

n8n tarafında ise Credential Manager’a gidip yeni bir “Header Auth” credential oluşturuyorsunuz. Name alanına X-Api-Key, Value alanına da güçlü bir anahtar yazıyorsunuz.

Gerçek Dünya Senaryosu: E-ticaret Sipariş Bildirimleri

Müşteri siparişlerini takip eden bir senaryo düşünelim. WooCommerce veya herhangi bir e-ticaret platformu sipariş oluştuğunda webhook atar, n8n bu webhook’u yakalar ve:

# WooCommerce'in n8n'e attığı örnek payload
curl -X POST https://n8n.sirket.com/webhook/woo-siparis 
  -H "Content-Type: application/json" 
  -H "X-WC-Webhook-Signature: sha256-imzasi" 
  -d '{
    "id": 98765,
    "status": "processing",
    "billing": {
      "first_name": "Fatma",
      "last_name": "Kaya",
      "email": "[email protected]"
    },
    "total": "450.00",
    "line_items": [
      {"name": "Laptop Çantası", "quantity": 2}
    ]
  }'

Bu veriyi alan n8n workflow’u sırasıyla şunları yapabilir: Muhasebe sistemine kaydeder, müşteriye teşekkür emaili atar, Slack kanalına bildirim gönderir, kargo sisteminde takip numarası oluşturur.

Webhook ile Yanıt Döndürme

Bazen webhook isteği atan sistem bir cevap bekler. Örneğin bir form submit edildiğinde başarılı mı başarısız mı olduğunu öğrenmek ister. n8n’de “Respond to Webhook” node’unu kullanarak özelleştirilmiş cevaplar dönebilirsiniz:

# n8n'in döneceği örnek başarılı yanıt
{
  "success": true,
  "message": "Siparişiniz alındı",
  "tracking_id": "TRK-2024-98765"
}

Respond node’unda Response Code (200, 201, 400 vb.) ve response body’yi istediğiniz gibi şekillendirebilirsiniz. Bu özellik özellikle API entegrasyonlarında kritik rol oynar.

Schedule Trigger: Zamanlama ile Tetikleme

Webhook her zaman uygun değildir. Bazen “her gün sabah 07:00’de veritabanı yedeğini al” veya “her pazartesi öğleden sonra haftalık raporu hazırla” gibi senaryolarınız olur. Bunun için Schedule Trigger kullanırsınız.

Cron Syntax ile Zamanlama

n8n’in Schedule Trigger node’unda iki mod vardır:

  • Simple Mode: Dakika, saat, gün bazında basit seçimler yapabileceğiniz arayüz
  • Custom Mode: Cron expression yazabileceğiniz gelişmiş mod

Cron expression formatı beş alandan oluşur:

# Dakika  Saat  Ay-Günü  Ay  Hafta-Günü
# *       *     *        *   *

# Her gün sabah 07:30'da çalış
30 7 * * *

# Haftanın her iş günü (Pzt-Cuma) 08:00'de çalış
0 8 * * 1-5

# Her ayın ilk günü gece yarısı çalış
0 0 1 * *

# Her 15 dakikada bir çalış
*/15 * * * *

# Her Pazartesi ve Perşembe 14:00'de çalış
0 14 * * 1,4

Pratik Zamanlama Örnekleri

Gerçek ortamlarda en çok kullandığım zamanlama senaryoları:

# Her gece 02:00'de log temizliği (sunucu sakin olduğunda)
0 2 * * *

# Her Cuma 17:00'de haftalık özet raporu
0 17 * * 5

# Her sabah 06:45'te veri senkronizasyonu (mesai başlamadan önce)
45 6 * * 1-5

# Her 30 dakikada bir API sağlık kontrolü
*/30 * * * *

# Her ayın son günü (sondan 1. gün trick ile)
# Bu n8n'de biraz farklı çözülmeli, workflow içinde kontrol gerekir
0 23 28-31 * *

Timezone Dikkat!

Türkiye’deyseniz ve sunucunuz UTC üzerinde çalışıyorsa dikkatli olun. n8n’de Schedule Trigger node’unda timezone ayarını mutlaka yapın. Özellikle yaz saati uygulamasının kaldırıldığı dönemden bu yana Türkiye UTC+3 sabit kalıyor ama sunucunuz UTC’de ise 3 saat fark var demektir.

n8n arayüzünde Settings > n8n Settings yolundan varsayılan timezone’u ayarlayabilir ya da doğrudan Schedule Trigger node içinde her workflow için ayrı timezone belirtebilirsiniz.

Gerçek Dünya Senaryosu: Otomatik Rapor Sistemi

Bir şirkette her sabah departman yöneticilerine dünkü satış verilerini özet geçen bir sistem kuralım. Schedule Trigger ile başlayan workflow:

# Bu workflow her sabah 07:00'de tetiklenir
# PostgreSQL veritabanından dün ki satışları çeker
SELECT 
  COUNT(*) as siparis_sayisi,
  SUM(tutar) as toplam_ciro,
  AVG(tutar) as ortalama_siparis
FROM siparisler
WHERE DATE(created_at) = CURRENT_DATE - INTERVAL '1 day'
  AND durum = 'tamamlandi';

Bu veriyi çektikten sonra workflow bir sonraki adımda email hazırlar ve ilgili kişilere gönderir. Pazar günleri için workflow içinde bir IF node’u ekleyebilir ve pazar günü tetiklenirse farklı bir template kullanmasını sağlayabilirsiniz.

Workflow Trigger: İç İçe İş Akışları

Webhook ve Schedule dışında önemli bir trigger tipi daha var: Workflow Trigger veya “Execute Workflow” mekanizması. Bu, bir workflow’un başka bir workflow’u tetiklemesi için kullanılır.

Ana bir workflow var diyelim, büyük bir veriyi işliyor. Bu veriyi parçalara bölerek her parçayı ayrı bir sub-workflow’a gönderebilirsiniz. Bu sayede hem modülerlik sağlanır hem de bakım kolaylaşır.

# Ana workflow içinden alt workflow çağırma mantığı
# Loop Over Items node ile her kayıt için
# Execute Workflow node'u tetiklenir
# Sub-workflow işlemi tamamlayıp sonucu ana workflow'a döndürür

Polling Trigger: Değişikliği Yoklamak

Bazı servislerin webhook desteği yoktur. Örneğin eski bir API veya webhook atmayan bir sistem düşünün. Burada polling mantığını kullanırsınız: n8n belirli aralıklarla o sistemi kontrol eder ve değişiklik olup olmadığına bakar.

n8n’deki bazı entegrasyon node’ları (Gmail, RSS Feed, vb.) kendi içinde polling mekanizması barındırır. Bunlar hem trigger hem de polling özelliğini birleştirir.

# RSS Feed Trigger örnek kullanım
# Kaynak URL: https://techcrunch.com/feed/
# Poll Times: Her 30 dakikada bir kontrol et
# Yeni yazı varsa workflow'u tetikle

Hata Senaryoları ve Dikkat Edilecekler

Webhook Timeout Sorunu

Webhook ile başlayan bir workflow çok uzun sürerse kaynak sistem timeout alabilir. Örneğin bir GitHub webhook’u 10 saniyede cevap gelmezse yeniden gönderim yapar. Bu durumda “Respond to Webhook” node’unu erken koyup “immediately respond” modunu seçin, sonra arka planda işlemi sürdürün.

# Uzun süren işlemler için önce cevap ver, sonra işle
# 1. Webhook gelir
# 2. Hemen "202 Accepted" cevabı dön
# 3. Asıl işlemi arka planda devam ettir

Schedule Trigger’da Overlap Problemi

Bir workflow 5 dakikada bir çalışacak şekilde ayarlandı diyelim, ama tek bir çalışması 7 dakika sürüyor. Overlap yani üst üste binme sorunu yaşarsınız. n8n bunu yönetmek için workflow settings’de “Execution Order” ve timeout ayarları sunar. Uzun süren işlemler için zamanlama aralığını gerçekçi tutun.

Webhook URL Güvenliği

Production ortamında webhook URL’nizi asla açık bırakmayın:

# Webhook güvenliği için checklist
# 1. Authentication mutlaka ekleyin (Header Auth veya Basic Auth)
# 2. IP whitelist uygulayabilirsiniz (nginx veya firewall seviyesinde)
# 3. Rate limiting ekleyin
# 4. Webhook secret/signature doğrulaması yapın (GitHub, Stripe gibi sistemler imzalı istek atar)

# Nginx ile basit IP kısıtlaması
location /webhook/ {
    allow 1.2.3.4;  # Güvenilen kaynak IP
    deny all;
    proxy_pass http://localhost:5678;
}

Cron Expression Test Etme

Yazdığınız cron expression’ın doğru çalışıp çalışmadığını test etmek için:

# Linux terminalde cron expression test etme
# crontab -e ile açıp test edebilirsiniz
# Ya da online araçlar kullanın: crontab.guru

# Systemd timer ile de test edebilirsiniz
# n8n'in kendi arayüzünde de "Next execution" göstergesi var

Multiple Trigger: Bir Workflow’a Birden Fazla Başlangıç

n8n’de bir workflow’un hem webhook ile hem de schedule ile tetiklenebileceğini biliyor muydunuz? Aynı workflow’a birden fazla trigger node ekleyebilirsiniz. Her trigger aynı ana akışa bağlanır.

Örnek senaryo: Stok raporu hem her gece otomatik çalışır hem de manuel webhook tetiklendiğinde anında çalışabilir. Bu esneklik özellikle acil durum senaryolarında çok işe yarar.

# Workflow başlangıç noktaları:
# Trigger 1: Schedule (her gece 23:00)
# Trigger 2: Webhook (manuel tetikleme için)
# Her ikisi de aynı "Stok Kontrol" node'una bağlı
# Sonuç: İki farklı kaynaktan aynı işlem tetiklenebilir

Environment Variable ile Dinamik Webhook Yönetimi

Büyük organizasyonlarda farklı ortamlar (dev, staging, prod) için farklı webhook URL’leri ve konfigürasyonlar gerekebilir. n8n’de environment variable kullanımı bu konuda yardımcı olur:

# n8n başlatırken environment variable tanımlama
export N8N_WEBHOOK_BASE_URL=https://n8n.sirket.com
export N8N_BASIC_AUTH_ACTIVE=true
export N8N_BASIC_AUTH_USER=admin
export N8N_BASIC_AUTH_PASSWORD=guclu-sifre

# Docker Compose ile kullanım
services:
  n8n:
    image: n8nio/n8n
    environment:
      - N8N_WEBHOOK_BASE_URL=https://n8n.sirket.com
      - WEBHOOK_URL=https://n8n.sirket.com
      - TZ=Europe/Istanbul

Bu sayede aynı workflow farklı ortamlarda farklı URL’lerle çalışabilir, ortama göre konfigürasyonu dışarıdan yönetmiş olursunuz.

Sonuç

n8n’de trigger seçimi, iş akışı tasarımının temel taşlarından biridir. Webhook gerçek zamanlı, olay güdümlü senaryolar için; Schedule Trigger ise periyodik görevler için biçilmiş kaftandır. Doğru trigger’ı seçmek performansı doğrudan etkiler ve sistemin güvenilirliğini artırır.

Pratik tavsiyem: Eğer kaynak sistem webhook destekliyorsa her zaman webhook’u tercih edin. Polling veya schedule’a yalnızca zorunlu kaldığınızda başvurun. Güvenlik konusunda webhook URL’lerinizi mutlaka koruyun, production ortamında authentication olmayan bir webhook bırakmak ciddi bir açık kapıdır.

n8n’in trigger sistemi başlangıçta basit görünse de derinleştikçe ciddi esneklik sunduğunu görürsünüz. Timezone sorunları, overlap yönetimi, multiple trigger kullanımı gibi konuları sindirdikçe çok daha güçlü otomasyon sistemleri kurabilirsiniz. Bir sonraki adım olarak webhook ile aldığınız veriyi nasıl işleyeceğinizi, filtre ve dönüşüm node’larını incelemenizi öneririm.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir