Webhook Events

Panel'de gerçekleşen olayları kendi sistemlerinize HTTP POST ile iletir. Tüm istekler HMAC-SHA256 ile imzalanır, başarısız teslimler exponential backoff ile 5 kez denenir.

50
Toplam event
5
Maks deneme
6.5sa
Max backoff
10s
İstek timeout

Kayıt & başlangıç

Webhook URL'i ve dinlenecek event listesi /webhooks.php sayfasından eklenir (admin yetkisi gerekir). Her endpoint için otomatik üretilen secret imza doğrulamada kullanılır. Wildcard destekli: "*" tüm olaylar, "hardware.*" tek entity'nin tüm aksiyonları.

İmzalama

Her POST isteği aşağıdaki header'ları içerir:

POST https://yourapp.example/webhook
Content-Type: application/json
User-Agent: TeknikDanisman-Webhook/1.0
X-TD-Event: hardware.created
X-TD-Signature: sha256=<HMAC_SHA256(body, secret)>
X-TD-Delivery: <16 hex>
X-TD-Signature-Previous: sha256=<...>   # opsiyonel — secret rotation grace period

Doğrulama (Node.js örneği):

const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-td-signature']));

Secret rotation

Secret'i değiştirdiğinizde eski secret 72 saat boyunca X-TD-Signature-Previous header'ı ile gönderilmeye devam eder — yeni secret'a kademeli geçiş yapabilirsiniz.

Retry politikası

5xx yanıt veya non-2xx alındığında deneme tekrar kuyruğa alınır. Backoff dizisi (saniye):

[ 60, 300, 900, 3600, 21600 ]   # 1dk → 5dk → 15dk → 1sa → 6sa

5. denemeden sonra teslim permanently failed olarak işaretlenir ve /webhook_deliveries.php sayfasından manuel retry edilebilir.

Payload zarf formatı

{
  "event": "hardware.created",
  "data": { /* event-specific payload */ },
  "fired_at": "2026-06-22 14:23:01",
  "tenant_id": 42
}

Kayıt olayları

Olay adı <varlık>.<eylem> biçimindedir. Panel formu, liste sayfasındaki hızlı işlemler (onay, arşiv, iptal), REST API, AI asistanı ve toplu silme aynı olay adlarını üretir; kaynak yükteki bağlamdan anlaşılır (ör. "source": "api"). Toplu silmede her kayıt için ayrı .deleted olayı gönderilir.

VarlıkOlaylarAçıklama
hardware
Donanım
hardware.created
hardware.updated
hardware.deleted
Donanım varlığı (zimmetten çıkarma ve şube taşıma dahil)
employee
Personel
employee.created
employee.updated
employee.deleted
Personel kaydı (çıkış ve şube taşıma dahil)
license
Lisans
license.created
license.updated
license.renewed
license.deleted
Yazılım lisansı veya abonelik kaydı
payment
Ödeme
payment.created
payment.updated
payment.deleted
Ödeme / tahsilat kaydı
customer
Şube
customer.created
customer.updated
customer.deleted
Şube / müşteri kaydı
service
Servis
service.created
service.updated
service.renewed
service.deleted
Alan adı, hosting, SSL, yedekleme kaydı
server
Sunucu
server.created
server.updated
server.deleted
Sunucu envanteri kaydı
insurance_policy
Sigorta Poliçesi
insurance_policy.created
insurance_policy.updated
insurance_policy.renewed
insurance_policy.deleted
Sigorta poliçesi / evrak kaydı
hr_leave
İK İzin Talebi
hr_leave.created
hr_leave.updated
hr_leave.deleted
Personel izin talebi
hr_warning
İK İhtar
hr_warning.created
hr_warning.updated
hr_warning.issued
hr_warning.deleted
Personel ihtarı / disiplin kaydı

Güncelleme yükü — hr_leave.updated

changes yalnız değişen alanları {from, to} olarak verir. before / after yalnız işlemin dokunduğu alanları içerir; şifre, lisans anahtarı, T.C. kimlik no ve uzak erişim kimliği gibi alanlar •••• olarak maskelenir.

