Fehler bei Chat-Benachrichtigungen, die nicht angezeigt werden

Wir haben in den letzten Jahren erhebliche Zeit in die Zuverlässigkeit von Chat-Benachrichtigungen investiert, Alex.

Wann hast du mit dem Chat aufgehört? @jordan-violet, tritt das Problem in der OP immer noch auf?

Danke für deine Bemühungen, Sam. Persönlich funktionierten die Benachrichtigungen bei mir meistens, fielen aber zufällig aus und erforderten ein Neuladen der Discourse-Seite, um sie wieder zum Laufen zu bringen – historisch gesehen funktionierten sie aber nie, oder nur sporadisch, und hatten definitiv die Angewohnheit, bei Discourse-Upgrades komplett deaktiviert zu werden.

Wir haben diese Woche aufgehört, Chat zu nutzen, nachdem wir ihn Anfang 2023 eingeführt hatten. Benachrichtigungen in Google Chat funktionierten einfach für das gesamte Team, einschließlich derjenigen, mit denen wir regelmäßig Probleme hatten oder die wir nie zum Laufen gebracht haben.

Hallo @lindsey, wir haben das gleiche Problem. Haben Sie Neuigkeiten von Ihrer Seite bezüglich des Status und einer möglichen Lösung?

Hallo Micha,

könntest du bitte versuchen, einen detaillierteren Bericht darüber zu erstellen, wann du die Benachrichtigungen nicht erhältst? Es gibt viele Fälle (iOS, Android, PWA, Discourse Hub, Desktop Safari, Chrome, Firefox, welche Art von Benachrichtigung: öffentlicher Kanal? DM? Thread? Alle? Hast du gesurft, als du sie hättest erhalten sollen?..).

1 „Gefällt mir“

Ich habe angefangen, mir diesen Code anzusehen, aber ich denke, ein großes Problem liegt bei den „Erwartungen“.

  • Geht es um Push-Benachrichtigungen? (Wenn ja, verwenden Sie PWA oder die Discourse Hub App?)
  • Wenn Leute sagen, sie „werden nicht benachrichtigt“, meinen sie dann „werden nicht über Erwähnungen in einer Push-Benachrichtigung benachrichtigt“?
  • Ist die Erwartung, über eine @Erwähnung per Push-Benachrichtigung benachrichtigt zu werden, wenn man bereits online ist?

Es gibt eine große Familie von Problemen, die ich als bekannte Probleme betrachten würde, die wir verbessern können.

  1. In der PWA, wenn wir 3 Mal innerhalb von 24 Stunden versuchen zu pushen und scheitern (aufgrund der Verbindung zum Nachrichtendistributor oder aus anderen Gründen), beenden wir Abonnements und benachrichtigen den Benutzer über nichts.
  2. In Hub sind Push-Benachrichtigungen nur für Discourse-gehostete Kunden verfügbar.
  3. Es gibt einige Sequenzierungsprobleme, bei denen eine Benachrichtigung bei der Bearbeitung einer Chat-Nachricht verloren gehen kann, da wir eine Push-Benachrichtigung innerhalb einer Transaktion auslösen.
  4. Wir haben einen „Debounce“ von 1 Minute, der konfigurierbar, aber verwirrend ist. Ich wurde gerade erwähnt, habe aber keine PN erhalten. push notification time window. Dies führte dazu: @Erwähnung, ich besuche die App innerhalb von 60 Sekunden. Keine @Erwähnung.
  5. Wenn Sie einen Benutzer in einem Kanal erwähnen, dem er nicht folgt, erhält er die Erwähnung nicht. (By Design)

