مشكلات تسجيلات الجلسات
تظهر التسجيلات في لوحة المعلومات بعد بضع دقائق (~4 دقائق) من اكتمال الجلسة. تُعتبر الجلسة منتهية عندما يُغلق المستخدم علامة التبويب أو المتصفح، أو ينقطع اتصاله (لأكثر من دقيقتين)، أو تتجاوز الجلسة ساعتين (وفي هذه الحالة تبدأ جلسة جديدة). تؤدي كل علامة تبويب إلى تسجيل جديد، في حين أن إعادة تحميل علامة تبويب موجودة لا تؤدي إلى بدء تسجيل جديد.
يهدف هذا القسم إلى مساعدتك في استكشاف المشكلات الشائعة في عمليات إعادة تشغيل الجلسات وإصلاحها.
عمليات إعادة التشغيل لا تظهر في القائمة
Section titled عمليات إعادة التشغيل لا تظهر في القائمةقبل أن تبدأ في تصحيح أخطاء تسجيلات الجلسات، تأكد من أنك تلتقط كل حركة المرور. انقر على زر Manage في قسم Sessions وفعّل خيار Capture All.
من الأخطاء الشائعة الأخرى بدء tracker مرتين، وهو ما يمنع تسجيل الجلسات. يحدث هذا عادةً عندما ينتقل المطورون من الإعداد القائم على السكربت إلى استخدام حزمة npm، لذا تأكد من أنك تستخدم أحدهما فقط.
التحقق من التثبيت
Section titled التحقق من التثبيتإذا لم تكن متأكدًا من الإعداد، فافتح أداة الفحص في المتصفح وتحقق من علامة التبويب Network لمعرفة ما إذا كانت هناك طلبات XHR (ابحث عن “ingest”) مُرسَلة إلى عنوان IP/النطاق الخاص بك (أو *.openreplay.com إذا كنت تستخدم OpenReplay Cloud).
طريقة أخرى هي استخدام 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، ما لم تُضِف الخيار inlineCss: 3 إلى مُنشئ tracker بحيث يتم عندئذٍ التقاط أوراق الأنماط كجزء من كل عملية إعادة تشغيل (بدلاً من تخزينها مؤقتًا بشكل مركزي على الخادم).
الموقع لا يستخدم HTTPS
Section titled الموقع لا يستخدم HTTPSلأسباب أمنية، يعمل tracker فقط على تطبيقات الويب التي تستخدم SSL (HTTPS). إذا كان موقعك يعمل على HTTP، فلن يبدأ tracker.
CSP مفقودة
Section titled CSP مفقودةإذا رأيت خطأً مشابهًا لما هو أدناه، فهذا يعني أن OpenReplay لم يتمكن من البدء بسبب غياب سياسة أمان المحتوى. راجع هنا للاطلاع على السياسة التي يجب إضافتها.

