رسالة جماعية خاصة - مشكلة ناقل الرسائل

السياق
لدينا نظام نقوم فيه بإضافة المستخدمين إلى المجموعات برمجياً عبر واجهة برمجة التطبيقات (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)، لكن قد يكون هذا السلوك مقصوداً؟

إعجابَين (2)

بالطبع يبدو لي أن الأمر يتعلق بالدعم الفني وليس بخلل تقني.

ابدأ من النهاية وقم بكل شيء عبر واجهة المستخدم.

هل يعمل؟

على سبيل المثال:

  • المستخدم1 عضو في المجموعة أ
  • تم إرسال رسالة إلى المجموعة أ
  • ينظر المستخدم1 إلى الرسالة
  • ينشر المستخدم2 ردًا على الرسالة
  • هل ترى الرد يظهر مباشرة؟

إذا كان الأمر كذلك، فإن هناك مشكلة في كيفية استهلاكك للواجهة البرمجية (API).

3 إعجابات

شكرًا لك على الرد، سام.

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

ثم يلزم تحديث الصفحة لرؤية آخر منشور.

في مثالك أعلاه، إذا كان المستخدم1 مديرًا، فإن كل شيء يعمل كما هو متوقع.

إعجابَين (2)

حسناً، يبدو هذا بالتأكيد كخطأ، سنقوم باختباره، وقد يستغرق ذلك بضعة أيام.

4 إعجابات

رائع - شكرًا لك! أخبرني إذا كنت بحاجة إلى أي معلومات إضافية

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

مرحبًا سام، فقط أترك تعليقًا لأرى ما إذا كان هناك مكان يمكنني من خلاله متابعة أي تقدم بشأن هذا الخطأ. لستُ على دراية كاملة بعملية الإبلاغ عن الأخطاء وإصلاحها في Discourse - شكرًا لك!

إعجابَين (2)

أنا متأكد إلى حد كبير أن كريس قد أصلح الأمر، وأوصي بإعادة الاختبار

3 إعجابات

مرحبًا @danjw،

عذرًا، لقد نسيت إخبارك. سام على حق، تم إصلاح الأمر عبر طلب السحب أدناه:

3 إعجابات