Mensajes de desconexión personalizados en Shiny

16/11/2025

shiny

Las aplicaciones Shiny funcionan con un servidor detrás, que es el proceso de R que realiza los cálculos necesarios para mostrar tus contenidos. Por lo mismo, estas aplicaciones no pueden estar conectadas por siempre, porque el proceso no puede estar esperando que la o el usuario hagan algo por siempre, así que y luego de un tiempo de inactividad se desconectan.

Por ejemplo, si pasa mucho tiempo, o si el usuario de la app presiona un enlace y se va de la aplicación, y después aprieta atrás en el navegador, la app podría haberse desconectado al detectar que el usuario se fue. En estos casos la aplicación se pone gris, o bien, aparece un mensaje en inglés sobre la desconexión.

Para mejorar la experiencia de uso podemos configurar mensaje de desconexión más amigable. Con el paquete {shinydisconnect} de Dean Attali podemos personalizar el mensaje de desconexión de la app para que les usaries entiendan mejor que la app requiere recargarse.

Instala el paquete con install.packages("shinydisconnect") y agrégalo al código de tu app:

library(shinydisconnect)

Usaremos una aplicación sencilla de prueba, que tiene el siguiente código para hacerla desconectarse:

observeEvent(input$desconectar, {
    session$close()
  })

Para personalizar el mensaje de desconexión, en la interfaz de usuario (ui), agregamos la función disconnectMessage(), donde puedes personalizar el texto y los colores:

# mensaje en caso de desconexión
disconnectMessage(
  refresh = "Volver a cargar",
  background = "#EAD1FA",
  colour = "#553A74",
  refreshColour = "#9069C0",
  overlayColour = "#553A74",
  size = 14,
  text = "La aplicación se desconectó. Vuelve a cargar la página."
),

Ahora cuando la aplicación se cae o desconecta, aparece un mensaje más amigable:

Mucho mejor!

Ver código completo de la aplicación
library(shiny)
library(bslib)
library(ggplot2)
library(shinydisconnect)

thematic::thematic_shiny()

ui <- page_fill(
  
  # tema
  theme = bs_theme(
    fg = "#553A74",
    bg = "#EAD1FA",
    primary = "#6E3A98"
  ),
  
  
  # mensaje en caso de desconexión
  disconnectMessage(
    refresh = "Volver a cargar",
    background = "#EAD1FA",
    colour = "#553A74",
    refreshColour = "#9069C0",
    overlayColour = "#553A74",
    size = 14,
    text = "La aplicación se desconectó. Vuelve a cargar la página."
  ),
  
  # interfaz
  div(
  h1("Una aplicación muy aburrida"),
  
  plotOutput("grafico", height = 240, width = 320),
  
  actionLink("desconectar", 
               "Desconectar la app")
  )
)
 
server <- function(input, output, session) { 
  
  # desconectar la app
  observeEvent(input$desconectar, {
    session$close()
  })
  
  output$grafico <- renderPlot({
    iris |> 
      ggplot() +
      aes(Sepal.Length, Sepal.Width) +
      geom_point()
  })
  
}

shinyApp(ui, server)
Fecha de publicación:
November 16, 2025
Extensión:
2 minute read, 386 words
Tags:
shiny
Ver también:
Medir el ancho de una aplicación Shiny como una variable reactiva y usarla para adaptar los contenidos de la app
Plataforma de análisis: Índice de Brechas de Género
Galería de libros de _Goodreads_ para tu blog o sitio web con R y Quarto