تخطَّ إلى المحتوى الرئيسي
الرئيسية / أعمالنا / أرشيف محادثات محلي

أرشيف محادثات محلي: استيراد وفهرسة وقراءة 1.35 مليون رسالة

لدى عميلٍ سنوات من المحادثات المصدَّرة، موزعة على آلاف المجلدات بصيغ غير متسقة، يتعذر عمليًا قراءتها أو البحث فيها. بنت بايمنتري منصة تعمل على جهاز العميل تستورد الأرشيف كاملًا، وتفهرسه للبحث الفوري، وتعرضه بالعربية والإنجليزية. لا يُذكر اسم العميل بناءً على طلبه. أُنجز النطاق الموصوف هنا وسُلِّم. كل شاشة في هذه الصفحة مأخوذة من نسخة عرض ببيانات مخترعة؛ لا تظهر أي رسالة أو اسم أو رقم حقيقي.

الحاجة

لم يكن الأرشيف قاعدة بيانات، بل عقدًا من التصديرات: أكثر من عشرة آلاف مجلد محادثة، وجداول يجب أن ينجو نصها حرفًا بحرف، ومرفقات مُشار إليها بأسماء لم تعد تطابق الملفات على القرص، وخمسة تصديرات تحوي محارف تُعطِّل قارئات الجداول المعتادة تمامًا.

قيدان حكما كل قرار. لا شيء يغادر الجهاز: لا سحابة، ولا رفع، ولا خدمة خارجية، ولا حتى طلب خط. ولا شيء يُغيَّر: نص الرسائل وتواريخها يُحفظ كما صُدِّر بالضبط، دون استنتاج منطقة زمنية ودون تطبيع صامت.

ما الذي بُني

المستورد

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

البحث

فهرس SQLite FTS5 محلي بترميز trigram يضيّق المرشحين، ثم يُتحقق من كل نتيجة حرفيًا في النص الأصلي قبل عرضها، فلا يستطيع الفهرس اختلاق تطابق. يعمل البحث على الأرشيف كله أو داخل محادثة واحدة، ويقفز إلى الرسالة نفسها داخل سياقها بدل إرجاع مقتطف منفصل.

الواجهة

مساحة عمل React بقوائم افتراضية، فقائمة من عشرة آلاف صف لا تُنشئ عشرة آلاف عنصر DOM، وتحميل الرسائل على صفحات عبر واجهة محلية، ففتح محادثة من أربعين ألف رسالة لا يحمّل أربعين ألف رسالة. عربية وإنجليزية، فاتح وداكن، وتخطيطات مستقلة للكمبيوتر والجوال.

قرارات هندسية

قاعدة مستقلة لكل محادثة

كل محادثة تحتفظ بقاعدة SQLite خاصة بها وتبقى مستقلة. لا شيء يُدمج بمبادرة من المنصة: لا تُوحَّد الهويات، ولا تُدمج جهات الاتصال عبر المحادثات، ولا يُستنتج نوع المحادثة من عدد المرسلين وحده. وحيث يكون الدليل غير حاسم، يُسجَّل «غير مصنف» بدل التخمين.

بحثان منفصلان عن قصد

الحقل فوق قائمة المحادثات يعيد المحادثات المطابقة والرسائل المطابقة معًا، وهو السلوك الذي يتوقعه الناس أصلًا من تطبيقات المراسلة. والبحث الشامل سطح مستقل بصفحات نتائج خاصة به. جُرِّب دمجهما في حقل واحد ورُفض: لكل منهما شكل نتائج مختلف ونية مختلفة.

مرفقات بدليل لا بتخمين

تُحَلّ إحالات المرفقات إلى ثلاث حالات صريحة: روابط مؤكدة تسندها بيانات وصفية مطابقة، ومرشحات غير معتمدة يكون الدليل فيها جزئيًا، وإحالات غير محلولة لم يُعثر على ملفها. ولا تُقدَّم الإحالة غير المحلولة على أنها ملف محذوف، ولا يُقبل تغيّر الامتداد وحده دليلًا.

