السياق
لدينا نظام نقوم فيه بإضافة المستخدمين إلى المجموعات برمجياً عبر واجهة برمجة التطبيقات (API)، وإنشاء رسائل خاصة تلقائياً للمجموعات الفردية، وكل ذلك عبر واجهة برمجة التطبيقات.
على سبيل المثال، قد يكون لدينا مجموعة تُدعى: cooking-class-101
سنقوم بإنشاء رسالة خاصة لهذه المجموعة يشارك فيها cooking-class-101 و system كمشاركين اثنين في الرسالة الخاصة.
لقد نجح هذا الأمر معنا بشكل رائع كطريقة لإنشاء محادثات جماعية خاصة تلقائياً لمجموعات من الأشخاص.
المشكلة
المشكلة التي نواجهها هي أنه بالنسبة للمستخدمين العاديين الذين هم جزء من المجموعة، لا يعيد ناقل الرسائل (message bus) أي تحديثات عند إضافة منشورات جديدة إلى الموضوع.
على سبيل المثال، لدينا رسالة خاصة لمجموعة بموضوع معرفه 123. يمكننا رؤية أن ناقل الرسائل مشترك في القناة topic/123، ومع ذلك، إذا قام مستخدم آخر بإنشاء منشور في الموضوع، فلا يعيد ناقل الرسائل أي شيء، وبالتالي لا يظهر أحدث منشور تلقائياً.
لقد تأكدنا من أن ناقل الرسائل يعمل بشكل عام كما هو متوقع، حيث يعيد البيانات بشكل صحيح على قناة topic/presence/123.
في المقابل، بالنسبة للمستخدمين المسؤولين (admins) الذين هم جزء من المجموعة التي أضيفت إلى الرسالة الخاصة، فإن ناقل الرسائل يعيد البيانات بشكل صحيح على قناة topic/123، وبالتالي يتم عرض المنشور الجديد بشكل صحيح في الموضوع في الوقت الفعلي.
لقد تأكدنا أيضاً أنه إذا تم دعوة مستخدم عادي هو عضو في المجموعة للمشاركة في الموضوع بشكل منفصل (بحيث أصبح لدينا الآن cooking-class-101 و system و regular-user كمشاركين)، فإنهم يبدأون في استقبال استجابات صحيحة من ناقل الرسائل على قناة topic/123، وبالتالي يرون المنشورات الجديدة في الوقت الفعلي.
البحث
أثناء التعمق في كود Discourse، توصلت إلى ما يلي والذي يبدو أنه في حالة موضوعات الرسائل الخاصة، قد لا يتم إخطار المجموعات بالمنشورات الجديدة المنشورة: discourse/app/models/post.rb at b7b81afe553a79f58f79f49a6c2ceff831aa4ec7 · discourse/discourse · GitHub
لست متأكداً تماماً مما يُفترض أن يعيده topic.allowed_users في الرابط أعلاه في حالة موضوع رسالة خاصة تمت إضافة مجموعة إليه، لكن شكّي هو أنه لا يتضمن قائمة المستخدمين الموجودين كجزء من المجموعة.
لقد وصفت هذه المشكلة بأنها خلل (bug)، لكن قد يكون هذا السلوك مقصوداً؟