الأتمتة المخصصة - تدفق التعديلات لتحقيق تكامل ناجح مع إضافة Automation

مرحباً بالجميع،

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

يجب أن تكون هذه أتمتة مخصصة لأن البرنامج النصي الحالي المتاح “إرسال رسائل خاصة” في المكون الإضافي للأتمتة يرسل الرسائل الخاصة إلى أي شخص أرسل الرد الذي تم تمييزه كحل/تم حله (وليس إلى الشخص الذي أنشأ الموضوع، كما هو مقصود في حالة الاستخدام الخاصة بي).

فيما يلي البرنامج النصي الذي أنشأته لمحاولة نشر رد جديد في الموضوع بمجرد تمييز رد كحل (في العينة التالية، لا أرسل الاستطلاع كرد، بل أمنح المسؤول حرية اختيار ما سيتم إرجاعه أو تركه كافتراضي):

# frozen_string_literal: true

DiscourseAutomation::Scriptable.add(DiscourseAutomation::Scripts::REPLY_ON_SOLUTION) do
  field :reply_text, component: :text
  # field :answering_user, component: :user
  field :once, component: :boolean

  version 1

  triggerables %i[:first_accepted_solution] if defined?(DiscourseSolved)

  placeholder :sender_username
  placeholder :word

  script do |context, fields, automation|
    topic = context["topic"]
    # user = context["user"]
    reply_text = fields.dig("reply_text", "value")

    # نشر رد في الموضوع الذي تم فيه تمييز حل
    PostCreator.create!(
      Discourse.system_user,
      topic_id: topic.id,
      raw: reply_text || "A solution has been marked for this topic!",
    )
  end
end

لكنني لست متأكدًا مما إذا كان يجب أن يكون PostCreator.create!، أو PostCreator.reply، أو ربما شيء آخر. ما يقودني إلى سؤال:

  • هل هناك أي مكان موثق للكلمات الرئيسية التي يجب استخدامها أثناء إنشاء برنامج نصي للأتمتة المخصصة؟

بناءً على الأتمتة المذكورة أعلاه، بمجرد تشغيلها عن طريق تمييز رد كحل، بعد ثانية واحدة أتلقى رسالة منبثقة مع رسالة خطأ 500 internal server error على الشاشة.

  • هل فاتني شيء؟ تم النشر الخاص بي باستخدام devcontainers، على جهازي المحلي لأغراض اختبار التطوير.
  • ما الذي يلزم فعله، بعد إنشاء البرنامج النصي المخصص؟ ربما فاتني شيء في هذه المرحلة؟ أو ربما هي مشكلة في البرنامج النصي نفسه؟
  • هل هناك أي مكان موثق للخطوات التي يجب اتباعها بعد الانتهاء من البرنامج النصي الخاص بي؟ على سبيل المثال: ما هي الملفات التي تحتاج إلى تعديلها حتى يعمل كل شيء بسلاسة؟ (وجدت بالطريقة الصعبة أنني بحاجة إلى تغيير client.en.yml للاسم والوصف الصحيحين اللذين يظهران في قائمة الأتمتة)

أخطط لمحاولة، بناءً على البرنامج النصي المدمج “إرسال رسائل خاصة”، لتغيير برنامجي النصي لإنشاء رد بدلاً من ذلك، وإرسال الرسائل الخاصة، ولكن لست متأكدًا مما يلي:

  • كيف سأقوم بوضع علامة على الشخص الذي أنشأ الموضوع وليس الشخص الذي تم تمييز الرد الخاص به كحل؟

شكراً جزيلاً مقدمًا على أي توجيهات ومساعدة.

هل اتبعت هذا الدليل؟

إعجاب واحد (1)

مرحباً @NateDhaliwal،

شكراً جزيلاً على ردك.

نعم، لقد اتبعت هذا الدليل… سأقوم بالتعليق على الدليل ببعض الاقتراحات بعد ذلك.

لقد نجحت في جعل الأتمتة المخصصة تعمل.

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

بمجرد إضافة محتوى السياق الصحيح إلى متغير، تم حل خطأ الخادم الداخلي 500.

تم تعديل المزيد من المنطق في الكود أيضاً.

تعديل: لجعل الأتمتة المخصصة تعمل في نسختي المحلية المنشورة، كان عليّ أيضاً تعديل الملفات التالية:

إنشاء نص الأتمتة المخصص الخاص بك

تحديث: server.en.yml

أضف اسم الأتمتة المخصصة؛ العنوان؛ والوصف في قسم scriptables في ملف yml.

تحديث: client.en.yml

أضف اسم الأتمتة المخصصة في scriptables؛ أضف الكلمة المفتاحية ‘field’؛ داخل الكلمة المفتاحية field أضف ‘field_name’ متبوعاً بـ ‘label’ و ‘description’.

تحديث: scripts.rb

أضف اسم الأتمتة المخصصة في قائمة النصوص. مثال: FILE_NAME = “file_name”

تحديث: plugin.rb

داخل ‘after_initialize do’، أضف المسار إلى نص الأتمتة المخصصة. مثال: ‘lib/discourse_automation/scripts/file_name’

إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.