> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bbrands.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Operaciones

> Variables de entorno, el health probe y la solución de problemas de la capa de tiempo real de Pusher.

## Variables de entorno (servidor)

Las cuatro keys son necesarias para habilitar el publisher; la quinta es opcional.

| Variable                     | Requerida | Propósito                                 |
| ---------------------------- | --------- | ----------------------------------------- |
| `INTEGRATION_PUSHER_APP_ID`  | Sí        | Id de la aplicación de Pusher.            |
| `INTEGRATION_PUSHER_KEY`     | Sí        | Key pública (también enviada al cliente). |
| `INTEGRATION_PUSHER_SECRET`  | Sí        | Secreto del servidor.                     |
| `INTEGRATION_PUSHER_CLUSTER` | Sí        | Cluster (p. ej. `us2`).                   |
| `INTEGRATION_PUSHER_USE_TLS` | No        | Por defecto `true`.                       |

<Note>
  Cuando falta cualquiera de las cuatro keys requeridas, `getPusherClient()` devuelve
  `null`, el publisher degrada a modo log-only y el health probe reporta
  el componente como caído.
</Note>

## Health probe

El servicio de salud de integraciones emite un `GET /channels` autenticado y barato
contra la API HTTP de Pusher (`checkPusher()`), combinado con tráfico de publish
real registrado vía `recordIntegrationOutcome("pusher", ...)`. Better Stack
rastrea el componente como `INT-06` en la página de estado.

## Solución de problemas

<AccordionGroup>
  <Accordion title="El cliente muestra status: disabled">
    `NEXT_PUBLIC_PUSHER_KEY` está vacía. Configúrala para el entorno (valor público)
    y vuelve a desplegar la app para que la variable de tiempo de build quede horneada.
  </Accordion>

  <Accordion title="La suscripción a un canal privado falla con AuthError">
    El endpoint de auth está mal configurado o el llamante carece de `pusher:auth`. Verifica
    que la app haga proxy a `POST /api/v3/realtime/pusher/auth` y que el canal
    coincida con `private-(contract|account)-{uuid}`.
  </Accordion>

  <Accordion title="Los eventos se publican pero nunca se reciben">
    Confirma que el cluster del cliente coincida con el cluster del servidor
    (`INTEGRATION_PUSHER_CLUSTER` vs `NEXT_PUBLIC_PUSHER_CLUSTER`) y que ambos
    lados usen la misma app de Pusher.
  </Accordion>

  <Accordion title="La salud muestra Pusher caído pero el publishing funciona">
    Un `4xx` nunca cambia el veredicto, pero una capacidad `GET /channels` ausente o
    un error de red sí lo hará. Verifica las credenciales del servidor y la red saliente.
  </Accordion>
</AccordionGroup>

## Depuración del lado del cliente

`usePusherChannel` imprime logs de ciclo de vida verbosos cuando ya sea
`localStorage.setItem("bbl:pusher:debug", "1")` se establece desde la consola del navegador
o se añade `?pusher_debug=1` a la URL.
