مشكلة في إشعارات الدردشة لا تظهر

لقد أمضينا وقتًا طويلاً على مدار العامين الماضيين في موثوقية إشعارات الدردشة يا أليكس.

متى تخلت عن الدردشة؟ هل ما زلت تواجه المشكلة في OP يا @jordan-violet؟

شكراً لجهودك يا سام. بالنسبة لي شخصياً، كانت الإشعارات تعمل في معظم الأوقات، لكنها كانت تنقطع بشكل عشوائي وتتطلب تحديث صفحة Discourse لإعادة تشغيلها - ولكن تاريخياً لم تكن تعمل على الإطلاق، أو كانت تعمل بشكل متقطع، وبالتأكيد لديها عادة الانقطاع تماماً عند ترقية Discourse.

توقفنا عن استخدام الدردشة هذا الأسبوع بعد اعتمادها في بداية عام 2023. كانت الإشعارات في Google Chat تعمل بشكل جيد للفريق بأكمله بما في ذلك أولئك الذين واجهنا معهم مشاكل منتظمة أو لم نتمكن أبداً من جعلها تعمل.

مرحباً @lindsey، نحن نواجه نفس المشكلة. هل لديك أي تحديث من جانبك بخصوص الحالة وإصلاح محتمل؟

مرحباً ميشا،

هل يمكنك محاولة إعداد تقرير أكثر تفصيلاً حول متى لا تصلك الإشعارات من فضلك؟ هناك الكثير من الحالات (نظام التشغيل iOS، أندرويد، تطبيق الويب التقدمي (PWA)، مركز ديسكورس (Discourse Hub)، سفاري لسطح المكتب، كروم، فايرفوكس، ما نوع الإشعار: قناة عامة؟ رسالة مباشرة؟ موضوع فرعي؟ كلها؟ هل كنت تتصفح عندما كان يجب أن تتلقاها؟…).

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

لقد بدأت ألقي نظرة على هذا الكود، ولكني أشعر أن هناك مشكلة كبيرة تتعلق بـ “التوقعات”

  • هل يتعلق هذا بإشعارات الدفع (Push Notifications)؟ (إذا كان كذلك، فهل تستخدم PWA أم تطبيق Discourse Hub؟)
  • عندما يقول الناس “لم يتم إعلامي”، فهل يقصدون “لم يتم إعلامي بالإشارات (@mention) في إشعار دفع”؟
  • هل التوقع هو أن يتم إعلامك بالإشارة (@mention) عبر إشعار دفع عندما تكون متصلاً بالإنترنت بالفعل؟

هناك عائلة كبيرة مما أعتبره مشاكل معروفة يمكننا تحسينها.

  1. في PWA، إذا حاولنا الإرسال 3 مرات خلال 24 ساعة وفشلنا (بسبب الاتصال بموزع الرسائل أو أي شيء آخر)، فسنقوم بإنهاء الاشتراكات ولن ننبه المستخدم بأي شيء.
  2. في Hub، إشعارات الدفع متاحة فقط للعملاء المستضافين على Discourse.
  3. هناك بعض مشاكل التسلسل حيث يمكن أن تضيع إشعار عند تعديل رسالة الدردشة لأننا نطلق إشعار دفع من داخل معاملة (transaction).
  4. لدينا “تخفيف” (Debounce) لمدة دقيقة واحدة يمكن تكوينه، ولكنه مربك. لقد تم ذكري للتو ولم أتلق إشعار دفع. نافذة وقت إشعار الدفع. هذا تسبب في: @mention، ثم زرت التطبيق في غضون 60 ثانية. لا يوجد @mention.
  5. إذا قمت بالإشارة (@mention) إلى مستخدم في قناة لا يتابعها، فلن يتلقى الإشارة. (حسب التصميم)

