# الإشعارات التلقائية (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'); }); ```