# Poner a una persona del equipo disponible o ausente desde tu sistema

Tu sistema cambia si una persona de tu equipo recibe casos nuevos. Sirve cuando los turnos viven en otro lado: al salir de turno la pones `ausente` y el reparto deja de asignarle casos, sin que ella apriete su botón.

Base de la API de Lelemon: `https://api.lelemon.cl`

La idea de fondo: **es el mismo estado que cambia la persona en su pantalla.** El reparto lo lee de ahí, así que se entera igual que si ella lo hubiera cambiado.

## Antes de empezar

Dos alcances, separados a propósito. Se emiten en Integraciones API del dashboard.

| Alcance | Qué deja hacer |
|---|---|
| `miembros:read` | Ver el estado de una persona. |
| `miembros:write` | Cambiarlo. |

A la persona se la identifica por su **email**. Tiene que ser un miembro activo de tu organización.

## Ver el estado

```
GET https://api.lelemon.cl/v1/external/miembros/disponibilidad?email=ana@empresa.cl
Authorization: Bearer <tu credencial>
```

```json
{
  "email": "ana@empresa.cl",
  "estado": "disponible",
  "disponibleParaRepartir": false,
  "cambiadoEl": "2026-10-21T21:30:00.000Z",
  "extendidoHasta": null
}
```

| Campo | Qué es |
|---|---|
| `estado` | `disponible` o `ausente`: lo que quedó marcado, por la persona o por tu sistema. |
| `disponibleParaRepartir` | Si el reparto le asignaría un caso nuevo ahora mismo. Considera el horario de atención de tu organización. |
| `cambiadoEl` | La última vez que se cambió el estado. `null` si nunca. |
| `extendidoHasta` | Hasta cuándo pidió la persona seguir recibiendo casos pasado el horario. `null` si no hay. |

## Cambiarlo

```
PUT https://api.lelemon.cl/v1/external/miembros/disponibilidad
Content-Type: application/json

{ "email": "ana@empresa.cl", "estado": "ausente" }
```

`estado` es `disponible` o `ausente`. La respuesta tiene la misma forma que el `GET`, con cómo quedó la persona.

- `ausente` saca a la persona del reparto y le quita la extensión de horario que haya pedido.
- Si la persona ya estaba en ese estado, no se escribe nada y su extensión de horario se conserva. Repetir el pedido es seguro: puedes correrlo en cada ciclo de tu flujo.
- No cambia el rol de la persona, ni si recibe casos en general, ni los embudos que ve. Sólo el estado.

## Poner `disponible` fuera de horario

Si tu organización tiene horario de atención, el sistema marca como ausente, a la hora de repartir, a quien está `disponible` fuera de ese horario. Esa regla no se guarda en el estado: se evalúa cada vez que llega un caso.

Por eso, si tu flujo pone `disponible` a alguien fuera de horario:

- `estado` queda en `disponible`.
- `disponibleParaRepartir` queda en `false`, y el reparto la trata como ausente hasta que abra el horario.
- Sólo la propia persona puede pasar por encima del horario, pidiendo seguir un rato más desde su pantalla. Entonces `extendidoHasta` trae la hora y `disponibleParaRepartir` vale `true` hasta ahí.

Tu organización sin horario de atención configurado no tiene auto-away: `disponible` basta.

## Errores

| Código | Qué pasó |
|---|---|
| 400 | Falta el `email` o no es un email, o `estado` no es `disponible` ni `ausente`. |
| 401 | Falta la credencial o no sirve. |
| 403 | A la credencial le falta `miembros:read` (ver) o `miembros:write` (cambiar). |
| 404 | Ese email no es un miembro activo de tu organización. Es la misma respuesta si el email existe en otra organización. |
| 429 | Pasaste un techo por minuto, compartido por toda la API externa. Espera y reintenta. |

## Lo que esta ruta no hace

- No crea, invita ni saca miembros.
- No cambia el rol, ni si la persona recibe casos, ni los embudos que ve.
- No entrega el nombre ni los casos de la persona.
