# Nuovi tentativi ed errori

> Come Emailit ritenta le richieste webhook non riuscite, quando ti avvisa via email e disattiva un endpoint, e come esaminare e reinviare le richieste non riuscite.

Quando il tuo endpoint non accetta una richiesta webhook, Emailit conserva gli eventi e ritenta l’invio secondo un calendario che dura poco più di tre giorni. Questa pagina riporta il calendario, spiega le email che Emailit invia e quando disattiva un endpoint, e mostra come esaminare e reinviare le richieste non riuscite.

## Cosa conta come errore

Una richiesta non riesce quando il tuo endpoint:

- Restituisce uno stato qualsiasi al di fuori di `200`–`299`, compresi i reindirizzamenti (`3xx`).
- Non risponde entro 30 secondi.
- Non è raggiungibile: errori DNS, connessioni rifiutate, errori TLS o un URL che si risolve in un indirizzo IP privato.

Un errore riguarda l’intero batch: tutti gli eventi della richiesta vengono ritentati insieme.

## Calendario dei nuovi tentativi

Dopo ogni tentativo non riuscito, Emailit attende prima di ritentare:

| Tentativo | Attesa dopo il tentativo precedente | Tempo trascorso dal primo tentativo |
| --- | --- | --- |
| 1 | Inviato entro pochi secondi dall’evento | 0 |
| 2 | 5 minuti | 5 minuti |
| 3 | 30 minuti | 35 minuti |
| 4 | 2 ore | 2 ore e 35 minuti |
| 5 | 5 ore | 7 ore e 35 minuti |
| 6 | 12 ore | 19 ore e 35 minuti |
| 7 | 12 ore | 1 giorno e 7 ore |
| 8 | 12 ore | 1 giorno e 19 ore |
| 9 | 12 ore | 2 giorni e 7 ore |
| 10 | 12 ore | 2 giorni e 19 ore |
| 11 | 12 ore | 3 giorni e 7 ore |