{
  "event": "hr_leave.updated",
  "data": {
    "id": 18,
    "status": "onaylandi",
    "employee_id": 15,
    "changes": { "status": { "from": "bekliyor", "to": "onaylandi" } },
    "before": { "status": "bekliyor" },
    "after":  { "status": "onaylandi" }
  },
  "fired_at": "2026-09-29 14:23:01",
  "tenant_id": 42
}

Oluşturma yükü — hardware.created

{
  "event": "hardware.created",
  "data": { "id": 1284, "brand": "Lenovo", "model": "T14s", "customer_id": 12 },
  "fired_at": "2026-09-29 14:23:01",
  "tenant_id": 42
}

Destek talebi olayları

Destek modülünün yaydığı olaylar — SLA/CRM entegrasyonu için. SLA süresi aşıldığında support_ticket.status_changed "extra": {"sla_breached": true} ile gönderilir.

OlayTetikleyici
support_ticket.created Destek talebi açıldı
support_ticket.replied Destek talebine yanıt yazıldı
support_ticket.assigned Destek talebi atandı
support_ticket.status_changed Destek talebi durumu değişti (SLA aşımı dahil)
support_ticket.closed Destek talebi kapandı
support_ticket.deleted Destek talebi silindi

Örnek yük — support_ticket.replied

{
  "event": "support_ticket.replied",
  "data": {
    "id": 88,
    "ticket_number": "TKT-2026-0088",
    "subject": "Outlook senkron sorunu",
    "status": "open",
    "priority": "high",
    "category": "email",
    "customer_id": 12,
    "requester_name": "Ayşe Yılmaz",
    "assigned_to": 7,
    "extra": { "sender_type": "user", "sender_name": "Mehmet (BT)", "internal": false, "body": "Şimdi tekrar deneyebilir misiniz?" }
  },
  "fired_at": "2026-06-22 14:25:14",
  "tenant_id": 42
}

Abonelik ve hesap olayları

Panel aboneliğinizdeki değişiklikler — muhasebe/ERP entegrasyonu ve iç bildirimler için. Kaynak yükteki source alanındadır: payment (ödeme bildirimi), renewal_cron (günlük yenileme kontrolü), self_service (Üyelik sayfası), admin (Teknik Danışman yönetimi).

OlayTetikleyici
subscription.renewed Abonelik ödemesi alındı, dönem uzadı
subscription.plan_changed Plan değişti
subscription.payment_failed Abonelik ödemesi başarısız
subscription.expiring Abonelik dönemi bitiyor (30/7/1 gün kala)
subscription.past_due Dönem sonu geçti, ödeme süresi başladı
subscription.cancel_scheduled Dönem sonunda iptal planlandı
subscription.cancel_reverted Planlanan iptal geri alındı
tenant.suspended Hesap askıya alındı
tenant.reactivated Hesap yeniden etkinleştirildi

Örnek yük — subscription.renewed

{
  "event": "subscription.renewed",
  "data": {
    "plan_code": "business",
    "previous_plan_code": "business",
    "cycle": "yearly",
    "period_end": "2027-10-14 00:00:00",
    "amount": 11988.00,
    "currency": "TRY",
    "source": "payment"
  },
  "fired_at": "2026-10-14 09:12:40",
  "tenant_id": 42
}

Sistem olayları

EventAçıklama
webhook.test webhooks.php → "Test Et" butonundan manuel tetiklenen test eventi. Production akışında üretilmez.

Teslim güvenliği

Idempotency

Aynı event aynı endpoint'e en fazla bir kez teslim edilir (queue PK). Retry'lar farklı X-TD-Delivery ID üretir; receiver tarafta delivery ID'yi 24 saat saklayarak duplicate ignore edebilirsiniz.

Rate limit

Her webhook endpoint'i için varsayılan 60 istek/dakika sınırı uygulanır. Aşıldığında o dakika boyunca yeni teslim ertelenir. /webhooks.php sayfasından endpoint başına özelleştirilebilir.

Timeout

Receiver'ın 10 saniye içinde 2xx yanıt vermesi gerekir. Daha uzun işlem için 200 OK döndürüp arka planda işleyin (async pattern).

Sorun giderme

Olay listesi uygulamanın kullandığı katalogdan otomatik üretilir. Eklenmesi planlanan yeni olaylar için bkz. roadmap.