OpenReplay محظور
Section titled OpenReplay محظورقد يكون سكربت التسجيل محظورًا بواسطة إضافة متصفح مثل مانع الإعلانات. استخدم أداة الفحص في متصفحك للتحقق مما إذا كانت الطلبات تفشل. إذا كان الأمر كذلك، فأضِف استثناءً للنطاق الذي تم تثبيت الواجهة الخلفية (backend) لـ OpenReplay عليه (أو openreplay.com إذا كنت تستخدم العرض السحابي).
بسبب متصفح غير مدعوم
Section titled بسبب متصفح غير مدعوميُطلِق OpenReplay استثناءً عند تشغيله في متصفح غير مدعوم. راجع هنا للاطلاع على قائمة المتصفحات المدعومة.
عمليات إعادة التشغيل لا تُعرَض بشكل صحيح
Section titled عمليات إعادة التشغيل لا تُعرَض بشكل صحيحالأنماط مفقودة
Section titled الأنماط مفقودةيحتاج OpenReplay إلى الوصول إلى موارد، مثل ملفات css الخاصة بك، حتى تعمل عمليات إعادة التشغيل. في الواقع، يتم نسخ هذه الملفات ثم تخزينها مؤقتًا بواسطة الواجهة الخلفية لدينا حتى تتمكن من رؤية التسجيلات القديمة حتى لو تغيّر تطبيق الويب الخاص بك. لهذا السبب يجب أن تتأكد من أن أنماطك (وكذلك الأيقونات والخطوط) متاحة للوصول العام. وحتى لو كانت كذلك، فإن بعض شبكات CDN (مثل CloudFlare) تعتبر طلبات التخزين المؤقت لدينا واردة من روبوت ومن ثم تحظرها. إذا كان هذا هو الحال، فتأكد من إضافة عنوان IP المصدر الخاص بجهازك الافتراضي VM (إذا كنت تستخدم إصدارنا مفتوح المصدر)، أو نسختك المخصصة (إذا كنت تستخدم خطتنا السحابية المخصصة)، أو عناوين IP التالية (إذا كنت تستخدم خطتنا السحابية serverless) إلى القائمة البيضاء: 18.197.95.153 و18.197.221.118.
إذا كانت أصولك مستضافة على نطاق مقيّد (خاص أو محمي)، فلن يتمكن OpenReplay من نسخها واستخدامها في عمليات إعادة التشغيل. لديك خياران:
- (الخيار المُوصى به) أضِف الخيار
inlineCss: 3إلى مُنشئ tracker بحيث يتم التقاط أوراق الأنماط كجزء من كل عملية إعادة تشغيل (بدلاً من تخزينها مؤقتًا بشكل مركزي على الخادم). - أو يمكنك نسخ أصولك إلى نطاق متاح للوصول العام ثم استخدام الخيار
resourceBaseHrefلتحديد النطاق في مُنشئ tracker.
إذا كانت iFrames ذات الأصل نفسه (same-origin) تحتوي على إطارات متداخلة، فتأكد من استخدام مسار مطلق (في عناصر <link> التي تشير إلى ملفات CSS الخاصة بك) في كل إطار مُضمَّن، أو استخدم الخيار resourceBaseHref لتحديد النطاق في مُنشئ tracker.
في حال كنت تختبر في localhost، فلن يتم عرض الأنماط لأن OpenReplay لا يستطيع الوصول إليها بما أنها موجودة على جهازك. اتّبع هذا الدليل لإصلاح الوضع.
شاشة بيضاء
Section titled شاشة بيضاءفي حالات نادرة، قد تظهر عملية إعادة التشغيل فارغة (أو بيضاء). على الرغم من عدم عرض الصفحات، لا يزال بإمكانك رؤية حركة مؤشر الفأرة الخاص بالمستخدم. حاول ضبط الخيار disableStringDict على true ومعرفة ما إذا كان ذلك يساعد مع التسجيلات الجديدة. عادةً ما يحل هذا المشكلة.
شاشة سوداء
Section titled شاشة سوداءإذا كنت تستخدم canvas فوق طبقة الواجهة الأمامية (frontend) لديك (بقيمة zIndex أعلى)، فقد تلاحظ شاشة سوداء أثناء إعادة تشغيل الجلسات المسجَّلة. يحدث ذلك لأن واجهة برمجة تطبيقات الويب (web API) لا تسمح لنا بعد بالتقاط قناة ألفا (alpha channel). إذا كان هذا هو الحال مع تطبيق الويب الخاص بك، فأضِف خاصية HTML data-openreplay-hidden إلى عنصر canvas الذي يسبب المشكلة لإخفائه تمامًا من تسجيل الجلسة.
الصور لا تظهر
Section titled الصور لا تظهرعلى عكس الأنماط، لا يتم تخزين الصور مؤقتًا بواسطة OpenReplay بل يتم جلبها أثناء إعادة تشغيل الجلسة. لذلك يجب أن تكون متاحة للوصول العام. إذا كانت موجودة على شبكة CDN، فتأكد من الاحتفاظ بالإصدارات القديمة من صورك حتى تتمكن من إعادة تشغيل تسجيلات الجلسات القديمة بشكل صحيح.
Iframes
Section titled Iframesإذا كان تطبيق الويب الخاص بك يتضمن iframes، فلن تتمكن من إعادة تشغيل محتواها كجزء من تسجيلاتك. لا يزال بإمكانك بدء OpenReplay داخل iframe من خلال تضمين tracker.start()، لكنه سيُعتبر علامة تبويب منفصلة، مما يعني أنه سيتم التقاطه في تسجيل منفصل.
عمليات إعادة التشغيل معطّلة عبر النطاقات الفرعية
Section titled عمليات إعادة التشغيل معطّلة عبر النطاقات الفرعيةستولّد المواقع المنتشرة عبر العديد من النطاقات الفرعية جلسات متعددة للزيارة نفسها. يمكنك دمجها في تسجيل واحد عن طريق تمرير sessionHash إلى طريقة start() الخاصة بـ tracker. يمكن الاحتفاظ بـ sessionHash ثم استرجاعه من وحدة التخزين عبر النطاقات (cross-domain) الخاصة بك (مثل ملفات تعريف الارتباط cookies).
// 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 أو إضافات المتصفح.
هل لديك أسئلة؟
Section titled هل لديك أسئلة؟إذا كانت لديك أي أسئلة حول هذه العملية، فلا تتردد في التواصل معنا عبر Slack الخاص بنا أو الاطلاع على المنتدى الخاص بنا.