# 2. فحص حالة التحقق الاستعلام عن حالة جلسة التحقق الحالية. --- بمجرد بدء عملية التحقق وحصولك على المعرف requestId، يجب على تطبيقك الاستماع بشكل لحظي (SSE (Server-Sent Events)) لحالة الجلسة لمعرفة ما إذا قام العميل بإرسال الرسالة بنجاح أم لا. ### الخطة أ: آلية العمل (SSE - الأسرع): - قم بإنشاء اتصال EventSource إلى نقطة النهاية الموضحة للبقاء على اتصال مستمر. - بمجرد الحصول على الحالة "VERIFIED"، قم بإنهاء الاتصال فوراً وسجّل دخول المستخدم بنجاح. ### بدائل الاستماع (Fallbacks): - **الخطة ب (Polling):** إذا كانت بيئة الاستضافة الخاصة بك لا تدعم الـ SSE، يمكنك الاستعلام التقليدي عبر إجراء طلب GET إلى /api/verify/status?id=... كل 3 ثوانٍ. - **الخطة ج (Webhooks):** يمكنك الاعتماد على الإشعارات التلقائية من خوادمنا إلى خادمك المباشر. اقرأ المزيد في قسم Webhooks. ### الحالات المرتجعة (Session States): - PENDING: العميل لم يرسل الرسالة بعد. استمر في الاستماع. - VERIFIED: تم إرسال الرسالة والتحقق من الرقم بنجاح. - EXPIRED: انتهت الصلاحية (بعد دقيقتين كحد أقصى). ## Code Examples ### cURL (SSE) ```javascript curl -N https://[your-domain.com]/api/verify/stream?id=YOUR_REQUEST_ID ``` ### JavaScript (Zero-Delay) ```javascript const checkStatus = (requestId) => { const evtSource = new EventSource(`https://[your-domain.com]/api/verify/stream?id=${requestId}`); evtSource.onmessage = (event) => { const data = JSON.parse(event.data); if (data.status === "VERIFIED") { evtSource.close(); alert("Successfully Verified! ✅"); // Execute login logic here } else if (data.status === "EXPIRED") { evtSource.close(); console.error("Session expired!"); } else if (data.status === "REJECTED") { evtSource.close(); console.error("Rejected:", data.failureReason); } }; evtSource.onerror = () => { evtSource.close(); console.error("EventSource failed."); }; }; ``` ### Node.js (SSE) ```javascript const EventSource = require('eventsource'); const checkStatus = (requestId) => { const evtSource = new EventSource(`https://[your-domain.com]/api/verify/stream?id=${requestId}`); evtSource.onmessage = (event) => { const data = JSON.parse(event.data); if (data.status === 'VERIFIED') { evtSource.close(); console.log('User verified!'); } else if (data.status === 'EXPIRED') { evtSource.close(); console.error('Session expired!'); } else if (data.status === 'REJECTED') { evtSource.close(); console.error('Rejected:', data.failureReason); } }; }; ``` ### Python (SSE) ```javascript import sseclient import requests import json def check_status(request_id): url = f"https://[your-domain.com]/api/verify/stream?id={request_id}" response = requests.get(url, stream=True) client = sseclient.SSEClient(response) for event in client.events(): if not event.data: continue data = json.loads(event.data) status = data.get("status") if status == "VERIFIED": print("Successfully verified!") break elif status == "EXPIRED": print("Session expired!") break elif status == "REJECTED": reason = data.get("failureReason", "Unknown") print(f"Rejected: {reason}") break ```