النص الأصلي كما هو

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

لا شيء يغادر الجهاز

ترتبط الخدمة بواجهة loopback فقط. وتُقدَّم الخطوط والأنماط والسكربتات محليًا دون أي طلب خارجي أثناء التشغيل، والوصول إلى المسارات محدود ومفحوص ضد الروابط الرمزية، ولا يمكن استدراج أي نقطة نهاية لقراءة خارج الأرشيف المعتمد. وجرى التحقق أثناء التطوير بإحصاءات مجهولة — أعداد وأزمنة وبصمات — حتى إن عملية البناء نفسها لم تتعامل مع محتوى الرسائل.

العربية والإنجليزية

العربية لغة أصيلة في المنتج لا طبقة ترجمة. يتغير معها اتجاه التخطيط وترتيب الأيقونات وسلوك التمرير وعرض التواريخ، وتقدّم اللغتان الميزات ذاتها. وتعتمد الطباعة خطوطًا متغيرة عربية ولاتينية مُضمَّنة محليًا، فلا يسبب تبديل اللغة أي طلب شبكي أو إعادة تخطيط مرئية.

العمل داخل الأرشيف

البحث الشامل يعيد الرسالة داخل سياق محادثتها

البحث الشامل يعيد الرسالة داخل سياق محادثتها

البحث الشامل يصل إلى الرسالة نفسها داخل محادثتها، لا إلى مقتطف منفصل.

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

الجودة

١. استُورد الأرشيف كاملًا وتُحقق منه طرفًا إلى طرف: طابق كل سجل مخزَّن فهرس البحث نصًا وترتيبًا، وفُحصت واجهة الرسائل لجميع مسارات المحادثات البالغة 10,685.

٢. اختُبر سلوك الواجهة بـPlaywright على Chrome وWebKit، بمقاسات الكمبيوتر والجوال، بالعربية والإنجليزية، مقابل بيانات وهمية فقط.

٣. غطّت فحوص الوصولية الآلية عبر axe-core التباين والتسميات والحوارات والتنقل بلوحة المفاتيح في كل شاشة.

٤. أكدت اختبارات اجتياز المسارات والروابط الرمزية وتقييد الأصل أن أي طلب لا يمكن أن يصل إلى ملف خارج النطاق المعتمد.

٥. تُحقق من أن الاستيراد قابل للاستئناف وغير مكرر: اختُبرت التشغيلات المقطوعة والمعادة والرسائل المتطابقة بايتًا ببايت، وكل حالة للنتيجة الصحيحة المتوقعة.

النتيجة

الأرشيف كامل مستورد وقابل للقراءة: 10,685 محادثة و1,352,442 سجلًا — 1,233,291 رسالة و119,151 إشعار نظام — بصفر محادثة متعذرة. و41,865 رابط مرفق مؤكد، و4,105 تمثيل جهة اتصال متاح دون دمج أي هوية.

يعود البحث الشامل بنتائجه في أقل من ثانية بوضوح بعد تسخين الفهرس. وتعمل المنصة دون اتصال بالكامل على جهاز العميل، ولم تُعدَّل ملفات التصدير الأصلية.

سُلِّم بالكامل: المستورد، والخدمة المحلية والفهرس، والواجهة، وأدوات التحقق التي لا تُخرج إلا إحصاءات مجهولة، وتوثيق كل قرار وكل حد معروف. أما ربط جهات الاتصال عبر المحادثات والنسخة المستقلة للجوال فموثقان كمرحلتين لاحقتين، لا مُوحى بوجودهما.

عندك أرشيف لا أحد يستطيع البحث فيه؟

صِف التصديرات التي تملكها وقيود الخصوصية المحيطة بها. تُقيَّم الصيغة والحجم والسرّية قبل تحديد أي نطاق.

ناقش متطلبك · البرمجة · أعمالنا