استدعاء السؤال: الترحيل من mattermost

سؤال

أود معرفة أفضل النصائح الحالية حول ترحيل البيانات من نسخة فريق Mattermost إلى نسخة Discourse (أنا أدير كليهما).

لقد قرأت بالفعل النصائح حول كيفية تنسيق الانتقال، ولذلك أبحث الآن عن موارد ونصائح فنية لترحيل البيانات.

السياق

إنه أكتوبر 2025، وأجد نفسي في موقف مشابه لهذا السؤال من عام 2018[1]:

ومع ذلك، فإن الضغط في حالتي أكثر تحديدًا - فـ Mattermost يغلق فعليًا نسخة الفريق الخاصة به[2] (من الناحية الفنية لا يفعل ذلك، لكنني أرى التغييرات على أنها انتهاك لالتزامهم مفتوح المصدر).

بدأت المناقشة الأصلية هنا بتوصية بدمج المنصتين، ثم أُغلقت ببيان مفاده أن Discourse لديها الآن دردشة جيدة جدًا (وهي كذلك، خاصة مع البحث القادم عن الدردشة). ومع ذلك، لم تتضمن أي نصائح للترحيل.


  1. انتهت المناقشة بقول عضو فريق Discourse أن Discourse يستخدم Mattermost ↩︎

  2. بشكل ساخر، تم نشر الإعلان باستخدام Discourse ↩︎

5 إعجابات

أهلاً أنتوني!

إن الترحيل من Mattermost إلى Discourse قابل للتنفيذ بالتأكيد، ولكنه سيتطلب بناء نص استيراد مخصص، حيث لا يوجد نص جاهز متاح حاليًا ( انظر نصوص الاستيراد المتاحة هنا ). يمكنك دراسة النصوص الحالية كمرجع، ولكن يرجى التحقق جيدًا من تواريخ آخر تحديث لها وتكييفها وفقًا لذلك، حيث قد تحتوي بعضها على مراجع قديمة لجداول Discourse.

طلب سحب (pull request) يتضمن نص استيراد Mattermost سيكون موضع ترحيب كبير من المجتمع!

تعيين القنوات والبيانات

يمكنك استيراد كل شيء كقنوات دردشة ولكن يمكنك أيضًا تعيينها كأنواع أخرى:

  • القنوات كفئات: استيراد كل قناة Mattermost كفئة Discourse. يمكن أن تصبح المواضيع داخل القنوات مواضيع، مع كل رسالة كمنشور. بدلاً من ذلك، يمكن أن تكون المنشورات الفردية هي المنشئ للمواضيع.
  • القنوات كمواضيع: نهج آخر هو جعل كل قناة Mattermost موضوعًا واحدًا، مع الرسائل كردود، وسيتم عرض المواضيع بالتسلسل في هذه الحالة.
  • الرسائل المباشرة: يمكن استيرادها كرسائل خاصة أيضًا. إنها فكرة جيدة للمناقشات التي تحتاج إلى أرشفة.

فكر جيدًا في النهج الذي يناسب مجتمعك وحجم المحتوى بشكل أفضل.

عناوين المواضيع

عند تعيين دردشة إلى مواضيع ومنشورات، يتعين عليك إنشاء عناوين لكل موضوع. إحدى الطرق الرائعة للقيام بذلك هي استخدام Discourse AI لإنشاء عناوين بسياق فعلي للموضوع.

إنشاء عناوين المواضيع باستخدام الذكاء الاصطناعي

باختصار، استخدم هذه الطريقة:

def gen_title(llm, system_prompt, topic)
  begin
  content = topic.posts.map(&:cooked).join("\n").slice(0..10_000)
  message = [{type: :user, content: content}]
  prompt = DiscourseAi::Completions::Prompt.new(system_prompt, messages: message)

  title = llm.generate(
      prompt,
      user: Discourse.system_user,
      temperature: 0.3,
      feature_name: "ai_helper"
  )

  topic.title = title
  topic.save!
  puts "Topic: #{topic.id}, changed sucessfully."
  rescue ActiveRecord::RecordInvalid
    puts "validation error"
  end
end

