Bug com notificações de chat que não aparecem

Comecei a dar uma olhada neste código, mas sinto que um grande problema está em torno das “expectativas”

  • Isso é sobre notificações push? (se for, você está usando PWA ou o Aplicativo Hub do Discourse)
  • Quando as pessoas dizem “não serem notificadas”, elas querem dizer “não serem notificadas sobre menções em uma notificação push”?
  • A expectativa é ser notificado sobre uma @menção via notificação push quando você já está online?

Existe uma grande família do que eu consideraria problemas conhecidos que podemos melhorar.

  1. No PWA, se tentarmos enviar 3 vezes em 24 horas e falharmos (devido à conectividade com o distribuidor de mensagens ou qualquer outra coisa), nós encerraremos as inscrições e não alertaremos o usuário sobre nada.
  2. No Hub, as notificações push estão disponíveis apenas para clientes hospedados pelo Discourse.
  3. Existem alguns problemas de sequenciamento onde uma notificação pode ser perdida na edição de uma mensagem de chat porque acionamos uma notificação push dentro de uma transação.
  4. Temos um “Debounce” de 1 minuto que é configurável, mas confuso. Acabei de ser mencionado, mas não recebi uma notificação push. push notification time window (janela de tempo de notificação push). Isso causou: @menção, eu visito o aplicativo em 60 segundos. Nenhuma @menção.
  5. Se você @mencionar um usuário em um canal que ele não está seguindo, ele não receberá a menção. (por design)

Para ser honesto @lindsey / @j.jaffeux / @pmusaraj, sinto que “tornar público” provavelmente resultaria na remoção da grande maioria dos problemas que as pessoas têm e das reclamações que vimos ao longo dos anos em relação às notificações de chat.

  • Sempre envie notificações de @menção imediatamente (padrão do site); sites que desejam um atraso podem configurar.
  • Sempre envie notificações de @menção de TODOS os canais, exclua apenas canais que os usuários silenciam explicitamente (ou para os quais não têm permissão de visualização), isso se alinha com o comportamento no fórum.
  • Há algo estranho em update_message.rb que está publicando uma mensagem dentro de uma transação. (em ambientes com múltiplas threads isso pode ser perdido)
  • Se tivermos encerrado uma inscrição em um PWA, exiba um banner no PWA dizendo - as notificações push não estão configuradas, você gostaria de configurá-las? Talvez encerre apenas após 1 semana / 2 semanas em vez de 1 dia.
  • As tags de push são desduplicadas por canal, hostname-chat-mention-general… isso não é ideal para menções, pois colapsamos por canal e isso pode ser confuso se 4 pessoas diferentes mencionaram você em momentos diferentes no canal.
  • Sempre envie notificações mesmo que o usuário esteja online (padrão) - permita que os usuários anulem esse comportamento se desejarem.
  • Uma cereja no topo de tudo isso seria suportar notificações push de primeira classe em todos os sites para pessoas que têm o ID do Discourse configurado (via ID do Discourse) - Isso daria ao hub uma sensação consistente em tudo.

Basicamente, remover muita da lógica de “ops, não deveríamos ter notificado você” por padrão.


Desligado completamente na atualização do Discourse, para auto-hospedados pode definitivamente ser devido a problemas de conectividade com o gateway de push. Talvez as atualizações em alguns servidores levem dias, talvez seja uma intranet por 24 horas por algum motivo.


Código relevante (via Gemini 3 pro)

PWA Subscriptions being killed (Inscrições PWA sendo encerradas)

A lógica que encerra as inscrições após 3 falhas em 24 horas está localizada no método handle_generic_error.

Push Notification Debounce / Online Check (Debounce de Notificação Push / Verificação Online)

A lógica que verifica se um usuário está online (“debounce”) e pula a notificação push está centralmente localizada aqui. Isso depende de SiteSetting.push_notification_time_window_mins.

Chat: Transaction Sequencing Issues (Chat: Problemas de Sequenciamento de Transação)

O serviço UpdateMessage envolve a etapa de publish dentro de uma transação de banco de dados. Isso pode causar condições de corrida onde o trabalho de notificação tenta ler a mensagem antes que a transação seja confirmada.

Chat: Mentions on non-followed channels (Chat: Menções em canais não seguidos)

O código filtra explicitamente por following: true ao processar menções para canais públicos, impedindo notificações para usuários que não seguem o canal.

Chat: Push Notification Tags (Chat: Tags de Notificação Push)

A lógica de geração de tags que desduplica notificações por canal (colapsando-as) é definida aqui:

4 curtidas