مشكلات تسجيلات الجلسات

جميع أنواع المشكلات التي تمنع التقاط عمليات إعادة التشغيل أو عرضها بشكل صحيح.

مشكلات تسجيلات الجلسات

تظهر التسجيلات في لوحة المعلومات بعد بضع دقائق (حوالي 4 دقائق) من اكتمال الجلسة. تُعتبر الجلسة منتهية عندما يغلق المستخدم علامة التبويب أو المتصفح، أو يُقطع اتصاله (لأكثر من دقيقتين)، أو يتجاوز ساعتين (وفي هذه الحالة تبدأ جلسة جديدة). تؤدي كل علامة تبويب إلى تسجيل جديد، بينما لا تؤدي إعادة تحميل علامة تبويب موجودة إلى إنشاء تسجيل جديد.

يهدف هذا القسم إلى مساعدتك في استكشاف المشكلات الشائعة في عمليات إعادة تشغيل الجلسات وإصلاحها.

عمليات إعادة التشغيل لا تظهر في القائمة

Section titled عمليات إعادة التشغيل لا تظهر في القائمة

قبل أن تبدأ في تصحيح أخطاء تسجيلات الجلسات، تأكد من أنك تلتقط كل حركة المرور. انقر على زر Manage في قسم Sessions ثم فعّل Capture All.

من الأخطاء الشائعة الأخرى تشغيل الـ tracker مرتين، مما يمنع تسجيل الجلسات. عادةً ما يحدث ذلك عندما ينتقل المطورون من الإعداد المعتمد على السكربت إلى استخدام حزمة npm، لذا تأكد من أن لديك واحدًا منهما فقط.

التحقق من التثبيت

Section titled التحقق من التثبيت

إذا لم تكن متأكدًا من الإعداد، فافتح أداة فحص المتصفح وتحقق من علامة التبويب Network لمعرفة ما إذا كانت هناك طلبات XHR (ابحث عن “ingest”) موجَّهة إلى عنوان IP/النطاق الخاص بك (أو ‎*.openreplay.com‎ إذا كنت تستخدم OpenReplay Cloud).

طريقة أخرى هي تحديث مُنشئ الـ tracker وتسجيل رسالة عند البدء.

const tracker = new OpenReplay({
	projectKey: PROJECT_KEY,
	onStart: ({ sessionID }) => console.log("OpenReplay tracker started with session: ", sessionID),
});

الاختبار في localhost

Section titled الاختبار في localhost

يحتاج OpenReplay إلى وصول عام لنسخ بعض موارد تطبيقك (CSS والخطوط والأيقونات) من أجل عرض التسجيلات بشكل صحيح. يجب أيضًا أن يستخدم موقعك SSL/HTTPS، وإلا فلن يبدأ الـ tracker. لهذه الأسباب، لن يتم التقاط الجلسات في localhost، إلا إذا طبّقت هذا الحل البديل.

الموقع ليس على HTTPS

Section titled الموقع ليس على HTTPS

لأسباب أمنية، يعمل الـ tracker فقط على تطبيقات الويب التي تستخدم SSL (HTTPS). إذا كان موقعك على HTTP، فلن يبدأ الـ tracker.

إذا رأيت خطأً مشابهًا لما هو موضح أدناه، فهذا يعني أن OpenReplay لم يتمكن من البدء بسبب غياب سياسة أمان المحتوى. اطّلع هنا على السياسة التي يجب إضافتها.

CSP Issue

قد يكون سكربت التسجيل محظورًا بواسطة امتداد متصفح مثل مانع الإعلانات. استخدم أداة فحص المتصفح للتحقق مما إذا كانت الطلبات تفشل. إذا كان الأمر كذلك، فأضف استثناءً للنطاق الذي تم تثبيت الواجهة الخلفية لـ OpenReplay عليه (أو openreplay.com إذا كنت تستخدم العرض السحابي).

بسبب متصفح غير مدعوم

Section titled بسبب متصفح غير مدعوم

يطرح OpenReplay استثناءً عند تشغيله في متصفح غير مدعوم. اطّلع هنا على قائمة المتصفحات المدعومة.

عمليات إعادة التشغيل لا تُعرض بشكل صحيح

Section titled عمليات إعادة التشغيل لا تُعرض بشكل صحيح

الأنماط (Styles) مفقودة

Section titled الأنماط (Styles) مفقودة

يحتاج OpenReplay إلى الوصول إلى الموارد، مثل ملفات css الخاصة بك، لكي تعمل عمليات إعادة التشغيل. في الواقع، يتم نسخ هذه الملفات ثم تخزينها مؤقتًا بواسطة الواجهة الخلفية لدينا حتى تتمكن من رؤية التسجيلات القديمة حتى لو تغيّر تطبيق الويب الخاص بك. لهذا السبب يجب أن تتأكد من أن أنماطك (وكذلك الأيقونات والخطوط) قابلة للوصول العام. إذا كانت أصولك مستضافة على نطاق مقيّد (خاص أو محمي)، فلن يتمكن OpenReplay من نسخها واستخدامها في عمليات إعادة التشغيل. يمكنك نسخها إلى نطاق قابل للوصول العام ثم استخدام خيار resourceBaseHref لتحديد النطاق في مُنشئ الـ tracker.