إنه يحتاج إلى نموذج لغوي كبير (LLM) وموجه رئيسي

llm = DiscourseAi::Completions::Llm.proxy(SiteSetting.ai_helper_model)

system_prompt = <<-PROMPT
  I want you to act as a title generator for written pieces. I will provide you with a text,
  and you will generate a title. Please keep the title concise and under 20 words,
  and ensure that the meaning is maintained. The title will utilize the language type of the topic.
  I want you to only reply the proposed title and nothing else, do not write explanations.
  Never ever use colons in the title. Always use sentence case, using a capital letter at
  the start of the title, never start the title with a lower case letter. Proper nouns in the title
  can have a capital letter, and acronyms like LLM can use capital letters. Format some titles
  as questions, some as statements. Make sure to use question marks if the title is a question.
PROMPT

ثم يمكنك التكرار عبر قائمة المواضيع كما تفضل:

# gen everything
Topic
  .joins(:_custom_fields)
  .where('topic_custom_fields.name = ?', 'import_id')
  .find_each { |topic| gen_title(llm, system_prompt, topic) }

# filter PMs
Topic
  .joins(:_custom_fields)
  .where('topic_custom_fields.name = ?', 'import_id')
  .where.not(archetype: "private_message")
  .find_each { |topic| gen_title(llm, system_prompt, topic) }

اعتبارات هامة

  • ردود الفعل: يدعم Mattermost ردود فعل متعددة لكل منشور. إذا كنت تستورد كمنشورات Discourse، فستحتاج إلى الحد من رد فعل واحد، ما لم تقم بالتعيين إلى Discourse Chat (الذي يدعم ردود الفعل المتعددة أصلاً).
  • الرموز التعبيرية المخصصة: يمكنك جلب الرموز التعبيرية المخصصة، انظر وثائق إضافة ردود فعل Discourse.
  • الفرق والأذونات: لا تتطابق “فرق” Mattermost مباشرة مع Discourse، ولكن يمكنك إعداد فئات/قنوات مع ضوابط وصول مناسبة تعتمد على المجموعات.
  • المرفقات: لا يتم تضمين مرفقات Mattermost (الصور والمستندات) في المحتوى كما هو الحال في Discourse. عند الاستيراد، ستحتاج إلى إلحاق روابط المرفقات (Markdown) أو تضمينها في جسم المنشورات.

مواد مرجعية


لدينا خبرة في عمليات ترحيل منصات الدردشة، إذا كنت ترغب في الحصول على مساعدة من فريقنا، انظر صفحة خدمات ترحيل Discourse.

إذا كانت لديك أسئلة محددة أثناء تطوير النص أو اتخاذ قرارات التعيين، فلا تتردد في طرحها على Meta للحصول على التوجيه!

5 إعجابات

شكراً لك على هذا الملخص الرائع! سألقي نظرة عليه بمجرد أن يحين وقت الترحيل. إذا انتهى بي الأمر ببرنامج نصي، فسأشاركه بالتأكيد مع المجتمع.

في الوقت الحالي، أميل إلى استيراد الدردشة إلى قنوات الدردشة. بصرف النظر عن نقص البحث، والذي سيتم تنفيذه قريبًا، هل هناك اعتبارات أخرى ذات صلة؟

إعجابَين (2)

في هذه الحالة، سيتم إنفاق معظم العمل على تحليل الرسائل. إليك بعض الأشياء ذات الصلة:

  • ستحتاج الإشارات إلى سجل في قاعدة البيانات، تحقق من: mention.rb و group_mention.rb.
  • يجب أيضًا استيراد المرفقات كـ upload والإشارة إليها في علامة الرسالة. بدلاً من ذلك، يمكنك تحميل الصور إلى خادم مؤقت من اختيارك، وإضافة رابط إليها في المنشور، وتمكين الإعداد: download_remote_images_to_local.
  • لا يزال يتعين عليك إنشاء فئات للقنوات لتتمكن من تعيين الأذونات.
  • إذا كنت تستخدم SSO، يمكنك استيراد المستخدمين من مزود الهوية الخاص بك مباشرة. تحقق من: Sync DiscourseConnect user data with the sync_sso route.
4 إعجابات