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