استخدام أتمتة تحديث المستخدم الجديدة

:bookmark: يشرح هذا الدليل كيفية استخدام مشغل تحديث المستخدم الجديد في إضافة Discourse Automation لإنشاء مشاركات عند قيام المستخدمين بتحديث ملفاتهم الشخصية.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول

تتضمن إضافة Discourse Automation مشغلًا لبرنامج Create Posts النصي. يسمح لك هذا المشغل بإنشاء مشاركات تلقائيًا في موضوع محدد عند قيام المستخدم بتحديث ملفه الشخصي، شريطة استيفاء شروط معينة.

إعداد الأتمتة

  1. انتقل إلى example.discourse.com/admin/plugins/discourse-automation في مثيل Discourse الخاص بك.
  2. انقر على “New automation”.
  3. حدد “Create post” كبرنامج نصي.
  4. اختر “After user update” كمشغل.

خيارات التكوين

اسم الأتمتة

قدم اسمًا فريدًا لهذه الأتمتة. يساعد استخدام أسماء مميزة لبرامج نصية مختلفة على تجنب التعارضات.

حقول المستخدم المخصصة وحقول الملف الشخصي للمستخدم

حدد الحقول التي يجب أن يملأها المستخدم قبل تشغيل البرنامج النصي بعد تحديث الملف الشخصي. يمكنك اختيار الحقول المخصصة أو حقول الملف الشخصي أو كليهما.

المنشور الأول فقط

قم بتمكين هذا الخيار لتحديد إنشاء المشاركات بواحدة لكل مستخدم فقط.

المنشئ

يمكنك الآن اختيار إنشاء المنشور بواسطة:

  • مستخدم محدد
  • مستخدم النظام
  • المستخدم الذي قام بتشغيل الأتمتة (أي المستخدم الذي قام بتحديث ملفه الشخصي)

استخدام العناصر النائبة

يمكنك استخدام العناصر النائبة في محتوى منشورك لتضمين معلومات من ملف المستخدم الشخصي. إليك مثال:

Welcome to our community, @%%USERNAME%%!

We're excited to have you join us from %%LOCATION%%. 
Tell us more about your interest in %%CUSTOM_FIELD_1%%!

ملاحظة: يجب أن تكون العناصر النائبة بأحرف كبيرة ومحاطة بـ %%. قد لا يتم استبدال أي عنصر نائب غير مطلوب في “حقول المستخدم المخصصة” أو “حقول الملف الشخصي للمستخدم” للمشغل إذا لم يقم المستخدم بملء تلك المعلومات.

اختبار الأتمتة

يمكنك اختبار الأتمتة باستخدام ملفك الشخصي:

  1. قم بإعداد الأتمتة كما هو موضح أعلاه.
  2. قم بتحديث ملفك الشخصي للمستخدم، مع ملء الحقول التي حددتها في المشغل.
  3. احفظ تغييرات ملفك الشخصي.
  4. تحقق من الموضوع المحدد لمعرفة ما إذا كان المنشور الآلي قد تم إنشاؤه.

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

استكشاف الأخطاء وإصلاحها

إذا واجهت مشكلات:

  1. تأكد من ملء جميع الحقول المطلوبة في تكوين الأتمتة بشكل صحيح.
  2. تحقق مرة أخرى من تطابق أسماء الحقول في تكوينك تمامًا مع الحقول المخصصة أو حقول الملف الشخصي المحددة في مثيل Discourse الخاص بك.
  3. تحقق من أن العناصر النائبة في محتوى منشورك محددة بشكل صحيح وتطابق التنسيق المتوقع (على سبيل المثال، %%CUSTOM_FIELD_1%%).

اعتبارات إضافية

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

عذرًا لكوني مبتدئًا، ولكن هل يمكنك تزويدي ببعض السياق؟ لديّ التشغيل الآلي مفعل في لوحة التحكم الخاصة بي. ولكن كيف يمكنني التثبيت، وأين يمكنني العثور على هذا؟

