Sign inGet Started

Eventi del ciclo di vita dei messaggi WhatsApp

Bird registra eventi per i messaggi WhatsApp in entrata e in uscita. Una cronologia in uscita mostra cosa è successo dopo che un invio ha restituito 202: accettazione, passaggio a WhatsApp, consegna, lettura o errore. Una cronologia in entrata registra quando Bird ha ricevuto il messaggio.
Questa pagina descrive come leggere la cronologia tramite la API. Per fare in modo che Bird invii ogni evento al tuo endpoint nel momento in cui si verifica, consulta Webhook del ciclo di vita dei messaggi. Le reazioni hanno una propria cronologia, descritta in Eventi di reazione.

Eventi del ciclo di vita

Gli eventi compaiono in ordine cronologico. Un messaggio in uscita può fermarsi a whatsapp.failed o whatsapp.rejected, e il suo evento whatsapp.read compare solo se il destinatario apre il messaggio. Una cronologia in entrata inizia con whatsapp.received e può registrare whatsapp.read dopo che il tuo spazio di lavoro segna il messaggio come letto.
EventoSignificato
whatsapp.acceptedBird ha accettato la richiesta di invio. È il risultato riportato dalla 202.
whatsapp.sentBird ha passato il messaggio alla rete WhatsApp.
whatsapp.deliveredWhatsApp ha confermato la consegna al dispositivo del destinatario.
whatsapp.readIl destinatario ha aperto il messaggio.
whatsapp.failedIl messaggio non è stato consegnato. error.code indica cosa lo ha impedito.
whatsapp.rejectedBird ha rifiutato il messaggio prima di inviarlo. Non è stato addebitato.
whatsapp.receivedBird ha ricevuto un messaggio in entrata da un contatto.
I callback delivered o read applicabili possono attivare la quota di prezzo di Meta. I payload degli eventi WhatsApp non comportano costi. Rileggi il messaggio con GET /v1/whatsapp/messages/{message_id} per vedere quanto è costato. Consulta Costi e fatturazione.
Segnare un messaggio in entrata come letto registra whatsapp.read nella sua cronologia, ma non emette un webhook di conferma lettura. Il messaggio in entrata mantiene il suo stato received e registra read_at dopo che WhatsApp accetta la conferma.
whatsapp.read non modifica il status del messaggio. Un messaggio consegnato resta delivered; il messaggio registra anche la lettura in read_at.
whatsapp.delivered può essere saltato del tutto. Quando il destinatario ha già la chat aperta sul proprio dispositivo, Meta segnala la lettura senza mai segnalare la consegna, quindi la cronologia risulta whatsapp.acceptedwhatsapp.sentwhatsapp.read senza whatsapp.delivered nel mezzo. Tratta read come prova di consegna: un consumer che attende delivered prima di considerare il messaggio arrivato si bloccherà proprio sui destinatari che lo hanno visto più velocemente, e uno che calcola il tasso di consegna solo da delivered lo sottostima. Il status del messaggio resta sent in questo caso, perché solo una ricevuta di consegna lo fa avanzare.
Un callback di sola lettura può comunque attivare la tariffa Meta applicabile. Bird usa un'unica identità di tariffa per i percorsi di consegna e lettura; l'assenza dell'evento di consegna non implica una componente Meta gratuita. Consulta Costi e fatturazione.
L'elenco dei tipi di evento è aperto: nuovi tipi possono essere aggiunti nel tempo, quindi tratta un valore non riconosciuto come un evento futuro anziché un errore.

Eventi di errore

whatsapp.failed e whatsapp.rejected sono terminali. Un rifiuto significa che Bird ha bloccato il messaggio prima di inviarlo a WhatsApp, quindi non è stato addebitato. Le cause includono un destinatario soppresso o che ha negato il consenso, saldo del wallet insufficiente o una destinazione senza un prezzo configurato. Un errore significa che il messaggio non è stato consegnato, e error.code indica chi lo ha deciso. La maggior parte dei codici riporta il verdetto di WhatsApp, mappato dal codice che ha segnalato. internal_error è l'eccezione: registra la mancanza di credenziali del mittente utilizzabili o i tentativi di elaborazione esauriti. Un tentativo di trasporto incerto non dimostra che Meta non abbia mai ricevuto la richiesta. meta_error_code contiene il codice di WhatsApp quando disponibile, e un errore internal_error non ne ha per definizione.
Entrambi gli eventi contengono un oggetto error con un Bird code stabile, un description leggibile, un meta_error_code opzionale e occurred_at. L'oggetto compare nei record API e nei payload dei webhook solo per questi tipi di evento.

Leggere gli eventi dalla API

GET /v1/whatsapp/messages/{message_id}/events restituisce la cronologia in ordine cronologico. La lista limitata non è paginata. Leggere gli eventi richiede una chiave API con whatsapp:read:
const { data } = await bird.whatsapp.listEvents("wa_abc123");
for (const event of data) console.log(event.type, event.occurred_at);
Un messaggio accettato, inviato, consegnato e letto restituisce quattro eventi:
Esempio di codice
{
  "data": [
    {
      "id": "ev_01ky7q6a1fejfbvs0myn41hj41",
      "occurred_at": "2026-07-23T14:48:34.71Z",
      "type": "whatsapp.accepted"
    },
    {
      "id": "ev_01ky7q6a2denvtd6jg1vqwmg13",
      "occurred_at": "2026-07-23T14:48:35.671Z",
      "type": "whatsapp.sent"
    },
    {
      "id": "ev_01ky7q6a2zff9r2qm74mmg1g6z",
      "occurred_at": "2026-07-23T14:48:36.642Z",
      "type": "whatsapp.delivered"
    },
    {
      "id": "ev_01ky7q6c21frssf0vj8h50qysw",
      "occurred_at": "2026-07-23T14:48:38.65Z",
      "type": "whatsapp.read"
    }
  ]
}
Passa type per restituire un singolo tipo di evento pubblico, come ?type=whatsapp.failed o ?type=whatsapp.read. Omettilo per la cronologia completa.
La stessa cronologia è ciò che la pagina Log WhatsApp visualizza quando apri un messaggio.
Il pannello di dettaglio del messaggio WhatsApp nella dashboard Bird, aperto per un messaggio bird_delivery_update consegnato: la scheda Eventi mostra la cronologia del ciclo di vita per messaggio con Accepted, Sent, Delivered e Read, ciascuno con il tempo trascorso e il timestamp, sopra la lista messaggi in sfondo

Passaggi successivi