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

# Pasar a producción

> Lo que conviene tener resuelto antes del primer cliente real.

## Reintentos sin cobros dobles

Manda una `Idempotency-Key` única en cada `POST .../chat`:

```bash theme={null}
-H "Idempotency-Key: $(uuidgen)"
```

Si la petición se corta por un timeout y reintentas con **la misma clave**,
devolvemos la respuesta original sin volver a cobrar. La respuesta repetida
llega con la cabecera `Idempotent-Replay: true`.

Genera un UUID por intención del cliente, no por intento de red: si cambias la
clave en el reintento, será una llamada nueva y se cobrará.

## Agrupa los mensajes

Espera 1-2 segundos antes de llamar y junta lo que el cliente haya escrito en
ese hueco. Mejora la respuesta y te ahorra créditos.

## Vigila los créditos

Comprueba `GET /v1/yo` a diario y avisa a tu equipo por debajo del 10%. Un
`402` es un cliente sin respuesta.

## Lista antes de lanzar

<Steps>
  <Step title="La clave vive en el servidor">
    En variables de entorno, nunca en el repositorio ni en el cliente.
  </Step>

  <Step title="Integrado con bk_test_">
    Y probado el camino de error, no solo el feliz.
  </Step>

  <Step title="Idempotency-Key en cada chat">
    Es lo que te protege de cobrar dos veces.
  </Step>

  <Step title="Reintentos solo en 5xx">
    Con espera creciente.
  </Step>

  <Step title="Aviso de créditos bajos">
    Antes de llegar al 402, no después.
  </Step>

  <Step title="Los negocios están activos">
    Un negocio en `pendiente` devuelve 409.
  </Step>
</Steps>

## Timeouts

El agente puede tardar unos segundos: consulta el calendario y a veces varios
modelos. Pon el timeout de tu cliente HTTP en **60 segundos**. Por debajo de
30 vas a cortar respuestas que iban a llegar bien.

## Qué no hacer

<Warning>
  * **No llames desde el navegador.** Expone tu clave.
  * **No reintentes los 4xx.** Fallarán igual y gastas tiempo.
  * **No dependas del texto de `mensaje`.** Puede cambiar; usa `codigo`.
  * **No guardes conversaciones que no necesites.** Son datos personales de
    los clientes de tu cliente, con lo que eso implica en RGPD.
</Warning>