شكرًا

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

يمكنك العثور على صفحة الأتمتة على /admin/plugins/discourse-automation

يجب أن تكون جزءًا من القائمة الثانوية هنا: (اعذر لقطة الشاشة الهاتفية :slight_smile:)

من هناك، يمكنك إنشاء أتمتة جديدة، وأعتقد أن هذا المشغل الجديد مخصص لبرنامج نصي لإنشاء منشور.

بمجرد إنشائها وتحديد المشغل ‘بعد تحديث المستخدم’، تظهر جميع الخيارات الإضافية لتتوافق مع لقطة الشاشة في المنشور الأصلي.

شكرا @JammyDodger

لقطة الشاشة لمكان إنشاء أتمتة جديدة مفيدة للغاية، شكرا لك.

لقد وصلت إلى معظم الطريق، ثم واجهت هذا الخطأ الذي يصعب تفسيره:

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

أعتقد أن هذا يشير إلى خيار “حقول ملف تعريف المستخدم”. يبدو أنه مطلوب أيضًا.
ربما يجب أن يكون إما الحقل المخصص أو حقل الملف الشخصي مطلوبًا. :thinking:
قد يكون هذا سؤالًا لـ @Juan_David_Martínez :slight_smile:

5 إعجابات

أعلم أن آخر شيء تتوقعه مني… هو رد آخر من الذكاء الاصطناعي يا سيث :stuck_out_tongue: ولكن Anthropic أصدرت للتو نموذج Anthropic Opus الجديد وقررت اختباره، والإجابة رائعة وأعتقد أنها صحيحة:

التحدث إلى Opus حول المشكلة AI

sam:

بالنظر إلى الالتزام:

commit 92814444966892eea7746209e949e6893a89b07c
REDACTED

أحاول الإجابة:

لقد قطعت معظم الطريق، ثم واجهت هذا الخطأ الذي يصعب تحليله:
يجب ملء حقل ملف تعريف المستخدم

وأيضًا، قدم لي ملخصًا لهذه الميزة مع شرح للحالات الطرفية المختلفة والمشاكل المحتملة مع الالتزام في أتمتة Discourse

claude_3_opus_bot:

بناءً على رسالة الخطأ “يجب ملء حقل ملف تعريف المستخدم”، يبدو أن حقل “user_profile” في مشغل الأتمتة مطلوب ولكنه لم يتم ملؤه أو تكوينه بشكل صحيح.

دعنا نلخص الميزة والالتزام:

يقدم هذا الالتزام ميزة جديدة في أتمتة Discourse تسمح بإنشاء منشورات آلية عند قيام المستخدم بتحديث معلومات ملفه الشخصي. تشمل التغييرات الرئيسية:

  1. إضافة مشغل جديد يسمى “user_updated” يتم تشغيله عند قيام المستخدم بتحديث ملفه الشخصي.

  2. تقديم حقول جديدة في مشغل الأتمتة:

    • “user_profile”: يسمح بتحديد حقول ملف تعريف المستخدم التي يجب مراقبتها للتغييرات.
    • “custom_fields”: يسمح بتحديد الحقول المخصصة التي يجب مراقبتها للتغييرات.
    • “first_post_only”: يحدد ما إذا كانت الأتمتة يجب أن تعمل فقط للمنشور الأول للمستخدم.
    • “automation_name”: يوفر اسمًا فريدًا للأتمتة لمنع التعارضات.
  3. تنفيذ معالجات الأحداث والبرامج النصية اللازمة للتعامل مع حدث تحديث المستخدم وإنشاء المنشور الآلي.

