> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scanova.io/llms.txt
> Use this file to discover all available pages before exploring further.

# نظرة عامة على أحداث الخادم

> أرسل أحداث التحويل بأمان من الخادم لديك — عمليات الشراء والتسجيل والعملاء المحتملين — منسوبة إلى مسح رمز QR الذي بدأ رحلة الزائر.

تتيح أحداث الخادم لخادمك الإبلاغ عن التحويلات مباشرة إلى واجهة تتبّع Scanova باستخدام مفتاح API. وعلى خلاف أحداث المتصفح، لا تستطيع أدوات حجب الإعلانات إيقاف أحداث الخادم، ولا تتأثر بقيود المتصفح، وتنقل بيانات النسبة الحساسة بأمان.

## متى تستخدم أحداث الخادم

| استخدم أحداث المتصفح     | استخدم أحداث الخادم                 |
| ------------------------ | ----------------------------------- |
| مشاهدات الصفحة والتنقل   | تأكيدات الشراء                      |
| النقرات وعمق التمرير     | تفعيل الاشتراكات                    |
| التفاعل مع حقول النماذج  | إنشاء عميل محتمل في نظام CRM لديك   |
| أي إجراء ظاهر في المتصفح | تأكيد البريد الإلكتروني عند التسجيل |
| —                        | أي إجراء يقع على الخادم             |

استخدم الاثنين معًا للحصول على الصورة الأكمل: يتتبّع SDK المتصفح رحلة الزائر، ويبلّغ خادمك عن اللحظة التي وقع فيها التحويل فعلًا.

## كيف تعمل النسبة على الخادم

القيمة `scan_session_id` هي الرابط بين مسح رمز QR وحدث الخادم. وهذا هو المسار المعتاد:

```
الزائر يمسح رمز QR
    ↓
يصل إلى yoursite.com/?scnv=7ad26d4f-...
    ↓
يحفظ SDK قيمة scan_session_id في localStorage
    ↓
يكمل الزائر نموذج الشراء
    ↓
يرسل المتصفح scan_session_id إلى واجهة الدفع لديك
    ↓
يرسل خادمك حدث purchase ومعه scan_session_id نفسه
    ↓
تنسب Scanova عملية الشراء إلى مسح رمز QR
```

**ما يقع على عاتقك:** تمرير `scan_session_id` من المتصفح إلى خادمك. والطرق الشائعة لذلك:

* إدراجها في حقل نموذج مخفي
* إرسالها في جسم طلب الواجهة من JavaScript في الواجهة الأمامية
* حفظها في جلسة الزائر على خادمك (بقراءتها من معامل الرابط عند تحميل الصفحة)

```javascript theme={null}
// Read from SDK (browser-side)
// Note: _scnv is the SDK's internal storage key — structure may change.
// Use this pattern only if no higher-level SDK method is available.
const scanSessionId = localStorage.getItem('_scnv')
  ? JSON.parse(localStorage.getItem('_scnv')).sid
  : null;

// Include in your API call to your backend
await fetch('/api/checkout', {
  method: 'POST',
  body: JSON.stringify({ ...orderData, scan_session_id: scanSessionId })
});
```

## المتطلبات

* موقع تتبع مُنشأ في **التحليلات ← تتبع التحويلات**
* مفتاح API خاص بالموقع (يُنشأ من تبويب **إعداد التتبع ← تتبع عبر API** في الموقع)
* قدرة خادمك على إرسال طلبات POST عبر HTTPS
* طريقة لاستقبال `scan_session_id` من متصفح الزائر

## متطلبات الأمان

* **لا تكشف مفتاح API أبدًا في كود الواجهة الأمامية أو في JavaScript على جهة العميل**
* احفظ المفتاح في متغير بيئة أو في مدير أسرار
* بدّل المفاتيح دوريًا من لوحة التحكم

## الخطوات التالية

<CardGroup cols={2}>
  <Card title="إنشاء مفتاح API" icon="key" href="/ar/conversion-tracking/server/generate-api-key-dashboard">
    أنشئ من لوحة التحكم مفتاح API خاصًا بموقع واحد.
  </Card>

  <Card title="إرسال الأحداث" icon="paper-plane" href="/ar/conversion-tracking/server/send-events">
    أمثلة برمجية بلغات cURL وNode.js وPython وPHP.
  </Card>

  <Card title="تكرار الطلبات والإرسال مرة أخرى" icon="rotate" href="/ar/conversion-tracking/server/idempotency-retries">
    كيف تعيد إرسال الطلبات الفاشلة بأمان.
  </Card>

  <Card title="التحقق من الوصول" icon="check" href="/ar/conversion-tracking/server/verify">
    تأكد من وصول أحداثك.
  </Card>
</CardGroup>