إذا كانت إطارات iFrame من نفس الأصل (same-origin) تحتوي على إطارات متداخلة، فتأكد من استخدام المسار المطلق (في عناصر <link> التي تشير إلى ملفات CSS الخاصة بك) في كل إطار مضمّن، أو استخدم خيار resourceBaseHref لتحديد النطاق في مُنشئ الـ tracker.

في حال كنت تختبر في localhost، فلن يتم عرض الأنماط لأن OpenReplay لا يمكنه الوصول إليها بما أنها موجودة على جهازك. اتبع هذا الدليل لإصلاح الوضع.

في حالات نادرة، قد تظهر عملية إعادة التشغيل فارغة (أو بيضاء). على الرغم من أن الصفحات لن يتم عرضها، لا يزال بإمكانك رؤية حركة مؤشر فأرة المستخدم. حاول ضبط خيار disableStringDict على true وتحقق مما إذا كان ذلك يساعد في التسجيلات الجديدة. عادةً ما يحل هذا المشكلة.

إذا كنت تستخدم canvas فوق طبقة الواجهة الأمامية (frontend) لديك (بقيمة zIndex أعلى)، فقد تلاحظ شاشة سوداء أثناء إعادة تشغيل الجلسات المسجلة. يحدث ذلك لأن واجهة برمجة تطبيقات الويب (web API) لا تسمح لنا بعد بالتقاط قناة ألفا (alpha channel). إذا كان هذا هو الحال مع تطبيق الويب الخاص بك، فأضف سمة HTML data-openreplay-hidden إلى عنصر canvas الذي يسبب المشكلة لإخفائه بالكامل من تسجيل الجلسة.

على عكس الأنماط، لا يتم تخزين الصور مؤقتًا بواسطة OpenReplay بل يتم استرجاعها أثناء إعادة تشغيل الجلسة. لذلك يجب أن تكون قابلة للوصول العام. إذا كانت موجودة على CDN، فتأكد من الاحتفاظ بالإصدارات القديمة من صورك حتى تتمكن من إعادة تشغيل تسجيلات الجلسات القديمة بشكل صحيح.

إذا كان تطبيق الويب الخاص بك يتضمن إطارات iframe، فلن تتمكن من إعادة تشغيل محتواها كجزء من تسجيلاتك. لا يزال بإمكانك بدء OpenReplay داخل iframe عن طريق تضمين tracker.start()، لكنه سيُعتبر علامة تبويب منفصلة، مما يعني أنه سيتم التقاطه في تسجيل منفصل.

عمليات إعادة التشغيل معطّلة عبر النطاقات الفرعية

Section titled عمليات إعادة التشغيل معطّلة عبر النطاقات الفرعية

المواقع التي تمتد عبر العديد من النطاقات الفرعية ستولّد جلسات متعددة للزيارة نفسها. يمكنك دمجها في تسجيل واحد عن طريق تمرير sessionHash إلى دالة start() الخاصة بالـ tracker. يمكن الاحتفاظ بـ sessionHash ثم استرجاعه من مساحة التخزين عبر النطاقات لديك (مثل ملفات تعريف الارتباط).

// Initialize the tracker as you would normally do
const tracker = new OpenReplay({
  projectKey: PROJECT_KEY
})
...
// Make sure the tracker is stopped when passing subdomains and collect the sessionHash
const sessionHash = tracker.stop(); // This can be saved in cookies or passed through URL (if needed)
...
// Initialize another tracker on the new subdomain with the same projectKey
const trackerNewDomain = new OpenReplay({
  projectKey: PROJECT_KEY
})
// Pass the sessionHash to the newly started session
trackerNewDomain.start({ 
  sessionHash, // This can be retrieved from cookies or URL (if needed)
})

في حال تعذّر متابعة الجلسة (غير موجودة أو منتهية)، سيبدأ الـ tracker جلسة جديدة تلقائيًا.

عمليات إعادة التشغيل غير مكتملة

Section titled عمليات إعادة التشغيل غير مكتملة

يمكن ملاحظة ذلك في عمليات إعادة التشغيل التي تحتوي على صفحة واحدة تمت زيارتها، والتي تنتهي بمجرد انتقال المستخدم إلى صفحة أخرى. عادةً ما يحدث هذا في المواقع التي ليست تطبيقات صفحة واحدة (SPAs). لإصلاح ذلك، يجب استدعاء tracker.start() في كل صفحة.

عمليات إعادة التشغيل مفقودة

Section titled عمليات إعادة التشغيل مفقودة

إذا لم تكن تستضيف OpenReplay ذاتيًا بل تستخدم الحل المستضاف لدينا، فمن المحتمل ألا يتم تسجيل بعض الجلسات لأن الطلبات الموجَّهة إلى خوادمنا قد تكون محظورة. عادةً ما يحدث ذلك بسبب مانعات الإعلانات أو شبكات VPN أو امتدادات المتصفح.

إذا كان لديك أي أسئلة حول هذه العملية، فلا تتردد في التواصل معنا عبر Slack الخاص بنا أو الاطلاع على المنتدى الخاص بنا.