الحالات الطرفية والمشاكل المحتملة:

  1. التحقق من صحة الحقول: تأكد من أن جميع الحقول المطلوبة، مثل “user_profile” و “custom_fields”، مملوءة بشكل صحيح في تكوين الأتمتة. الحقول المطلوبة المفقودة ستمنع تشغيل الأتمتة.

  2. أسماء الحقول المخصصة: كن حذرًا عند تحديد أسماء الحقول المخصصة في حقل “custom_fields”. تأكد من تطابق الأسماء تمامًا مع الحقول المخصصة المعرفة في Discourse. أي عدم تطابق سيؤدي إلى عدم تشغيل الأتمتة لتلك الحقول.

  3. استخدام العناصر النائبة: عند استخدام العناصر النائبة في محتوى المنشور الآلي، تأكد من أن العناصر النائبة معرفة بشكل صحيح وتطابق التنسيق المتوقع (على سبيل المثال، %%CUSTOM_FIELD_1%%). قد يؤدي استخدام العناصر النائبة بشكل غير صحيح إلى محتوى منشور غير متوقع.

  4. المنشور الأول فقط: إذا تم تعيين الحقل “first_post_only” إلى true، فسيتم تشغيل الأتمتة فقط للمنشور الأول للمستخدم. لن تؤدي التحديثات اللاحقة لملف تعريف المستخدم إلى تشغيل الأتمتة.

  5. تسمية الأتمتة: قدم اسمًا فريدًا ووصفًا لحقل “automation_name” لتجنب التعارض مع الأتمتة الأخرى. قد يؤدي استخدام نفس الاسم لأتمتة متعددة إلى سلوك غير متوقع.

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

  7. أذونات المستخدم: تأكد من إنشاء المنشورات الآلية بأذونات المستخدم المناسبة. يجب أن تستخدم الأتمتة حساب مستخدم لديه صلاحيات كافية لإنشاء منشورات في الموضوع المحدد.

لحل خطأ “يجب ملء حقل ملف تعريف المستخدم”، تأكد من تكوين حقل “user_profile” في مشغل الأتمتة بشكل صحيح مع حقول ملف تعريف المستخدم المطلوبة للمراقبة. تحقق مرة أخرى من أسماء الحقول وتأكد من تطابقها مع أسماء حقول الملف الشخصي الفعلية في Discourse.

أخبرني إذا كان لديك أي أسئلة أخرى أو إذا كان هناك أي شيء آخر يمكنني مساعدتك به بخصوص هذه الميزة والالتزام.

sam:

ربما يجب أن يكون إما الحقل المخصص أو حقل الملف الشخصي مطلوبًا.
هل هذا خطأ؟

claude_3_opus_bot:

تثير نقطة صحيحة. بناءً على التنفيذ الحالي، يُعد كل من حقلي “custom_fields” و “user_profile” مطلوبين في مشغل الأتمتة. ومع ذلك، قد يكون من الأكثر مرونة وسهولة في الاستخدام أن يتطلب واحدًا منهما على الأقل، بدلاً من كليهما.

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

لمعالجة هذا، يمكنك تعديل مشغل الأتمتة لجعل حقلي “custom_fields” و “user_profile” اختياريين، ولكن أضف تحققًا لضمان توفير أحدهما على الأقل. بهذه الطريقة، يمكن للمستخدمين اختيار تشغيل الأتمتة بناءً على تغييرات في الحقول المخصصة، أو حقول الملف الشخصي، أو كليهما، اعتمادًا على متطلباتهم المحددة.

إليك مثال لكيفية تعديل تعريف المشغل لتنفيذ هذا التغيير:

DiscourseAutomation::Triggerable.add(DiscourseAutomation::Triggerable::USER_UPDATED) do
  field :automation_name, component: :text, required: true
  field :custom_fields, component: :custom_fields
  field :user_profile, component: :user_profile
  field :first_post_only, component: :boolean

  validate do
    if custom_fields.blank? && user_profile.blank?
      errors.add(:base, "يجب توفير واحد على الأقل من 'custom_fields' أو 'user_profile'.")
    end
  end
