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

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

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

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

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

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

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

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

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

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

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

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

طريقة أخرى هي استخدام استدعاء البدء (start callback) الخاص بالـ tracker وتسجيل رسالة عند البدء.

const tracker = new OpenReplay({
	projectKey: PROJECT_KEY,
});

tracker.start().then(({sessionID}) => console.log("OpenReplay tracker started with session: ", sessionID))
// OR you can use startCallback method
tracker.start({
	startCallback: ({ sessionID }) => console.log("OpenReplay tracker started with session: ", sessionID)
});
// for snippet, just add startCallback to initOpts

الاختبار في 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 عمليات إعادة التشغيل لا تُعرض بشكل صحيح

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

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

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

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

إذا كنت تستخدم canvas فوق طبقة الواجهة الأمامية (بقيمة 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
import { tracker } from '@openreplay/tracker'

tracker.configure({
  projectKey: PROJECT_KEY
})

// or with class instance:
import OpenReplay from '@openreplay/tracker'

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
// then 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 الخاص بنا أو الاطلاع على المنتدى الخاص بنا.