Bug con notifiche chat che non compaiono

Ho iniziato a dare un’occhiata a questo codice, ma ritengo che un grosso problema riguardi le “aspettative”.

  • Riguarda le notifiche push? (in tal caso state usando l’app PWA o l’app Discourse Hub)
  • Quando le persone dicono di “non ricevere notifiche”, intendono “non ricevere notifiche push per le menzioni”?
  • L’aspettativa è ricevere una notifica push per una @menzione quando si è già online?

C’è una grande famiglia di quelli che considererei problemi noti che possiamo migliorare.

  1. In PWA, se proviamo a inviare 3 notifiche push in 24 ore e falliamo (a causa della connettività al distributore dei messaggi o qualsiasi altra cosa), elimineremo le sottoscrizioni e non avviseremo l’utente di nulla.
  2. In Hub, le notifiche push sono disponibili solo per i clienti con hosting Discourse.
  3. Ci sono alcuni problemi di sequenziamento per cui una notifica può andare persa durante la modifica di un messaggio di chat perché generiamo una notifica push all’interno di una transazione.
  4. Abbiamo un “Debounce” di 1 minuto che è configurabile, ma confuso. Sono stato appena menzionato ma non ho ricevuto una notifica push. push notification time window (finestra temporale notifica push). Questo ha causato: @menzione, capita che io visiti l’app entro 60 secondi. Nessuna @menzione.
  5. Se si @menziona un utente in un canale che non sta seguendo, non riceverà la menzione. (per progettazione)

Onestamente @lindsey / @j.jaffeux / @pmusaraj, ritengo che “andare in chiaro” probabilmente risolverebbe la stragrande maggioranza dei problemi che le persone hanno e delle lamentele che abbiamo visto negli anni riguardo alle notifiche di chat.

  • Inviare sempre immediatamente le notifiche @menzione (impostazione predefinita del sito); i siti che desiderano un ritardo possono configurarlo.
  • Inviare sempre le notifiche @menzione da TUTTI i canali, escludendo solo i canali che gli utenti hanno esplicitamente silenziato (o per i quali non hanno il permesso di vedere) questo si allinea al comportamento sul forum.
  • C’è qualcosa di strano in update_message.rb che pubblica un messaggio all’interno di una transazione. (negli ambienti multi-thread questo può andare perso)
  • Se abbiamo eliminato una sottoscrizione in una PWA, visualizzare un banner nella PWA che dice: le notifiche push non sono configurate, vuoi configurarle? Forse eliminare le sottoscrizioni solo dopo 1 settimana / 2 settimane anziché 1 giorno.
  • I tag di push sono deduplicati per canale, hostname-chat-mention-general… questo non è l’ideale per le menzioni poiché collassiamo per canale e questo può creare confusione se 4 persone diverse ti hanno menzionato in momenti diversi sullo stesso canale.
  • Inviare sempre le notifiche anche se l’utente è online (impostazione predefinita) - consentire agli utenti di sovrascrivere questo comportamento se lo desiderano.
  • Una ciliegina su questa torta sarebbe supportare notifiche push di prima classe su tutti i siti per le persone che hanno configurato l’ID Discourse (tramite Discourse ID) - Questo darebbe a Hub un aspetto coerente su tutto.

In pratica, eliminare per impostazione predefinita gran parte della logica del tipo “ops, non avremmo dovuto notificarti”.


Disattivate completamente durante l’aggiornamento di Discourse, per gli self-hoster può essere sicuramente dovuto a problemi di connettività al gateway di push. Forse gli aggiornamenti su alcuni server richiedono giorni, forse la rete è interna per 24 ore per qualche motivo.


Codice pertinente (tramite Gemini 3 pro)

Uccisione delle sottoscrizioni PWA

La logica che elimina le sottoscrizioni dopo 3 errori in 24 ore si trova nel metodo handle_generic_error.

Debounce Notifiche Push / Controllo Online

La logica che controlla se un utente è online (“debounce”) e salta la notifica push è posizionata centralmente qui. Si basa su SiteSetting.push_notification_time_window_mins.

Chat: Problemi di Sequenziamento delle Transazioni

Il servizio UpdateMessage racchiude il passaggio publish all’interno di una transazione di database. Questo può causare condizioni di gara in cui il job di notifica tenta di leggere il messaggio prima che la transazione venga commessa.

Chat: Menzioni su canali non seguiti

Il codice filtra esplicitamente per following: true quando elabora le menzioni per i canali pubblici, impedendo le notifiche agli utenti che non seguono il canale.

Chat: Tag Notifiche Push

La logica di generazione dei tag che deduplica le notifiche per canale (collassandole) è definita qui:

4 Mi Piace