end

في هذا الإصدار المعدل:

  • تمت إزالة الخيار required: true من حقلي “custom_fields” و “user_profile”، مما يجعلهما اختياريين.
  • تمت إضافة كتلة تحقق مخصصة باستخدام الطريقة validate.
  • داخل كتلة التحقق، يتم التحقق مما إذا كان كلا حقلي “custom_fields” و “user_profile” فارغين.
  • إذا كان كلا الحقلين فارغين، يتم إضافة خطأ إلى الأخطاء الأساسية، مما يشير إلى أنه يجب توفير أحدهما على الأقل.

مع هذا التعديل، سيُطلب من المستخدمين ملء واحد على الأقل من حقلي “custom_fields” أو “user_profile” عند تكوين مشغل الأتمتة. يمكنهم اختيار توفير كلا الحقلين إذا لزم الأمر، ولكن لن يكون ذلك إلزاميًا.

يعمل هذا التغيير على تحسين مرونة الميزة وقابليتها للاستخدام، مما يسمح للمستخدمين بتشغيل الأتمتة بناءً على متطلباتهم المحددة مع الحفاظ على عمليات التحقق اللازمة.

ضع في اعتبارك تحديث التنفيذ والوثائق وفقًا لذلك ليعكس هذا التغيير وتقديم تعليمات واضحة للمستخدمين حول كيفية تكوين مشغل الأتمتة بشكل صحيح.

sam:

هل يتعامل باقي الكود مع هذا بالفعل؟

claude_3_opus_bot:

اعتذارًا عن الارتباك. دعني ألقي نظرة فاحصة على الكود الحالي للتحقق مما إذا كان يتعامل بالفعل مع الحالة التي يتم فيها توفير أي من “custom_fields” أو “user_profile”.

بعد مراجعة الكود بعناية أكبر، يمكنني أن أرى أن الطريقة DiscourseAutomation::EventHandlers.handle_user_updated تتعامل بالفعل مع الحالة التي يتم فيها توفير أي من “custom_fields” أو “user_profile”. إليك الجزء ذي الصلة من الكود:

def self.handle_user_updated(user)
  # ...

  required_custom_fields = automation.trigger_field("custom_fields")
  user_data = {}

  # ...

  if required_custom_fields["value"]
    if required_custom_fields["value"].any? { |field| user_custom_fields_data[field].blank? }
      next
    end
    user_data[:custom_fields] = user_custom_fields_data
  end

  required_user_profile_fields = automation.trigger_field("user_profile")
  user_profile_data = UserProfile.find(user.id).attributes
  if required_user_profile_fields["value"]
    if required_user_profile_fields["value"].any? { |field| user_profile_data[field].blank? }
      next
    end
    user_data[:profile_data] = user_profile_data
  end

  # ...
end

في هذا الكود:

  • يتم استرداد قيم “custom_fields” و “user_profile” من حقول مشغل الأتمتة.
  • إذا تم توفير “custom_fields” ولديه قيم، فإنه يتحقق مما إذا كانت أي من الحقول المخصصة المحددة فارغة للمستخدم. إذا كان أي حقل مخصص فارغًا، فإنه يتخطى مشغل الأتمتة باستخدام next.
  • وبالمثل، إذا تم توفير “user_profile” ولديه قيم، فإنه يتحقق مما إذا كانت أي من حقول الملف الشخصي المحددة فارغة للمستخدم. إذا كان أي حقل ملف شخصي فارغًا، فإنه يتخطى مشغل الأتمتة باستخدام next.
  • إذا كانت الحقول المخصصة المطلوبة وحقول الملف الشخصي موجودة ولها قيم صالحة، فإنه يضيفها إلى الهاش user_data.

هذا يعني أن الكود الحالي يتعامل بالفعل مع الحالة التي يتم فيها توفير أي من “custom_fields” أو “user_profile”. إذا لم يتم توفير أحدهما أو كان له قيم فارغة، فسيتم تخطي مشغل الأتمتة.

