ℹ Language notice: Developer documentation on this page is currently maintained in Turkish. Code samples, HTTP headers and URLs are language-neutral; narrative sections will be translated to English. If you need help right now, email admin@teknikdanisman.net.

Webhook Events

Delivers events happening in the panel to your systems via HTTP POST. All requests are HMAC-SHA256 signed, failed deliveries retried 5 times with exponential backoff.

36
Total events
5
Max attempts
6.5h
Max backoff
10s
Request timeout

Registration & getting started

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ı.

Imzalama

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
}

Resource olayları

Tüm CRUD operasyonları aşağıdaki entity'ler için otomatik webhook tetikler. Olay adı <entity>.<action> formatındadır.

EntityTürkçeDescription
customer Müşteri Bir müşteri kaydı
employee Employees Bir employees kaydı
hardware Hardware Bir donanım varlığı
license Licenses Yazılım lisansı veya abonelik kaydı
service Hizmet Hizmet/sözleşme kaydı (DNS, hosting vb.)
server Server Server envanteri kaydı
payment Payment Payment/tahsilat kaydı
insurance_policy Sigorta Poliçesi Sigorta poliçesi/evrak kaydı
hr_leave IK Izin Talebi Employees izin talebi
hr_warning IK Ihtar Employees ihtarı/disiplin kaydı

Aksiyonlar

ActionTetikleyici
created Createuldu Yeni kayıt eklendiğinde
updated Updatendi Mevcut kayıt değiştirildiğinde
deleted Deleteindi Kayıt silindiğinde

Örnek payload — hardware.created

{
  "event": "hardware.created",
  "data": {
    "id": 1284,
    "entity_id": 1284,
    "actor_user_id": 7,
    "actor_email": "admin@firma.com",
    "changes": { "brand": "Lenovo", "model": "T14s", "serial": "PF1A2B3C" }
  },
  "fired_at": "2026-06-22 14:23:01",
  "tenant_id": 42
}

Support talebi olayları

Müşteri destek modülünün yaydığı olaylar — SLA/CRM entegrasyonu için kullanışlıdır.

EventTetikleyici
support_ticket.created Yeni talep oluşturuldu (panel UI, e-posta inbox veya müşteri portalı).
support_ticket.replied Talebe yanıt eklendi (agent veya talep sahibi).
support_ticket.status_changed Talep statüsü değişti (open → pending, vb.) ancak close değil.
support_ticket.closed Talep kapatıldı.
support_ticket.assigned Talep bir agent'a atandı veya başka agent'a devredildi.

Örnek payload — 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": { "author_id": 7, "body_preview": "Şimdi tekrar deneyebilir misiniz..." }
  },
  "fired_at": "2026-06-22 14:25:14",
  "tenant_id": 42
}

Sistem olayları

EventDescription
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

Bu sayfa lib/Audit.php ve lib/SupportTickets.php kaynak kodu ile manuel hizalanmıştır. Eklenmesi planlanan yeni olaylar için bkz. roadmap.