Ehrlich gesagt, @lindsey / @j.jaffeux / @pmusaraj, ich habe das Gefühl, dass „laut werden“ wahrscheinlich die überwiegende Mehrheit der Probleme und Beschwerden beseitigen würde, die wir im Laufe der Jahre bezüglich Chat-Benachrichtigungen gesehen haben.

  • Push-Benachrichtigungen für @Erwähnungen immer sofort senden (Site-Standard), Sites, die eine Verzögerung wünschen, können dies konfigurieren.
  • Push-Benachrichtigungen für @Erwähnungen immer von ALLEN Kanälen senden, nur Kanäle ausschließen, die Benutzer explizit stummgeschaltet haben (oder für die sie keine Berechtigung haben), dies entspricht dem Verhalten im Forum.
  • Es gibt etwas Seltsames in update_message.rb, das eine Nachricht innerhalb einer Transaktion veröffentlicht. (In Multi-Thread-Umgebungen kann dies verloren gehen)
  • Wenn wir ein Abonnement in einer PWA beendet haben, zeigen Sie ein Banner in der PWA an, das besagt: Push-Benachrichtigungen sind nicht konfiguriert, möchten Sie sie konfigurieren? Vielleicht erst nach 1 Woche / 2 Wochen beenden, anstatt nach 1 Tag.
  • Push-Tags werden pro Kanal dedupliziert, hostname-chat-mention-general … dies ist für Erwähnungen nicht ideal, da wir pro Kanal zusammenfassen, was verwirrend sein kann, wenn 4 verschiedene Personen Sie zu verschiedenen Zeiten im Kanal erwähnt haben.
  • Push-Benachrichtigungen immer senden, auch wenn der Benutzer online ist (Standard) – Benutzern erlauben, dieses Verhalten bei Bedarf zu überschreiben.
  • Ein Sahnehäubchen auf all dem wäre die Unterstützung erstklassiger Push-Benachrichtigungen auf allen Websites für Benutzer, die eine Discourse ID konfiguriert haben (über Discourse ID) – Dies würde Hub ein konsistentes Gefühl über alles hinweg verleihen.

Im Grunde genommen die ganze „Ups, wir hätten Sie nicht benachrichtigen sollen“-Logik standardmäßig entfernen.


Bei einem Discourse-Upgrade komplett deaktiviert, für Self-Hosters kann dies definitiv auf Verbindungsprobleme mit dem Push-Gateway zurückzuführen sein. Vielleicht dauern Upgrades auf einigen Servern Tage, vielleicht ist es aus irgendeinem Grund 24 Stunden lang ein Intranet.


Relevanter Code (via Gemini 3 pro)

PWA-Abonnements werden beendet

Die Logik, die Abonnements nach 3 Fehlern innerhalb von 24 Stunden beendet, befindet sich in der Methode handle_generic_error.

Push-Benachrichtigungs-Debounce / Online-Prüfung

Die Logik, die prüft, ob ein Benutzer online ist („Debounce“) und die Push-Benachrichtigung überspringt, befindet sich zentral hier. Dies hängt von SiteSetting.push_notification_time_window_mins ab.

Chat: Transaktionssequenzierungsprobleme

Der Dienst UpdateMessage fasst den publish-Schritt in einer Datenbanktransaktion zusammen. Dies kann zu Race Conditions führen, bei denen der Benachrichtigungsjob versucht, die Nachricht zu lesen, bevor die Transaktion committet wird.

Chat: Erwähnungen in nicht gefolgten Kanälen

Der Code filtert explizit nach following: true, wenn Erwähnungen für öffentliche Kanäle verarbeitet werden, wodurch verhindert wird, dass Benutzer, die dem Kanal nicht folgen, Benachrichtigungen erhalten.

Chat: Push-Benachrichtigungs-Tags

Die Tag-Generierungslogik, die Benachrichtigungen pro Kanal dedupliziert (zusammenfasst), ist hier definiert:

4 „Gefällt mir“

Das ist etwas, das wir in den letzten Jahren bereits häufig getan haben. Ich habe viel vom „intelligenten“ Code entfernt, der immer schwer nachzuvollziehen und anfällig für Nachfragen ist. Aber ja, es gibt immer noch verschiedene Code-Pfade.

Obligatorischer berüchtigter Slack-Benachrichtigungs-Flussdiagramm:

image

Deshalb habe ich oben nach mehr Details gefragt, es gibt so viele Situationen…

2 „Gefällt mir“

Ich würde es LIEBEN, wenn „laut werden“ als systemweite Voreinstellung eingeführt würde.

„Entschuldigung, ich sehe diese Nachricht erst jetzt – die Push-Benachrichtigungen haben wieder nicht funktioniert. Ich will mein Slack/Whatsapp/Signal/XYZ zurück“

Dies ist bei weitem das größte Problem, mit dem wir bei der Einführung von Discourse als unternehmensweites soziales Intranet konfrontiert sind.

2 „Gefällt mir“