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