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

Passamos um tempo significativo nos últimos dois anos na confiabilidade das notificações de chat, Alex.

Quando você abandonou o Chat? @jordan-violet, você ainda está tendo o problema mencionado no OP?

Obrigado pelos seus esforços, Sam. Pessoalmente, as notificações funcionaram na maior parte do tempo, mas ocasionalmente paravam de funcionar e exigiam a atualização da página do Discourse para que voltassem a funcionar - mas historicamente nunca funcionaram, ou funcionaram esporadicamente, e definitivamente têm o hábito de serem desativadas completamente nas atualizações do Discourse.

Paramos de usar o chat esta semana após adotá-lo no início de 2023. As notificações no Google Chat simplesmente funcionaram para toda a equipe, incluindo aqueles com quem tivemos problemas regulares ou que nunca conseguimos fazer funcionar.

Olá @lindsey, estamos enfrentando o mesmo problema. Você tem alguma atualização do seu lado sobre o status e uma possível correção?

Olá Micha,

Você pode tentar fazer um relatório mais detalhado de quando não estiver recebendo as notificações, por favor? Há muitos casos (iOS, Android, PWA, Discourse Hub, desktop Safari, Chrome, Firefox, que tipo de notificação: canal público? DM? thread? todas? você estava navegando quando deveria ter recebido?..)

1 curtida

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

Isso já é algo que fizemos muito nos últimos anos, removi grande parte do código “inteligente”, que é sempre difícil de acompanhar e propenso a questionamentos. Mas sim, ainda existem vários caminhos de código.

Fluxograma de notificação do Slack infame obrigatório:

image

É por isso que pedi mais detalhes acima, existem muitas situações…

2 curtidas

Eu adoraria ver o “ficar no modo barulhento” como uma predefinição em todo o sistema.

“Desculpe, só estou vendo esta mensagem agora — as notificações push não funcionaram de novo. Quero meu Slack/Whatsapp/Signal/XYZ de volta”

Este é, de longe, o maior problema que estamos enfrentando com a nossa adoção do Discourse como uma intranet social corporativa.

2 curtidas