# Mensajes de desconexión personalizados en 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. Lo bueno es que podemos personalizar el mensaje de desconexión de la app para que les usaries entiendan mejor que la app requiere recargarse.

- URL: https://bastianolea.rbind.io/blog/shiny_desconexion/
- Fecha: 2025-11-16
- Autor: Bastián Olea Herrera
- Etiquetas: shiny
- Recursos: [Paquete](https://github.com/daattali/shinydisconnect) [Código](https://gist.github.com/bastianolea/c7b20dbffd5658a3a8aeed53efb884d7)

---

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**. 

**Publicación relacionada:** [Tutorial: Crea aplicaciones web interactivas en R con Shiny](https://bastianolea.rbind.io/blog/shiny/index.md): Shiny es un paquete para desarrollar aplicaciones web interactivas con R, generalmente centradas en el análisis y visualización de datos. Shiny le da vida a todo lo que hayas desarrollado con R sin…

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](https://github.com/daattali/shinydisconnect) 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:

```r
library(shinydisconnect)
```

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

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

![](https://bastianolea.rbind.io/blog/shiny_desconexion/shinydisconnect_1.png)

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:

```r
# 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:

![](https://bastianolea.rbind.io/blog/shiny_desconexion/shinydisconnect_2.png)

Mucho mejor!

**Ver código completo de la aplicación**

```r
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)
```

**Publicaciones sobre shiny:**

- [Plantilla de mapa interactivo de Chile con R, Shiny y MapGL](https://bastianolea.rbind.io/blog/2026-10-14/index.md)
- [Probando visores de mapas interactivos en R con {mapgl}](https://bastianolea.rbind.io/blog/2026-07-29/index.md)
- [Crea un chatbot de inteligencia artificial con R](https://bastianolea.rbind.io/blog/shinychat/index.md)
- [Tutorial: Crea aplicaciones web interactivas en R con Shiny](https://bastianolea.rbind.io/blog/shiny/index.md)
- [Usando tipografías personalizadas en aplicaciones Shiny](https://bastianolea.rbind.io/blog/shiny_tipografias/index.md)
