> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/sdks/sdk-web/componentes/selphi-biometria-facial/eventos/exceptioncaptured.md).

# exceptionCaptured

## Detalles

Se emite ante errores o situaciones inesperadas durante la captura.

**Evento:** `exceptionCaptured`

**Tipo:** `FacephiSelphiWidgetCustomEvent<ExceptionCapturedEvent>` | `CustomEvent<ExceptionCapturedEvent>`

### Sintaxis

```typescript
selphi.addEventListener('exceptionCaptured', onExceptionCaptured);
```

### Objeto recibido

El payload útil es de tipo `SelphiExceptionCapturedDetail` y está en `event.detail.detail`:

* `eventType` (`string`): Tipo de evento emitido.
* `exceptionType` (`string`): Tipo de excepción (`ExceptionType`).
* `message` (`string`): Descripción breve del error.
* `code` (`string`): Código SPI asociado a `exceptionType`.

**Valores `exceptionType` — terminales**:

| Valor                        | Descripción                                             |
| ---------------------------- | ------------------------------------------------------- |
| `AndroidWebViewBehaviour`    | El widget no puede ejecutarse en el WebView de Android. |
| `BrowserApiNotCompatible`    | El navegador no es compatible.                          |
| `CameraHardwareError`        | Error al acceder a la cámara.                           |
| `PermissionsDenied`          | Permisos requeridos no concedidos.                      |
| `CameraPermissionDenied`     | Permiso de cámara denegado.                             |
| `MicrophonePermissionDenied` | Permiso de micrófono denegado.                          |
| `SettingsError`              | Propiedad de configuración con formato incorrecto.      |
| `UnknownInternalError`       | Error interno desconocido.                              |
| `SpoofingDetected`           | Intento de suplantación detectado (antispoof).          |
| `ActiveLivenessError`        | La prueba de vida activa ha fallado.                    |

**Valores `exceptionType` — extracción**:

| Valor                         | Descripción                                       |
| ----------------------------- | ------------------------------------------------- |
| `ErrorTimeout`                | Se ha superado el límite de tiempo de extracción. |
| `FaceNotFound`                | No se ha encontrado el rostro.                    |
| `EyesNotFound`                | No se han encontrado los ojos.                    |
| `AngleExceeded`               | El rostro no está recto.                          |
| `DarkLightError`              | Luz insuficiente.                                 |
| `TooManyFaces`                | Más de un rostro detectado.                       |
| `OccludedEyes`                | Ojos ocluidos.                                    |
| `OccludedMouth`               | Boca ocluida.                                     |
| `ExternalCameraChangeTimeout` | Timeout al cambiar cámara externa.                |

**Valores `code`**:

| `exceptionType`              | Código    |
| ---------------------------- | --------- |
| `AndroidWebViewBehaviour`    | `SPI_227` |
| `UnknownInternalError`       | `SPI_235` |
| `CameraHardwareError`        | `SPI_204` |
| `PermissionsDenied`          | `SPI_242` |
| `CameraPermissionDenied`     | `SPI_201` |
| `MicrophonePermissionDenied` | `SPI_218` |
| `SettingsError`              | `SPI_219` |
| `BrowserApiNotCompatible`    | `SPI_220` |
| `SpoofingDetected`           | `SPI_221` |
| `ActiveLivenessError`        | `SPI_205` |
| `ErrorTimeout`               | `SPI_001` |
| `FaceNotFound`               | `SPI_222` |
| `EyesNotFound`               | `SPI_223` |
| `OccludedEyes`               | `SPI_237` |
| `OccludedMouth`              | `SPI_238` |
| `DarkLightError`             | `SPI_224` |
| `AngleExceeded`              | `SPI_225` |
| `TooManyFaces`               | `SPI_226` |

## Descripción

Permite filtrar y reaccionar a los distintos tipos de error durante la captura.

### Consideraciones

El payload útil está en `event.detail.detail` (ver [formato de eventos](/sdks/sdk-web/componentes/selphi-biometria-facial/eventos.md#formato-de-los-eventos)). Las excepciones terminales muestran una vista de error y cierran el widget tras [errorTimer](/sdks/sdk-web/componentes/selphi-biometria-facial/propiedades/errortimer.md).

Los códigos SPI están alineados con la tabla de [resultados](/sdks/sdk-web/componentes/selphi-biometria-facial/resultados.md#codigos-de-error). Para `ExternalCameraChangeTimeout`, consulta el valor emitido en `code`.

***

## Ejemplo

```jsx
<facephi-selphi-widget
    onExceptionCaptured={(event) => {
      const { exceptionType, message } = event.detail.detail;
      console.error(exceptionType, message);
    }}
/>
```

```typescript
import { type SelphiExceptionCapturedDetail } from '@facephi/sdk-web-wc';

selphi.addEventListener('exceptionCaptured', (event) => {
  const detail: SelphiExceptionCapturedDetail = event.detail.detail;
});
```
