## Arquitectura del controlador de webhooks 
Siga estas directrices:
1. Acepte la solicitud `POST` con el cuerpo y los encabezados tal cual, **sin
modificaciones**.
2. [Verifique la firma del webhook](/es/webhooks/section/webhook-listener/generation-of-signature) y devuelva el código de estado correspondiente:
  * `4xx`: si las firmas no coinciden;
  * `2xx`: en casos de éxito. Recomendamos devolver `204 No Content` **antes** de
ejecutar la lógica de negocio principal. También es aceptable `200 OK`.
3. Transmita la carga útil a una tarea asíncrona o a una cola para su posterior
procesamiento.
4. Implemente la
[idempotencia](https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning). Asegúrese de que su sistema admite [recibir el mismo webhook más de una
vez](/es/webhooks/section/webhook-listener/sending-responses-to-webhook).

**Ejemplo de flujo:**

```http
HTTP POST /webhooks/xsolla
  read raw_body, headers
  if !verify_signature(raw_body, headers['authorization']):
     return 400 {"error":{"code":"INVALID_SIGNATURE","message":"Invalid signature"}}
  enqueue(raw_body)
  return 204  # or 200
```
