# Solución de problemas

Primero, la visión general desde el directorio de la instalación:

```
./draften status      # versión, estado de los dos colores de la web y de los workers, HTTPS, volcados de la base de datos
```

Después, con más detalle:

```
docker compose ps                        # ¿están en marcha los servicios, está sana la base de datos?
docker compose logs --tail 50 worker     # las últimas entradas del worker
docker compose run --rm worker node diag.mjs mailbox@company.com
```

El último hace lo mismo que **Probar la conexión** en la interfaz: toma el
acceso guardado para el buzón, obtiene un token, muestra sus permisos (nunca el
token en sí) y lee la bandeja de entrada.

## Errores frecuentes

| Síntoma | Causa | Qué hacer |
|---|---|---|
| `set DB_PASSWORD in .env` al iniciar | faltan las contraseñas de la base de datos | completar `.env` |
| `mailbox … has no access yet` | el buzón no tiene registro ni cuenta conectada | la página del buzón › Acceso al correo |
| `Graph … 401 … invalid_client` | client secret incorrecto o caducado | un secreto nuevo en el registro y después la prueba de la conexión |
| `Graph … 403 … AppOnly AccessPolicy` | la política de acceso de la aplicación aún no se ha aplicado, o el buzón no está en el grupo | esperar (incluso horas) y repetir la prueba; añadir el buzón al grupo |
| `Graph … 403 … ErrorAccessDenied` | falta el consentimiento del administrador | en Entra, Grant admin consent en el registro |
| `Category not added … MailboxSettings` | falta el permiso `MailboxSettings.ReadWrite`; la etiqueta funciona, solo que sin color | añadir el permiso y el consentimiento |
| `No active assistant in the database` | el asistente está desactivado o no se cargaron los datos iniciales | activar el asistente; revisar los registros del arranque |
| el asistente se omite («no prompts yet») | el asistente no tiene instrucciones escritas | terminar la configuración guiada o escribir las instrucciones a mano |
| `Draft without signature` / `links outside the allowed domains` | el borrador no superó un control | mirar el mensaje: puede ser un intento de suplantación |
| `Limit reached` | el límite diario o el límite por remitente | aumentarlo solo si la avalancha de correo es legítima |
| `Model refused to answer` | el filtro de seguridad del modelo | procesar el mensaje a mano |
| `Model exhausted max_iterations` | el modelo entró en un bucle con sus herramientas | se reintenta dos veces; si se repite, ajustar la instrucción Tarea |
| `ECONNREFUSED … 3306` | la base de datos no está en marcha o aún no ha arrancado | `docker compose ps`, `docker compose logs db` |
| la barra «La licencia caducó» o «La instalación no tiene licencia», los asistentes no escriben nada | falta la licencia o ha caducado | subir una licencia válida: vea [La licencia](/es/admin/licence) |
| una actualización terminó con un error | la versión nueva no llegó a estar sana; la anterior sigue atendiendo | el error en Historial de solicitudes o en la salida de `./draften update`; `./draften status` |
| «La última copia diaria ha fallado» en la tarjeta Copias de seguridad de la base de datos | el volcado de la base de datos falló (el mensaje está en la tarjeta); se vuelve a intentar una hora después | ejecutar `./draften backup` y leer el error; comprobar el espacio libre en disco (`df -h`) y `./draften status` |

## Cuando los registros no lo muestran

- La interfaz: en la Configuración del asistente, **Actividad** (revisiones del
  correo, solicitudes, eventos), y la página **Funcionamiento** (workers, cola,
  errores de las últimas 24 horas).
- Tras tres intentos fallidos, un mensaje recibe el estado **fallido**; el
  último error está en su detalle.

## Una pasada única a mano

```
docker compose run --rm worker node worker.mjs --dry-run
```

Recorre una vez cada asistente activo y fuerza el modo de prueba: no se escribe
nada en el correo. Es útil para comprobar que todo funciona.

## Cuando necesite nuestra ayuda

```
./draften diagnose
```

escribe un archivo `diagnose-<time>.tar.gz` con el estado de la instalación,
las versiones, la configuración sin secretos y el final de los registros.
Envíenoslo.

!> Antes de enviar el archivo, mire su contenido: los registros pueden contener
direcciones y asuntos del correo procesado. Nada sale del servidor por sí solo.
