Buscar en la documentación

Conexión y canales privados

Cómo el navegador se conecta al tiempo real por el gateway, qué canales puede escuchar cada persona y cómo se autoriza cada uno.

Módulo realtime1 min de lecturaVer en GitHub

El tiempo real usa Reverb (WebSocket) detrás del mismo gateway que sirve la app, en /ws: no hay otro puerto ni otro dominio. Todos los canales son privados y sus mensajes no traen datos, solo el id del incidente y el tipo de cambio; el navegador vuelve a pedir a la API lo que necesita, con sus permisos de siempre. Si el tiempo real no está disponible, la app sigue funcionando igual.

CanalQuién lo escucha
incidents.allQuien tiene incidents.view.any
incidents.unassignedQuien tiene incidents.view.unassigned
users.{ULID}Solo esa persona: lo que creó o tiene asignado, su sesión y sus notificaciones
Diagrama3 carriles · 9 pasos · 2 salidas de error
SíNoSíNoEspera 1,5 s trasabrir la app1Pide GET /realtime2¿Sesióncompleta?3Sigue sin tiemporealAcepta el WebSocketpor /ws4Calcula sus canalessegún sus permisos5Pide POST/broadcasting/authuna vez6¿Cada canalestápermitido?7Ese canal quedasin firmaSuscribe con lafirma8Escucha y publicacada aviso en elbus9
Los números coinciden con el paso a paso. En pantallas pequeñas el diagrama se desliza de lado.

Paso a paso

  1. NavegadorEspera 1,5 s tras abrir la app

    Primero carga lo que la pantalla necesita; después se conecta.

  2. NavegadorPide GET /realtime

    La clave pública y la ruta /ws, que cambian por entorno sin reconstruir el front.

  3. API¿Sesión completa?

    El token de un ingreso a medias (falta el MFA) no sirve aquí.

  4. ReverbAcepta el WebSocket por /ws

    Solo desde el origen de la app (REVERB_ALLOWED_ORIGINS), mensajes de hasta 2 KB, 60 por minuto, sin eventos de cliente.

  5. NavegadorCalcula sus canales según sus permisos

    channelsFor: el general si ve todo, el de sin asignar si puede verlos, y siempre el personal.

  6. NavegadorPide POST /broadcasting/auth una vez

    Todas las suscripciones de la pestaña se firman en una sola petición, porque cada petición a PHP cuesta.

  7. API¿Cada canal está permitido?

    Channels::allows, la misma regla de visibilidad del listado. Devuelve una firma por canal permitido y vacío en los demás.

  8. ReverbSuscribe con la firma
  9. NavegadorEscucha y publica cada aviso en el bus

    Si cambian sus permisos, entra a los canales nuevos y sale de los que ya no aplican. Al reconectarse emite reconnected y cada pantalla vuelve a consultar lo visible.

Qué ve la persona

El tiempo real no muestra errores propios: si no se puede conectar o se cae, la app funciona igual, solo que los cambios de otras personas se ven al recargar o al navegar.

Dónde está en el código