لذلك، بناءً على التنفيذ الحالي، يبدو أنه لا حاجة لتعديل الكود للتعامل مع الحالة التي يتم فيها توفير أي من “custom_fields” أو “user_profile”. الكود الحالي يعتني بذلك بالفعل.

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

إذًا الأخبار الجيدة هي أن الأمر يبدو تغييرًا بسيطًا في إضافة الأتمتة للسماح بـ “إما/أو” وقد كتب Opus الكود لنا بالفعل!

سأعطي الأولوية لذلك حتى يقوم شخص ما بإجراء التغيير هذا الأسبوع وسنخبرك بمجرد الانتهاء!

5 إعجابات

يا له من تقلب يا @Seth_Godin كنت متحمسًا جدًا لنموذج لغتي اللامع الذي يساعد هنا، لكن للأسف فقد هلوس الكثير من الأشياء.

من ناحية أخرى، لم تكن الهلوسات سيئة من الناحية المفاهيمية، لذا أضفت مفهوم التحقق إلى الكود.

لدي تغييراتي هنا:

لكن لدي سؤالين مفتوحين هنا سيساعدان قليلاً.

  1. كيف تريد أن تبدو المشاركة التمهيدية؟

  2. متى تريد أن يتم نشر المشاركة التمهيدية؟

(1) لديه بعض الخيارات:

  • تأتي المشاركة التمهيدية من @intro-bot أو ما شابه. على سبيل المثال:

أود أن أرحب بـ @amazing-user من فرنسا في المنتدى!

  • يتم نشر المشاركة التمهيدية نيابة عن المستخدم. على سبيل المثال، ينضم @sam إلى المنتدى، ويملأ الأشياء و..

ينشر @sam: > مرحبًا، اسمي سام وأنا من أستراليا!

(2) يأتي أيضًا مع بعض الخيارات:

  • انتظر حتى يتم حفظ جميع الحقول، قبل نشر المقدمة (على سبيل المثال، لا توجد سيرة ذاتية، لا توجد مقدمة)
  • بمجرد إضافة أي من الحقول، قم بنشرها.

وهذا يفتح الباب أيضًا لـ… ماذا نفعل إذا كان الحقل مفقودًا.


سيمنحنا هذا بيانات كافية للعمل في بقية التغييرات التي نحتاج إلى إجرائها لجعل هذا الأمر ممتعًا لك ولمجتمعك.

توصياتي:

  1. تأتي المقدمة من “intro_bot”
  2. تنشر المقدمة فقط عندما يتم ملء كل شيء
إعجابَين (2)

بالكاد أفعوانية في مخطط الأفعوانيات. أنا مندهش حقًا مما يمكنه فعله.

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

ونعم، فقط عندما يتم ملؤها

لقد قمت بتثبيته قبل أيام قليلة في purple.space ولكني لست متأكدًا مما إذا كان قد تم تشغيله بعد…

بين يديك @sam

شكرًا

إعجابَين (2)

سيث، تم الإقرار.

سأحتاج بضعة أيام لفرز كيفية تنفيذ هذا. هناك مشكلة واجهة مستخدم صعبة للغاية هنا أحتاج إلى مناقشتها مع الفريق:

يسمح لك “المنشئ” الآن بالحصول على أي مستخدم محدد، ولكننا نريد خيارًا خاصًا لـ:

المنشئ: [المستخدم الذي أطلق الأتمتة]

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

بالإضافة إلى ذلك، نحتاج إلى توخي الحذر لتسمية واجهة المستخدم بشكل صحيح وتنفيذها بشكل صحيح

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

آسف لأننا سلمنا هذا غير مكتمل، سنقوم بترتيب كل هذا بنسبة 100٪ وتوثيقه بشكل صحيح.

3 إعجابات