Webhooks

Webhooks

OnsraChat event'lerini gerçek zamanlı olarak sisteminize aktarın.

Webhook Kurulumu

Dashboard → Ayarlar → Webhooks sayfasından webhook URL'inizi ekleyebilirsiniz. Her event için POST isteği gönderilir.

Desteklenen Event'ler

conversation.createdYeni konuşma başladığında
conversation.resolvedKonuşma çözümlendiğinde
conversation.assignedTemsilci atandığında
message.createdYeni mesaj geldiğinde
contact.createdYeni kişi oluşturulduğunda
ticket.createdYeni destek talebi açıldığında
ticket.resolvedDestek talebi çözümlendiğinde

Payload Örneği

json
{
  "event": "message.created",
  "timestamp": "2024-01-15T10:30:00Z",
  "workspaceId": "ws_abc123",
  "data": {
    "message": {
      "id": "msg_xyz789",
      "content": "Sipariş hakkında bilgi almak istiyorum",
      "type": "TEXT",
      "sender": "VISITOR",
      "createdAt": "2024-01-15T10:30:00Z"
    },
    "conversation": {
      "id": "conv_abc123",
      "status": "OPEN"
    },
    "contact": {
      "id": "contact_xyz",
      "name": "Ahmet Yılmaz",
      "email": "ahmet@example.com"
    }
  }
}

İmza Doğrulama

Her webhook isteği X-Onsra-Signature header'ı ile imzalanır. Güvenlik için bu imzayı doğrulamanızı tavsiye ederiz.

typescript
import crypto from 'crypto';

function verifyWebhookSignature(
  payload: string,
  signature: string,
  secret: string
): boolean {
  const hmac = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(hmac),
    Buffer.from(signature)
  );
}

// Express.js örneği
app.post('/webhook/onsrachat', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-onsra-signature'] as string;
  const isValid = verifyWebhookSignature(
    req.body.toString(),
    signature,
    process.env.ONSRA_WEBHOOK_SECRET!
  );

  if (!isValid) {
    return res.status(401).json({ error: 'Invalid signature' });
  }

  const event = JSON.parse(req.body.toString());
  // Event'i işle...

  res.json({ received: true });
});

Yeniden Deneme Politikası

Webhook isteği başarısız olursa (2xx dışında yanıt veya timeout), OnsraChat üstel geri çekilme ile yeniden dener:

1. deneme: Hemen
2. deneme: 5 dakika sonra
3. deneme: 30 dakika sonra
4. deneme: 2 saat sonra
5. deneme: 12 saat sonra