Bug con notifiche chat che non compaiono

Abbiamo dedicato molto tempo negli ultimi due anni all’affidabilità delle notifiche di chat Alex.

Quando hai abbandonato Chat? @jordan-violet stai ancora riscontrando il problema menzionato nell’OP?

Grazie per i tuoi sforzi, Sam. Personalmente, le notifiche hanno funzionato la maggior parte delle volte, ma si interrompevano casualmente e richiedevano l’aggiornamento della pagina Discourse per farle funzionare di nuovo, ma storicamente non hanno mai funzionato affatto, o hanno funzionato sporadicamente, e sicuramente hanno l’abitudine di essere disattivate completamente durante l’aggiornamento di Discourse.

Abbiamo smesso di usare la chat questa settimana dopo averla adottata all’inizio del 2023. Le notifiche in Google Chat hanno funzionato per tutto il team, compresi coloro con cui abbiamo avuto problemi regolari o che non siamo mai riusciti a far funzionare.

Ciao @lindsey, stiamo riscontrando lo stesso problema. Hai aggiornamenti da parte tua riguardo allo stato e a una potenziale soluzione?

Ciao Micha,

puoi provare a creare un resoconto più dettagliato di quando non ricevi le notifiche, per favore? Ci sono molti casi (ios, android, pwa, discourse hub, desktop safari, chrome, firefox, che tipo di notifica: canale pubblico? dm? thread? tutte? stavi navigando quando avresti dovuto riceverla?..)

1 Mi Piace

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

È qualcosa che abbiamo già fatto molto negli ultimi anni, ho rimosso gran parte del codice “intelligente”, che è sempre difficile da seguire e soggetto a interrogazioni. Ma sì, ci sono ancora vari percorsi di codice.

Diagramma di flusso obbligatorio delle famigerate notifiche di Slack:

image

Ecco perché ho chiesto maggiori dettagli sopra, ci sono così tante situazioni…

2 Mi Piace

Mi piacerebbe molto vedere “andare a tutto volume” come predefinito a livello di sistema.

“Scusa, vedo questo messaggio solo ora — le notifiche push non hanno funzionato di nuovo. Voglio indietro il mio Slack/Whatsapp/Signal/XYZ”

Questo è di gran lunga il problema più grande che stiamo affrontando con l’adozione di Discourse come intranet sociale aziendale.

2 Mi Piace