Webhook ile Zapier ve Make Entegrasyonu Nasıl Yapılır
Otomasyon dünyasında webhook’lar, iki sistem arasındaki en hızlı ve en temiz iletişim yollarından biri. Zapier ve Make (eski adıyla Integromat) gibi no-code/low-code platformlar ise bu webhook’ları alıp onlarla bir şeyler yapmanı sağlıyor. Ama bu entegrasyonları düzgün kurmak, hata ayıklamak ve production’da güvenli çalıştırmak için biraz teknik bilgi şart. Bu yazıda sıfırdan başlayıp gerçek dünya senaryolarıyla webhook entegrasyonlarını nasıl kuracağını anlatacağım.
Webhook Nedir, Neden Kullanıyoruz?
Webhook, bir olay gerçekleştiğinde kaynak sistemin hedef sisteme HTTP POST isteği göndermesi prensibine dayanır. Polling’in (sürekli “yeni bir şey var mı?” diye sormak) aksine, webhook sadece bir şey olduğunda devreye girer. Bu hem kaynak kullanımı açısından verimli hem de anlık tepki süresi açısından çok daha iyi.
Klasik bir senaryo düşün: E-ticaret sitenizde bir sipariş oluştu. Bu sipariş bilgisinin hem CRM’e yazılması, hem muhasebe sistemine iletilmesi, hem de kargo firmasına bildirilmesi gerekiyor. Bunları manuel yapmak yerine, sipariş sistemi bir webhook ateşler ve Make ya da Zapier bu webhook’u yakalayıp tüm bu işlemleri otomatik halleder.
Zapier Webhook Kurulumu
Zapier’de Webhook Trigger Oluşturma
Zapier’de bir Zap oluştururken “Webhooks by Zapier” trigger’ını seçiyorsun. İki modu var:
- Catch Hook: Gelen her POST isteğini yakalar, en çok kullanılan mod
- Retrieve Poll: Belirli aralıklarla bir URL’yi sorgular (gerçek webhook değil)
- Catch Raw Hook: Ham veriyi yakalar, base64 encoding olmadan
Zapier sana benzersiz bir URL verir. Örneğin:
https://hooks.zapier.com/hooks/catch/1234567/abcdefg/
Bu URL’ye test verisi gönderelim:
curl -X POST https://hooks.zapier.com/hooks/catch/1234567/abcdefg/
-H "Content-Type: application/json"
-d '{
"event": "order_created",
"order_id": "ORD-2024-001",
"customer": {
"name": "Ahmet Yılmaz",
"email": "[email protected]"
},
"amount": 299.90,
"currency": "TRY"
}'
Zapier bu veriyi aldıktan sonra “Test Trigger” diyerek alanları tanımlarsın ve sonraki adımlarda order_id, customer.name gibi dynamic field’lara erişebilirsin.
Zapier’de Webhook Action Kullanımı
Bazen Zapier’in başka bir sisteme webhook göndermesi gerekir. Bu durumda “Webhooks by Zapier” action’ını kullanırsın:
- POST: JSON body ile veri gönder
- PUT: Var olan kaydı güncelle
- GET: Veri çek (ama bu artık webhook değil, API call)
- Custom Request: Header, method, body’yi tamamen kontrol et
Custom Request ile imzalı bir isteği nasıl göndereceğini görelim:
# Zapier'in göndereceği isteği simüle edelim
curl -X POST https://api.hedefuygulama.com/webhook
-H "Content-Type: application/json"
-H "X-API-Key: sk_live_abc123xyz"
-H "X-Timestamp: $(date +%s)"
-d '{
"event_type": "user_signup",
"user_id": "{{trigger_user_id}}",
"email": "{{trigger_email}}"
}'
Make (Integromat) Webhook Kurulumu
Make, Zapier’e göre çok daha güçlü bir veri manipülasyon motoru sunuyor. Özellikle kompleks senaryolarda Make’i tercih etmemin nedeni tam da bu.
Make’de Webhook Modülü Ekleme
Make’de senaryo oluştururken ilk modül olarak “Webhooks > Custom webhook” eklersin. “Add” deyip yeni bir webhook tanımlarsın, Make sana şöyle bir URL verir:
https://hook.eu1.make.com/abc123defgh456ijklmn
Webhook’un yapısını belirlemek için “Determine data structure” özelliğini kullanırsın. Bunun için örnek veriyi gönderip Make’in şemayı otomatik çıkarmasını sağlarsın:
curl -X POST https://hook.eu1.make.com/abc123defgh456ijklmn
-H "Content-Type: application/json"
-d '{
"timestamp": "2024-01-15T10:30:00Z",
"source": "monitoring_system",
"alert": {
"level": "critical",
"service": "api-gateway",
"message": "Response time exceeded 2000ms",
"value": 2345
},
"host": "prod-server-01"
}'
Make bu veriyi analiz edip data structure’ı otomatik oluşturur. Sonraki modüllerde alert.level, alert.service gibi alanlara direkt erişebilirsin.
Make’de Webhook Response Ayarlama
Make’nin güçlü özelliklerinden biri, webhook’a hemen response dönebilmesi. “Webhook Response” modülünü ekleyerek kaynak sisteme anında yanıt verebilirsin:
# Kaynak sistemin aldığı response örneği
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "received",
"message": "Webhook processed successfully",
"scenario_execution_id": "exec_xyz789"
}
Bu özellik özellikle Shopify, GitHub gibi sistemlerde önemli. Eğer belirli süre içinde 200 dönmezsen, platform webhook’u başarısız sayar ve retry mekanizmasını başlatır.
Güvenlik: Webhook İmzalamak
Production ortamında webhook URL’lerini herkese açık bırakmak büyük risk. Herhangi biri senin URL’ne fake veri gönderebilir. Bunu önlemek için iki yöntem var.
HMAC İmzalama
GitHub, Stripe ve benzeri platformlar HMAC-SHA256 imzalama kullanır. Gelen isteğin gerçekten beklediğin kaynaktan geldiğini doğrularsın.
Webhook imzasını doğrulayan basit bir Python script:
#!/usr/bin/env python3
# webhook_verify.py - Webhook imzası doğrulama testi
import hmac
import hashlib
import json
SECRET_KEY = "webhook_secret_key_buraya"
payload = '{"event": "test", "data": "hello"}'
signature_header = "sha256=abc123..."
# İmzayı hesapla
computed_sig = hmac.new(
SECRET_KEY.encode('utf-8'),
payload.encode('utf-8'),
hashlib.sha256
).hexdigest()
expected_sig = f"sha256={computed_sig}"
print(f"Beklenen imza: {expected_sig}")
Make ve Zapier’de bu imzayı nasıl doğrularsın? Her ikisi de custom header’ları okuyabilir. Make’de “Filter” modülü ile gelen X-Hub-Signature-256 header’ını kontrol edebilirsin.
IP Whitelist ile Ekstra Güvenlik
Eğer webhook’u gönderen sistemin IP adresleri belirliyse (Zapier’in IP aralıkları gibi), Nginx seviyesinde filtreleme yapabilirsin:
# /etc/nginx/sites-available/webhook-proxy.conf
server {
listen 443 ssl;
server_name webhooks.sirketim.com;
# Zapier IP aralıkları
allow 34.102.136.0/24;
allow 34.170.144.0/24;
# Make IP aralıkları
allow 88.99.82.0/24;
deny all;
location /webhook/ {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 30s;
proxy_connect_timeout 10s;
}
}
Gerçek Dünya Senaryosu 1: GitHub’dan Slack’e Deployment Bildirimi
Bir ekibin deployment sürecini otomatikleştirme senaryosu. GitHub Actions deployment tamamlandığında Make üzerinden Slack’e mesaj gönderilecek.
GitHub repository’de webhook tanımla:
# GitHub CLI ile webhook oluşturma
gh api repos/kullaniciadi/repo-adi/hooks
--method POST
-f name="web"
-f "config[url]=https://hook.eu1.make.com/abc123"
-f "config[content_type]=json"
-f "config[secret]=gizli_anahtar_123"
-F active=true
-f "events[]=deployment_status"
Make senaryosunda gelen veriyi parse edip Slack’e yollarsın. Ama öncesinde test verisi gönderip yapıyı anlamak lazım:
# GitHub webhook payload simülasyonu
curl -X POST https://hook.eu1.make.com/abc123
-H "Content-Type: application/json"
-H "X-GitHub-Event: deployment_status"
-d '{
"deployment_status": {
"state": "success",
"environment": "production",
"created_at": "2024-01-15T14:22:00Z"
},
"deployment": {
"ref": "main",
"sha": "a3f8c2d"
},
"repository": {
"name": "proje-api",
"full_name": "sirket/proje-api"
},
"sender": {
"login": "devops-ahmet"
}
}'
Make’de şu akışı kurarsın:
- Webhook modülü veriyi alır
- Router modülü
statedeğerine göre farklı yollara ayrılır (success, failure, pending) - Her yol için farklı Slack mesajı gönderilir
- Slack mesajı renk kodlu olur: yeşil başarı, kırmızı hata
Gerçek Dünya Senaryosu 2: Zapier ile Müşteri Onboarding Otomasyonu
Bir SaaS ürününde yeni müşteri kayıt olduğunda şu işlemlerin otomatik yapılması gerekiyor: CRM’e kayıt, Slack’te ekibe bildirim, hoşgeldin emaili gönderme, Notion’da müşteri kartı oluşturma.
Kendi backend’inden Zapier’e webhook atmak için:
#!/bin/bash
# send_webhook.sh - Backend'den Zapier'e webhook gönderme
ZAPIER_URL="https://hooks.zapier.com/hooks/catch/1234567/abcdefg/"
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
PAYLOAD=$(cat <<EOF
{
"event": "customer_signup",
"timestamp": "${TIMESTAMP}",
"customer": {
"id": "CUST-$(date +%s)",
"name": "${1}",
"email": "${2}",
"plan": "${3:-starter}",
"source": "website"
},
"metadata": {
"utm_source": "${4:-organic}",
"signup_page": "/pricing"
}
}
EOF
)
RESPONSE=$(curl -s -w "n%{http_code}" -X POST "${ZAPIER_URL}"
-H "Content-Type: application/json"
-d "${PAYLOAD}")
HTTP_CODE=$(echo "${RESPONSE}" | tail -n1)
BODY=$(echo "${RESPONSE}" | head -n-1)
if [ "${HTTP_CODE}" == "200" ]; then
echo "Webhook başarıyla gönderildi"
echo "Response: ${BODY}"
else
echo "HATA: HTTP ${HTTP_CODE}"
echo "Response: ${BODY}"
exit 1
fi
Scripti şöyle çalıştırırsın:
chmod +x send_webhook.sh
./send_webhook.sh "Mehmet Kaya" "[email protected]" "professional" "google_ads"
Hata Yönetimi ve Retry Mekanizması
Webhook’ların en büyük zorluğu, karşı taraf down olduğunda ne yapacağın. İyi bir webhook alıcısı şu özelliklere sahip olmalı:
- İdempotency: Aynı webhook iki kez gelse bile işlem bir kez yapılmalı
- Hızlı response: 200 OK hemen dönüp işlemi arka planda yap
- Retry loglaması: Hangi webhook’ların başarısız olduğunu takip et
Basit bir webhook receiver servisi:
#!/bin/bash
# webhook_receiver_test.sh
# Netcat ile hızlı test receiver
# Sadece development/test için!
PORT=8080
echo "Webhook receiver port ${PORT}'de dinleniyor..."
while true; do
REQUEST=$(echo -e "HTTP/1.1 200 OKrnContent-Type: application/jsonrnrn{"status":"received"}"
| nc -l -p ${PORT} -q 1)
echo "--- Yeni İstek $(date) ---"
echo "${REQUEST}" | head -20
echo "------------------------"
done
Make ve Zapier’de retry konusunda şunları bilmek lazım:
- Zapier başarısız webhook’ları 24 saat boyunca retry eder, maksimum 3 kez
- Make’de “Error Handler” modülü ekleyerek hataları yakalayabilirsin
- Her ikisinde de “Task History” veya “Scenario History” bölümünden geçmiş çalışmaları görebilirsin
Make’de Webhook Veri Dönüşümü
Make’nin en güçlü yanlarından biri veri dönüşümü. Gelen webhook verisini tamamen farklı bir formata çevirebilirsin.
Örneğin, WooCommerce’den gelen sipariş webhook’unu Muhasebe API’sinin beklediği formata çevirmek için Make’de “Set variable” ve “JSON” modülleri kullanılır. Bunu test etmek için:
# WooCommerce benzeri sipariş verisi gönder
curl -X POST https://hook.eu1.make.com/woocommerce_test
-H "Content-Type: application/json"
-d '{
"id": 12345,
"status": "completed",
"total": "459.90",
"currency": "TRY",
"billing": {
"first_name": "Fatma",
"last_name": "Demir",
"email": "[email protected]",
"phone": "+905551234567",
"address_1": "Atatürk Cad. No:1",
"city": "Istanbul"
},
"line_items": [
{
"product_id": 789,
"name": "Laptop Stand",
"quantity": 1,
"total": "299.90"
},
{
"product_id": 456,
"name": "USB Hub",
"quantity": 2,
"total": "160.00"
}
]
}'
Make’de bu veriyi muhasebe formatına çevirirken şu dönüşümleri yaparsın:
totalstring değerini number’a çevir:parseFloat(total)- İsim birleştir:
first_name & " " & last_name - Tarih formatla:
formatDate(now; "DD.MM.YYYY") - Satırları döngüyle işle: Iterator modülü kullan
Monitoring ve Alerting
Production’da webhook entegrasyonlarını körü körüne çalıştırmak olmaz. Basit bir monitoring scripti:
#!/bin/bash
# webhook_health_check.sh
# Webhook endpoint'lerinin sağlıklı çalıştığını kontrol et
ENDPOINTS=(
"https://hooks.zapier.com/hooks/catch/1234567/healthcheck/"
"https://hook.eu1.make.com/healthcheck_abc123"
)
LOG_FILE="/var/log/webhook_health.log"
ALERT_EMAIL="[email protected]"
for endpoint in "${ENDPOINTS[@]}"; do
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}"
-X POST "${endpoint}"
-H "Content-Type: application/json"
-d '{"type": "health_check"}'
--max-time 10)
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
if [ "${HTTP_CODE}" == "200" ]; then
echo "[${TIMESTAMP}] OK - ${endpoint}" >> "${LOG_FILE}"
else
echo "[${TIMESTAMP}] FAIL (${HTTP_CODE}) - ${endpoint}" >> "${LOG_FILE}"
echo "Webhook endpoint down: ${endpoint}" |
mail -s "Webhook Alert" "${ALERT_EMAIL}"
fi
done
Bu scripti crontab’a ekle:
# Her 5 dakikada bir kontrol et
*/5 * * * * /opt/scripts/webhook_health_check.sh
Zapier vs Make: Hangisini Seçmeli?
Birini seçerken şu kriterlere bak:
- Veri hacmi: Ayda 100’den az işlem için Zapier ücretsiz planı yeterli. Binlerce işlem için Make daha ekonomik
- Kompleksite: Basit A’dan B’ye aktarım için Zapier. Döngüler, koşullar, veri manipülasyonu gereken yerlerde Make
- Hata yönetimi: Make’nin error handling modülleri çok daha gelişmiş
- Webhook response hızı: İkisi de benzer, her ikisi de saniyeler içinde çalışır
- Debug araçları: Make’nin görsel akış editörü hata ayıklamayı kolaylaştırır
Ekibinde teknik olmayan kişiler var ve basit otomasyon yeterliyse Zapier. DevOps ekibi için kompleks iş akışları kuruyorsan Make’i tercih et.
Sonuç
Webhook entegrasyonları doğru kurulduğunda sistem yönetiminin en güçlü araçlarından biri. Zapier ile hızlıca prototip çıkarabilir, Make ile production-grade otomasyon kurabilirsin. Ama her iki platformda da şunları unutma:
- Webhook URL’lerini asla herkese açık bırakma, imzalama veya IP whitelist uygula
- Her webhook’a 200 OK’ı hızlıca dön, uzun işlemleri arka plana al
- İdempotency için benzersiz event ID’leri kullan ve işlenen ID’leri kaydet
- Health check scriptleriyle entegrasyonları sürekli izle
- Retry mekanizmalarını test et, başarısız senaryoları simüle et
Bu temel prensipler üzerine kurulu bir webhook altyapısı, hem güvenilir hem de ölçeklenebilir olacaktır. Sorun yaşarsan webhook loglarına ve platform’ların task history bölümlerine başvur, genellikle sorunun kaynağını orada bulursun.