Se il tentativo 11 non riesce, la richiesta viene contrassegnata come **Failed** e non viene più ritentata automaticamente. Puoi comunque [reinviarla](#resend-failed-requests) per 7 giorni.

Ogni tentativo viene firmato di nuovo con un timestamp aggiornato. Gli eventi che arrivano mentre le richieste precedenti sono in attesa di un nuovo tentativo vengono inviati in batch separati, così un evento problematico non blocca quelli più recenti.

## Email di notifica

Emailit invia un’email al proprietario del workspace in due momenti:

| Quando | Email |
| --- | --- |
| Una richiesta non riesce per la terza volta (circa 35 minuti dopo il primo errore) | Il webhook ha problemi di consegna. Inviata una volta per incidente. Ne ricevi un’altra solo dopo una consegna riuscita seguita da nuovi errori, oppure dopo 4 giorni. |
| Il webhook viene disattivato automaticamente | Il webhook è stato disattivato, con l’ultimo codice di stato. |

## Disattivazione automatica

Se un webhook non ha avuto nessuna consegna riuscita per 3 giorni a partire dalla sua richiesta non riuscita più vecchia, Emailit lo disattiva al successivo tentativo non riuscito. In pratica succede intorno all’undicesimo tentativo della prima richiesta non riuscita, o prima se anche i nuovi eventi continuano a non riuscire.

Mentre un webhook è disattivato:

- I nuovi eventi non vengono messi in coda per quel webhook. Vengono comunque registrati nel [flusso di eventi](/it/docs/logs/events/).
- Le richieste che erano in attesa di un nuovo tentativo restano in sospeso e riprendono quando lo riattivi.
- La pagina del webhook mostra lo stato **Disabled**.

Per riattivarlo, seleziona **Enable webhook** nel menu delle azioni del webhook, oppure chiama [Aggiorna un webhook](/it/docs/api-reference/webhooks/update/) con `{"enabled": true}`. Anche **Retry failed** e il nuovo tentativo di una singola richiesta riattivano il webhook.

## La scheda Requests

Apri un webhook in **Email API → Webhooks** per vedere la sua scheda **Requests**, a partire dalle richieste più recenti:

| Colonna | Descrizione |
| --- | --- |
| **Event type** | L’evento contenuto nella richiesta. |
| **Event ID** | L’ID `evt_`, lo stesso valore che il tuo endpoint riceve come `event_id`. |
| **Created** | Quando la richiesta è stata messa in coda. |
| **Attempts** | Quanti tentativi di consegna sono falliti finora. |
| **Status** | **Pending** (non ancora tentata), **Attempting** (non riuscita almeno una volta, verrà ritentata), **Delivered** o **Failed** (nuovi tentativi esauriti). |

Filtra per **Status code**, **Event** o **Created**. Gli eventi di test inviati con **Send test** non compaiono qui.

Per una richiesta **Failed**, seleziona **View** per aprire **Failure reason**: il codice di stato restituito dal tuo endpoint (`0` se non c’è stata una risposta HTTP), quando la richiesta è stata creata e quando non è riuscita, e i primi 2000 caratteri del corpo della risposta.

## Reinvia le richieste non riuscite

Puoi reinviare le richieste contrassegnate come **Failed** il cui ultimo errore risale agli ultimi 7 giorni. Le richieste reinviate tornano a **Pending** e iniziano un nuovo ciclo di tentativi dal tentativo 1. La consegna non è immediata: il ciclo di consegna successivo le prende in carico entro pochi secondi.

### Ritenta una richiesta

Nella scheda **Requests**, seleziona **Retry** su una riga non riuscita. Il pulsante compare solo sulle richieste non riuscite negli ultimi 7 giorni.

L’endpoint API è [Ritenta una richiesta](/it/docs/api-reference/webhooks/retry-request/), `POST /v2/webhooks/{id}/requests/{request_id}/retry`, che restituisce `{"retried": 1, "id": "whr_…"}`. Accetta solo richieste contrassegnate come **Failed** e restituisce `400` per le altre. Gli ID delle richieste (`whr_…`) non sono elencati da nessun endpoint pubblico, quindi per automatizzare con l’API usa invece **Retry failed**.

### Ritenta le richieste non riuscite

Apri il menu delle azioni del webhook e seleziona **Retry failed**. Ogni richiesta non riuscita negli ultimi 7 giorni viene rimessa in coda, e il pannello mostra «Queued 3 failed request(s) for retry» con il numero effettivo, oppure «No failed requests in the last 7 days».

Con l’API, chiama [Ritenta le richieste non riuscite](/it/docs/api-reference/webhooks/retry-failed/):

```bash
curl -X POST https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e/retry-failed \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

```json
{ "retried": 42 }
```

## Riprendi dopo un’interruzione

1. **Correggi l’endpoint.** Usa **View** su una richiesta non riuscita per vedere cosa ha restituito il tuo endpoint.

2. **Conferma che funziona.** Usa **Send test** dal menu delle azioni, oppure [Invia un evento di test](/it/docs/api-reference/webhooks/test/) con l’API, e controlla di ricevere un `2xx`.

3. **Riattiva il webhook** se Emailit lo ha disattivato.

4. **Reinvia le richieste non riuscite.** Seleziona **Retry failed** per rimettere in coda ogni richiesta non riuscita negli ultimi 7 giorni. Le richieste ancora contrassegnate come **Attempting** vengono ritentate secondo il loro calendario.

5. **Colma le lacune.** Gli eventi che si sono verificati mentre il webhook era disattivato non sono mai stati messi in coda, e gli errori più vecchi di 7 giorni non si possono reinviare. Leggili con l’[API degli eventi](/it/docs/logs/events/#reconcile-missed-webhook-events) per il periodo interessato ed elabora quelli che ti mancano.

Poiché i nuovi tentativi reinviano interi batch, rendi idempotente il tuo handler: salva ogni `event_id` e salta quelli che hai già elaborato. Vedi [Richieste webhook](/it/docs/webhooks/webhook-requests/#duplicates).

## Conservazione

Le richieste webhook seguono il periodo di conservazione dei **Logs**, quindi nel tempo le righe più vecchie spariscono dalla scheda **Requests**.

| | Pay as you go | Pro | Business | Custom |
| --- | --- | --- | --- | --- |
| Log delle richieste conservati | 7 giorni | 30 giorni | 30 giorni | Flessibile |

## Vedi anche

  - [Richieste webhook](/it/docs/webhooks/webhook-requests/)
  - [Eventi](/it/docs/logs/events/)

---
Fonte: https://emailit.com/it/docs/webhooks/retries-and-failures/
