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

50
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
}

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ıkOlaylarDescription
hardware
Hardware
hardware.created
hardware.updated
hardware.deleted
Hardware varlığı (zimmetten çıkarma ve branches taşıma dahil)
employee
Employees
employee.created
employee.updated
employee.deleted
Employees kaydı (çıkış ve branches taşıma dahil)
license
Licenses
license.created
license.updated
license.renewed
license.deleted
Yazılım lisansı veya abonelik kaydı
payment
Payment
payment.created
payment.updated
payment.deleted
Payment / tahsilat kaydı
customer
Customer
customer.created
customer.updated
customer.deleted
Customer / müşteri kaydı
service
Service
service.created
service.updated
service.renewed
service.deleted
Alan adı, hosting, SSL, yedekleme kaydı
server
Server
server.created
server.updated
server.deleted
Server 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
IK Izin Talebi
hr_leave.created
hr_leave.updated
hr_leave.deleted
Employees izin talebi
hr_warning
IK Ihtar
hr_warning.created
hr_warning.updated
hr_warning.issued
hr_warning.deleted
Employees ihtarı / disiplin kaydı

Updateme 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
}

Createma 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
}

Support talebi olayları

Support 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 Support ticket opened
support_ticket.replied Support ticket replied
support_ticket.assigned Support ticket assigned
support_ticket.status_changed Support ticket status changed (incl. SLA breach)
support_ticket.closed Support ticket closed
support_ticket.deleted Support ticket deleted

Ö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 Subscription payment received, period extended
subscription.plan_changed Plan changed
subscription.payment_failed Subscription payment failed
subscription.expiring Subscription period ending (30/7/1 days left)
subscription.past_due Period ended, grace period started
subscription.cancel_scheduled Cancellation scheduled at period end
subscription.cancel_reverted Scheduled cancellation reverted
tenant.suspended Account suspended
tenant.reactivated Account reactivated

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

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

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