ここ数年、チャット通知の信頼性について多くの時間を費やしてきました、アレックス。
チャットはいつから諦めたのですか? @jordan-violet、OPでまだ問題が発生していますか?
ここ数年、チャット通知の信頼性について多くの時間を費やしてきました、アレックス。
チャットはいつから諦めたのですか? @jordan-violet、OPでまだ問題が発生していますか?
サム、ご尽力いただきありがとうございます。個人的には、通知はほとんどの場合機能していましたが、ランダムにドロップアウトし、Discourse ページを更新して再度機能させる必要がありました。しかし、過去にはまったく機能しなかったり、断続的に機能したり、Discourse のアップグレードで完全にオフになったりする傾向がありました。
2023 年初頭に導入した後、今週チャットの使用を中止しました。Google Chat の通知は、定期的に問題が発生していたチームメンバーや、まったく機能させることができなかったメンバーを含め、チーム全体で機能しました。
こんにちは、@lindseyさん、弊社でも同じ問題が発生しています。状況と潜在的な修正について、何か最新情報はお持ちでしょうか?
Micha様
通知が届かなかった場合に、より詳細なレポートを作成していただけますでしょうか?ケースが多数あります(iOS、Android、PWA、Discourse Hub、デスクトップのSafari、Chrome、Firefox、通知の種類:パブリックチャンネル?DM?スレッド?すべて?受信すべき時にブラウジングしていましたか?など…)。
このコードを見始めたのですが、大きな問題は「期待値」にあると感じています。
私が既知の問題と見なす大きな問題群があり、これらは改善できます。
@mentionがあり、私が60秒以内にアプリにアクセスした場合、@mentionがない、という事態を引き起こします。正直なところ、@lindsey / @j.jaffeux / @pmusaraj、大声で言うと、長年にわたってチャット通知に関して人々が抱えてきた問題や私たちが目にしてきた苦情の大部分を取り除くことになると思います。
update_message.rbに、トランザクション内でメッセージをパブリッシュする奇妙な処理がある。(マルチスレッド環境ではこれが失われる可能性がある)hostname-chat-mention-general)。これはメンションにとっては理想的ではありません。なぜなら、チャンネルごとに集約されてしまい、同じチャンネルで異なる時間に4人の異なるユーザーからメンションされた場合に混乱を招く可能性があるからです。基本的に、デフォルトで「おっと、通知すべきではなかった」というロジックの多くを取り除くことです。
Discourseのアップグレードで完全にオフになることについては、セルフホストの場合、プッシュゲートウェイへの接続の問題が原因である可能性は確かにあります。アップグレードが一部のサーバーで数日かかる場合もあれば、何らかの理由で24時間イントラネットになる場合もあります。
関連コード(Gemini 3 proによる)
24時間で3回失敗した後にサブスクリプションを無効にするロジックは、handle_generic_errorメソッドにあります。
ユーザーがオンラインかどうかをチェックし、プッシュ通知をスキップするロジックはここに集中しています。これはSiteSetting.push_notification_time_window_minsに依存しています。
UpdateMessageサービスは、publishステップをデータベーストランザクション内にラップしています。これにより、通知ジョブがトランザクションがコミットされる前にメッセージを読み取ろうとする場合に競合状態が発生する可能性があります。
コードは、パブリックチャンネルのメンションを処理する際に、following: trueで明示的にフィルタリングし、チャンネルをフォローしていないユーザーへの通知を防いでいます。
チャンネルごとに通知を重複排除する(集約する)タグ生成ロジックはここに定義されています。
これは、ここ数年で私たちが既に行ったことですが、追跡が難しく、疑問を招きやすい「スマートな」コードの多くを削除しました。しかし、確かにまだ様々なコードパスが存在します。
恒例の悪名高いSlack通知フローチャート:

これが、上記でより詳細を求めた理由です。状況が非常に多岐にわたるためです…
システム全体で「大音量にする」プリセットが利用できるようになったら、本当に嬉しいです。
「ごめん、今メッセージを見たところだ。プッシュ通知がまた機能しなかったんだ。Slack/Whatsapp/Signal/XYZを返してくれ」
これは、Discourseをエンタープライズソーシャルイントラネットとして導入する上で、私たちが直面している最大の課題です。