Error con las notificaciones de chat que no aparecen

Pasamos un tiempo considerable en los últimos dos años en la confiabilidad de las notificaciones de chat, Alex.

¿Cuándo abandonaste Chat? @jordan-violet, ¿sigues experimentando el problema en el OP?

Gracias por tus esfuerzos, Sam. Personalmente, las notificaciones funcionaron la mayor parte del tiempo, pero se desconectaban aleatoriamente y requerían actualizar la página de Discourse para que volvieran a funcionar; sin embargo, históricamente no funcionaron en absoluto, o funcionaron esporádicamente, y definitivamente tienen la costumbre de desactivarse por completo en las actualizaciones de Discourse.

Dejamos de usar el chat esta semana después de adoptarlo a principios de 2023. Las notificaciones en Google Chat simplemente funcionaron para todo el equipo, incluidos aquellos con los que hemos tenido problemas recurrentes o que nunca logramos que funcionaran.

Hola @lindsey, estamos experimentando el mismo problema. ¿Tienes alguna actualización por tu parte sobre el estado y una posible solución?

Hola Micha,

¿Puedes intentar hacer un informe más detallado de cuándo no recibes las notificaciones? Hay muchos casos (iOS, Android, PWA, Discourse Hub, Safari de escritorio, Chrome, Firefox, ¿qué tipo de notificación: canal público? ¿DM? ¿hilo? ¿todas? ¿estabas navegando cuando deberías haberla recibido?..)

1 me gusta

Empecé a echar un vistazo a este código, pero creo que un gran problema está en torno a las “expectativas”

  • ¿Se trata de notificaciones push? (si es así, ¿estás usando PWA o la aplicación Discourse Hub?)
  • Cuando la gente dice “no ser notificada”, ¿quieren decir “no ser notificada sobre menciones en una notificación push”?
  • ¿Es la expectativa ser notificado sobre una @mención a través de una notificación push cuando ya estás en línea?

Hay una gran familia de lo que yo consideraría problemas conocidos que podemos mejorar.

  1. En PWA, si intentamos enviar 3 veces en 24 horas y fallamos (debido a la conectividad con el distribuidor de mensajes o cualquier otra cosa), eliminaremos las suscripciones y no alertaremos al usuario sobre nada.
  2. En Hub, las notificaciones push solo están disponibles para los clientes alojados en Discourse.
  3. Hay algunos problemas de secuenciación por los cuales una notificación puede perderse en la edición de un mensaje de chat porque generamos una notificación push dentro de una transacción.
  4. Tenemos un “Debounce” de 1 minuto que es configurable, pero confuso. Acabo de ser mencionado pero no recibí una notificación push. Ventana de tiempo de notificación push. Esto causó: @mención, visito la aplicación en 60 segundos. Sin @mención.
  5. Si mencionas a un usuario en un canal que no está siguiendo, no recibirá la mención. (por diseño)

Para ser honesto @lindsey / @j.jaffeux / @pmusaraj, siento que “hacer ruido” probablemente resultaría en eliminar la gran mayoría de los problemas que tiene la gente y las quejas que hemos visto a lo largo de los años con respecto a las notificaciones de chat.

  • Enviar siempre las notificaciones de @mención de inmediato (predeterminado del sitio); los sitios que deseen un retraso pueden configurarlo.
  • Enviar siempre las notificaciones de @mención desde TODOS los canales, excluyendo solo los canales que los usuarios silencian explícitamente (o para los que no tienen permiso para ver), esto se alinea con el comportamiento en el foro.
  • Hay algo extraño en update_message.rb que publica un mensaje dentro de una transacción. (en entornos multihilo esto puede perderse)
  • Si hemos cancelado una suscripción en una PWA, muestra un banner en la PWA diciendo: las notificaciones push no están configuradas, ¿quieres configurarlas? Quizás solo cancelarlas después de 1 semana / 2 semanas en lugar de 1 día.
  • Las etiquetas de push se deducen por canal, hostname-chat-mention-general… esto no es ideal para las menciones porque colapsamos por canal y eso puede ser confuso si 4 personas diferentes te mencionaron en diferentes momentos en el canal.
  • Enviar siempre notificaciones push incluso si el usuario está en línea (predeterminado): permitir a los usuarios anular este comportamiento si lo desean.
  • Una guinda del pastel sería admitir notificaciones push de primera clase en todos los sitios para las personas que tienen configurada la ID de Discourse (a través de Discourse ID): esto le daría a Hub una sensación consistente en todo.

Básicamente, eliminar gran parte de la lógica de “ups, no deberíamos haberte notificado” por defecto.


Desactivado por completo en la actualización de Discourse, para los autoalojados sin duda puede deberse a problemas de conectividad con la puerta de enlace de push. Quizás las actualizaciones en algunos servidores tardan días, tal vez sea una intranet durante 24 horas por alguna razón.


Código relevante (a través de Gemini 3 pro)

Eliminación de suscripciones PWA

La lógica que elimina las suscripciones después de 3 fallos en 24 horas se encuentra en el método handle_generic_error.

Limitar/Verificar en línea de la notificación push

La lógica que comprueba si un usuario está en línea (“debounce”) y omite la notificación push se encuentra centralmente aquí. Esto depende de SiteSetting.push_notification_time_window_mins.

Chat: Problemas de secuenciación de transacciones

El servicio UpdateMessage envuelve el paso publish dentro de una transacción de base de datos. Esto puede causar condiciones de carrera en las que el trabajo de notificación intenta leer el mensaje antes de que se confirme la transacción.

Chat: Menciones en canales no seguidos

El código filtra explícitamente following: true al procesar menciones para canales públicos, evitando notificaciones para usuarios que no siguen el canal.

Chat: Etiquetas de notificación push

La lógica de generación de etiquetas que elimina duplicados de notificaciones por canal (colapsándolas) se define aquí:

4 Me gusta

Esto es algo que ya hemos hecho mucho en los últimos años, eliminé gran parte del código “inteligente”, que siempre es difícil de seguir y propenso a interrogantes. Pero sí, todavía hay varias rutas de código.

Diagrama de flujo obligatorio de las infames notificaciones de Slack:

image

Por eso pedía más detalles anteriormente, hay muchas situaciones…

2 Me gusta

Me ENCANTARÍA ver “hacer ruido” como un preajuste a nivel de sistema.

“Lo siento, recién veo este mensaje: las notificaciones push no funcionaron de nuevo. Quiero mi Slack/Whatsapp/Signal/XYZ de vuelta”

Este es, con diferencia, el mayor problema al que nos enfrentamos con nuestra adopción de Discourse como intranet social empresarial.

2 Me gusta