@gilles لقد نفّذت الآن المتابعة التي أشرتُ إليها أعلاه:
يضيف هذا تغييرًا عامًّا لعملية حدث → تعيين الحضور، ويشمل:
المشارك (attendee)
حالة الحضور: سيحضر / مهتم / لن يحضر / إزالة الحضور
معرّف الموضوع (topic ID)
الفاعل (actor) اختياري
لذلك يمكن بناء حالتك الأصلية على النحو التالي:
تم إنشاء منشور → إذا كان أول منشور → حدث / تعيين الحضور
باستخدام كاتب الحدث كمشارك وتعيين حالته إلى سيحضر.
قمت باختبار هذا النمط تحديدًا محليًا في واجهة Workflows الرسومية، مع الاستناد إلى #42932، وتأكدت من أن المستخدم يُسجَّل تلقائيًا بحالة “سيحضر” في الحدث.
الحالي PR مسودة فقط لأنه يعتمد على #42932. بمجرد دمج #42932، سأعيد تجميعه (rebase) على فرع main، مما سيترك فرقًا خاصًّا بالحضور فقط.
يوجد حدث “تغيير وسم الموضوع”. يمكنك بعد ذلك استدعاء واجهة برمجة تطبيقات Discourse للتحقق من عدد المرات التي يُستخدم فيها الوسم. إذا كان مرة واحدة / إذا كان على ذلك الموضوع المحدد، فستعرف أن الوسم جديد.
بديلًا لذلك، وربما يكون أسهل: يمكنك إعداد خطاف ويب (webhook) لحدث “إنشاء وسم” وتوجيهه إلى مُشغِّل خطاف ويب في سير العمل.
حالة الاستخدام: لدي مجموعة وسوم باسم “فنان”. يظهر فنانون جدد باستمرار، لذا تظهر وسوم فنانين جدد باستمرار عندما ينشئها المستخدمون. أريد أن تُضاف هذه الوسوم الجديدة تلقائيًا إلى مجموعة الوسوم “فنان”، بدلاً من أن أضيفها يدويًا. هل هناك طريقة جيدة لتحقيق هذا النتيجة باستخدام سير عمل (Workflows)؟
هذا بالضبط ما تعالجه خطوة الذكاء الاصطناعي. يقوم وكيل الذكاء الاصطناعي أولاً بتحديد ما إذا كان الوسم الجديد ينتمي إلى أيٍّ من المجموعات المحددة (الموسيقي / العضو / المنطقة / نوع الحدث / نوع الإصدار)؛ وإذا لم ينطبق على أيٍّ منها، يتم تجاهله ولا يُصنَّف ضمن أي مجموعة. وبالتالي، يتم تصفية الوسوم العشوائية، ولا يُضاف تلقائيًا إلى مجموعة الوسوم سوى الوسوم المصنّفة بشكل صحيح.
أريد وسم موضوع إذا تم إنشاؤه بنص معين. هل يوجد طريقة لاستخدام الأحرف الصغيرة (lower case) لـ {{ $JSON.topic.title }} بحيث تكون النتيجة صحيحة (true) لكل من “pub run” و"Pub Run" و"pUb rUn"؟
يبدو أنها نظام تعبيرات جافاسكربت الخاص بـ Discourse Workflows، والذي يتم تقييمه على جانب الخادم داخل بيئة معزولة (sandbox) بدلاً من كونه لغة قوالب منفصلة مثل Liquid أو Handlebars.
لذا، على سبيل المثال:
={{ $json.topic.title.toLowerCase() }}
يعمل لأن محتوى {{ ... }} يتم تقييمه كجافاسكربت، وtoLowerCase() هي طريقة السلاسل النصية القياسية في جافاسكربت.
التنفيذ موجود في plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb؛ حيث يعرّف متغيرات عامة خاصة بالعملية (workflows) مثل $json، و$input، و$itemIndex، و$trigger، و$execution، و$().
النحو والمفاهيم تشبه إلى حد كبير n8n. يوجد في الواقع مرجح صريح إلى n8n في مكان آخر من مصدر Workflows:
defaults clash handling to add_suffix (matches n8n position combine)
لذا، هناك أدلة على أن أجزاء من Workflows تطابق سلوك n8n عمدًا، على الرغم من أنني لم أجد شيئًا يقول صراحةً أن لغة التعبيرات نفسها منسوخة من n8n أو مبنية عليه. لذلك، سأصفها بأنها تعبيرات جافاسكربت معزولة (sandboxed) يوفرها Discourse Workflows، مع بعض الاتفاقيات المشابهة لـ n8n.
لاحظت أن خطوة “وكيل الذكاء الاصطناعي” تتطلب تفعيل خاصية “بوت” للوكيل. لماذا هذا الشرط مطلوب؟ هل يمكن توثيق ذلك في مكان ما؟ قضيت بضع دقائق أحاول فهم السبب الذي منعه من اختيار وكيل معين من القائمة المنسدلة