لأكون صادقًا @lindsey / @j.jaffeux / @pmusaraj، أشعر أن “الجهر بالرأي” قد يؤدي إلى إزالة الغالبية العظمى من المشاكل التي يواجهها الناس والشكاوى التي رأيناها على مر السنين بخصوص إشعارات الدردشة.

  • أرسل دائمًا إشعارات @mention فورًا (الإعداد الافتراضي للموقع)؛ يمكن للمواقع التي تريد تأخيرًا تكوينه.

  • أرسل دائمًا إشعارات @mention من جميع القنوات، واستبعد فقط القنوات التي يكتمها المستخدمون صراحةً (أو ليس لديهم إذن برؤيتها)، وهذا يتماشى مع السلوك الموجود في المنتدى.

  • هناك شيء غريب في update_message.rb يقوم بنشر رسالة داخل معاملة. (في البيئات متعددة الخيوط يمكن أن تضيع هذه الرسالة)

  • إذا قمنا بإنهاء اشتراك في PWA، اعرض لافتة (banner) في PWA تقول - إشعارات الدفع غير مهيأة، هل تريد تهيئتها؟ ربما لا تقم بإنهاء الاشتراك إلا بعد أسبوع / أسبوعين بدلاً من يوم واحد.

  • يتم إزالة تكرار علامات الدفع (Push tags) لكل قناة، hostname-chat-mention-general … هذا ليس مثاليًا للإشارات لأننا ندمج لكل قناة وقد يكون مربكًا إذا أشار 4 أشخاص مختلفون إليك في أوقات مختلفة في القناة.

  • أرسل دائمًا الإشعارات حتى لو كان المستخدم متصلاً بالإنترنت (افتراضيًا) - اسمح للمستخدمين بتجاوز هذا السلوك إذا رغبوا في ذلك.

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

  • بشكل أساسي، تخلص من الكثير من منطق “عفوًا، لم يكن ينبغي أن نرسل لك إشعارًا” بشكل افتراضي.


تم إيقاف التشغيل بالكامل عند ترقية Discourse، بالنسبة للمستضافين ذاتيًا، يمكن أن يكون بالتأكيد بسبب مشاكل الاتصال ببوابة الدفع. ربما تستغرق الترقيات على بعض الخوادم أيامًا، وربما تكون شبكة داخلية لمدة 24 ساعة لسبب ما.


الكود ذو الصلة (عبر Gemini 3 pro)

إنهاء اشتراكات PWA

يوجد المنطق الذي ينهي الاشتراكات بعد 3 إخفاقات في 24 ساعة في الطريقة handle_generic_error.

تخفيف إشعار الدفع / التحقق من الاتصال

المنطق الذي يتحقق مما إذا كان المستخدم متصلاً بالإنترنت (“تخفيف”) ويتخطى إشعار الدفع موجود مركزيًا هنا. يعتمد هذا على SiteSetting.push_notification_time_window_mins.

الدردشة: مشاكل تسلسل المعاملات

تغلف خدمة UpdateMessage خطوة publish داخل معاملة قاعدة بيانات. يمكن أن يسبب هذا شروط سباق حيث تحاول وظيفة الإشعار قراءة الرسالة قبل التزام المعاملة.

الدردشة: الإشارات في القنوات غير المتابعة

يقوم الكود صراحةً بتصفية following: true عند معالجة الإشارات للقنوات العامة، مما يمنع الإشعارات للمستخدمين الذين لا يتابعون القناة.

الدردشة: علامات إشعار الدفع

يتم تعريف منطق إنشاء العلامات الذي يزيل التكرار في الإشعارات لكل قناة (ويقوم بدمجها) هنا:

4 إعجابات

هذا شيء قمنا به بالفعل كثيرًا في السنوات الماضية، لقد أزلت الكثير من التعليمات البرمجية “الذكية”، والتي يصعب دائمًا متابعتها وعرضة للاستجوابات. ولكن نعم، لا تزال هناك مسارات تعليمات برمجية مختلفة.

مخطط تدفق إشعار Slack سيئ السمعة إلزامي:

image

لهذا السبب كنت أطلب المزيد من التفاصيل أعلاه، هناك العديد من المواقف…

إعجابَين (2)

أحب أن أرى “الذهاب بصوت عالٍ” كإعداد مسبق على مستوى النظام.

“آسف، أرى هذه الرسالة الآن فقط — إشعارات الدفع لم تعمل مرة أخرى. أريد استعادة Slack/Whatsapp/Signal/XYZ الخاص بي”

هذه هي أكبر مشكلة نواجهها في اعتمادنا على Discourse كإنترانت اجتماعي للمؤسسات.

إعجابَين (2)