كيف تفهم تصدير مساحة عمل Slack وتحوّله إلى نص
تصدير Slack ليس ملفًا. إنه شجرة مجلدات: مجلد لكل قناة، وداخل كل واحد ملف JSON لكل يوم، وحفنة من ملفات بيانات مساحة العمل الوصفية في الجذر. افتح أي ملف يوم وستجد مصفوفة كائنات رسائل يكون المؤلف فيها رمزًا مثل U04J8K2L9، والنصّ مخيَّطًا بترميز بين أقواس زاوية، والطابع الزمني وقت Unix بميكروثوانٍ مكتوبًا سلسلةً نصية.
تعيد هذه الصفحة تجميع ذلك في نصوص مقروءة، واحد لكل قناة، بترتيب التاريخ، وبأسماء حقيقية. أفلِت ملف .zip كاملًا — يُقرأ في تبويب المتصفح هذا ولا يُرفع أبدًا.
الأسماء في ملف آخر
هذا وحده ما يجعل تصدير Slack غير مقروء بلا أدوات. فالرسائل تعرّف مؤلفها بمعرّف مستخدم لا غير. أما ربط تلك المعرّفات بأسماء بشرية فيسكن في users.json في جذر الأرشيف، منفصلًا عن كل رسالة تحتاج إليه.
لذا يُقرأ users.json أولًا، قبل أي ملف قناة، وتُحمل الخريطة الناتجة عبر التحليل كلّه. ولكل مستخدم عدة أسماء ممكنة — الاسم الحقيقي، والاسم المعروض، ومعرّف الحساب — وتُجرَّب بهذا الترتيب، لأن الاسم الحقيقي هو ما يتعرّف عليه القارئ والاسم المعروض هو ما يُظهره Slack حين يكون محدّدًا. وبعض التصديرات تضمّن كائن user_profile في الرسالة مباشرة؛ ويُفضَّل حين يوجد، لأنه يسجّل الاسم كما كان وقتها لا كما هو الآن.
أما رسائل الروبوتات فلا معرّف مستخدم لها إطلاقًا، بل تحمل معرّف روبوت وأحيانًا اسم مستخدم. وتُعالَج هذه على حدة كي يُنسب ناتج التكامل إلى صاحبه بدل أن يظهر فارغًا.
ترميز Slack الخاص
نصّ الرسالة ليس عاديًا. يلفّ Slack عدة أنواع من الإشارات بأقواس زاوية، وتركها كما هي يجعل النصّ عسير القراءة:
- إشارات المستخدمين تظهر بصيغة
<@U04J8K2L9>. وتُحلّ مقابل خريطة المستخدمين نفسها فتصير@الاسممقروءة. - مراجع القنوات تظهر بصيغة
<#C01234ABC|general>، أحيانًا مع الاسم بعد الشرطة العمودية وأحيانًا بدونه. - الروابط تأتي بصيغة
<https://example.com|نص الرابط>. ويُحتفظ بالنص ويوضع العنوان بين قوسين بعده، فلا تضيع الصياغة ولا الوجهة. - إشارات البثّ مثل
<!here>و<!channel>تصير مكافئاتها العادية. - كيانات HTML. علامات العطف والأقواس الزاوية وعلامات الاقتباس مهروبة في المصدر وتُفكّ عائدةً.
ضجيج يستحقّ الحذف
يسجّل Slack الأحداث رسائلَ ذات نوع فرعي. الانضمام إلى القنوات ومغادرتها، وتغييرات الغرض والموضوع، وإشعارات الأرشفة — كلها تجلس في المصفوفة نفسها مع الحديث الحقيقي. وفي مساحة عمل من أي حجم قد تفوق هذه الرسائلَ الفعلية، خصوصًا في القنوات العامة التي يُضاف إليها الجميع تلقائيًا. وتُصنَّف رسائلَ نظام وتُحذف افتراضيًا.
وهناك أيضًا حالة الرسالة الخالية من أي نصّ: رفع ملف، أو منشور روبوت يسكن محتواه كلّه في كتلة مرفق. وتُفحص المرفقات بحثًا عن نصّ قبل التخلّص من الرسالة، فيبقى تكاملٌ ينشر ناتجه مرفقًا مسهمًا بمحتواه بدل أن يتلاشى.
إعادة تجميع الأيام
لأن كل قناة موزّعة على ملف لكل يوم، يلزم لمّ تاريخ القناة من جديد. تُعالَج الملفات بترتيبها المفروز، وهو للملفات المسمّاة بالتاريخ ترتيب زمني، وتُلحق الرسائل في نصّ واحد لكل قناة. والنتيجة محادثة متصلة واحدة تحت عنوان يسمّي القناة، لا بضع مئات من الشذرات.
أما الملفات التي ليست بيانات قنوات — قائمة القنوات، وسجلات التكاملات، وفهارس الرسائل المباشرة المختلفة — فتُتخطّى. وكل ما يفشل تحليله يُتخطّى بدل أن يُفشل الأرشيف، فلا يكلّفك يوم واحد تالف مساحة العمل كلها.
فيمَ يُستعمل هذا
حفظ التاريخ قبل أن تبلغ مساحة عمل مجانية حدّ الرسائل ويصير الحديث القديم بعيد المنال. والانتقال إلى أداة أخرى مع الإبقاء على شيء مقروء خلفك. والردّ على طلب امتثال أو طلب قانوني بنصّ مقروء بدل مجلد من JSON. واستعادة النقاش حول قرار لم يُكتب في أي مكان آخر. وإطعام قناة مشروع لنموذج ليعيد بناء ما جرى خلال ستة أشهر.
كيف تحصل على التصدير
يستطيع مالك مساحة العمل أو المشرف إنتاجه من إعدادات مساحة العمل، تحت استيراد/تصدير البيانات، ثم تصدير. ويغطّي التصدير القياسي القنوات العامة. أما القنوات الخاصة والرسائل المباشرة فتحتاج مستوى تصدير مختلفًا، وفي معظم الاختصاصات القضائية سببًا موثّقًا.
يُقرأ محليًا
تصدير مساحة العمل من أكثر الملفات حساسية التي تنتجها مؤسسة. ففيه نقاش داخلي، وأسماء عملاء، وبيانات اعتماد ألصقها أشخاص في قنوات ما كان ينبغي أن تصلها، وآراء صريحة لكل من شارك. ورفعه إلى محوّل خارجي هو، عند معظم الشركات، حادثة تستوجب الإبلاغ.
لا شيء هنا يُرسل. يُفتح الأرشيف ويُحلَّل بلغة JavaScript في تبويب المتصفح هذا، ولا يُعرض إلا الناتج المقروء. ولا يستقبل أي خادم الملف، فلا سؤال عن مدة الاحتفاظ ولا شيء تطلب حذفه.
أما المنصّات الأخرى فتُعالَج على صفحة تصدير المحادثات العامة.