# الإشعارات التلقائية (Webhooks)
تلقي تحديثات عملية التحقق فوراً على سيرفرك الخاص.
---
بدلاً من استهلاك موارد سيرفرك في عملية الاستعلام الدوري (SSE (Server-Sent Events)) من المتصفح، يمكنك إعداد **رابط إشعارات (Webhook URL)** في لوحة تحكم مشروعك.
بمجرد نجاح عملية التحقق من رقم المستخدم، سيقوم سيرفر ReOTP بإرسال طلب POST مباشر يحتوي على تفاصيل العملية إلى سيرفرك الخاص.
### التحقق من الأمان (Webhook Signature)
إذا قمت بتعيين مفتاح سري (Secret Key) للويب هوك في لوحة التحكم، فسنقوم بإرسال ترويسة x-webhook-signature مع الطلب تحتوي على توقيع HMAC مشفر باستخدام المفتاح الخاص بك وخوارزمية SHA256. يمكنك استخدامه للتأكد من أن الطلب مرسل منا ولم يتم التلاعب به.
## Code Examples
### Payload
```json
{
"event": "verification.success",
"phoneNumber": "+966500000000",
"actualPhoneNumber": "+966500000000",
"requestId": "cmrjpk97j0000okc514kfdkll",
"projectId": "cmrjpk97j00...",
"method": "WHATSAPP",
"timestamp": "2026-07-17T12:00:00.000Z"
}
```
### Node.js Express
```json
const express = require('express');
const crypto = require('crypto');
const app = express();
// Use express.raw or express.json to get the payload string
app.use(express.json({
verify: (req, res, buf) => {
req.rawBody = buf.toString();
}
}));
app.post('/webhook/reotp', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const secret = 'YOUR_WEBHOOK_SECRET';
// Calculate expected signature
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(req.rawBody)
.digest('hex');
// Verify webhook sender authenticity
if (signature !== expectedSignature) {
return res.status(401).send('Unauthorized');
}
const { event, phoneNumber, requestId } = req.body;
if (event === 'verification.success') {
console.log(`Successfully verified phone ${phoneNumber}!`);
// Mark user as verified in your local database
}
res.status(200).send('Received');
});
```