B2B Worker Docs

Webhooks

App → CRM yönünde event bildirimi. Subscription modeli tercih edilen yoldur.

Auth / scope

  • Yönetim: JWT veya API key webhooks:manage
  • CRM’inizin inbound URL’i public olmalı; app oraya POST atar

Subscription (önerilen)

Endpoints

MethodPathAçıklama
GET/api/v1/webhooks/subscriptions/Liste
POST/api/v1/webhooks/subscriptions/Oluştur
GET/PATCH/DELETE/api/v1/webhooks/subscriptions/{id}/Detay
GET/api/v1/webhooks/deliveries/Teslimatlar
POST/api/v1/webhooks/deliveries/{id}/replay/Yeniden gönder

Oluşturma gövdesi

{
  "name": "Test CRM",
  "url": "https://crm.example.com/api/hooks/b2b",
  "secret": "whsec_shared",
  "event_types": ["EXECUTION_SUCCESS", "EXECUTION_FAILED"],
  "is_active": true
}
  • event_types boş veya null → tüm event’ler
  • matches(event_type): pasif abonelik false; aksi halde empty list veya listedeyse true

App’in CRM’e POST’u

POST https://crm.example.com/api/hooks/b2b
Content-Type: application/json
X-Signature: sha256=<hex>

Gövde:

{
  "event": "EXECUTION_SUCCESS",
  "data": { }
}

data içeriği tetikleyen outbound/push_event bağlamına göre değişir (execution özeti, payload vb.).

İmza doğrulama

HMAC-SHA256 over raw body string; secret abonelikteki secret.

import hmac, hashlib

def verify(secret: str, body: bytes, header: str) -> bool:
    expected = "sha256=" + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, header)

Retry

Başarısız teslimat: en fazla 5 deneme. Backoff: 1m → 5m → 30m → 2h → 2h. Sonrasında dead-letter. Panelden veya replay ile yeniden gönderin.

Legacy outbound webhook

Eski model: organizasyonda tek URL.

Alanlar (org settings / WABA settings serializer üzerinden):

  • outbound_webhook_url
  • outbound_webhook_secret

Ne zaman kullanılır? Aktif WebhookSubscription hiç yoksa. En az bir subscription varsa legacy URL kullanılmaz; fan-out yalnızca subscription’lara gider.

Kod: maybe_send_outbound — subscription listesi boş ve outbound_webhook_url doluysa legacy delivery yaratır.

Yeni kurulumlarda subscription kullanın; legacy yalnızca geriye dönük uyumluluk içindir.

UI

Panel: /webhooks · testcrm inbound: /inbound

İlgili: testcrm ↔ app