# Webhooks de ciclo de vida de mensagens WhatsApp

Cada etapa do [ciclo de vida](/docs/guides/whatsapp/events/lifecycle) de uma mensagem pode ser enviada ao seu endpoint à medida que acontece. Todo payload usa o [envelope de evento WhatsApp](/docs/guides/whatsapp/webhooks#the-event-envelope) e inclui os [campos presentes em todo evento de mensagem](/docs/guides/whatsapp/webhooks#fields-every-message-event-carries).

## Eventos de entrega

`whatsapp.accepted`, `whatsapp.sent`, `whatsapp.delivered` e `whatsapp.read` incluem apenas os campos presentes em todo evento de mensagem. [Eventos de ciclo de vida](/docs/guides/whatsapp/events/lifecycle#lifecycle-events) explica o significado de cada um e quando `whatsapp.delivered` é omitido.

```json
{
  "data": {
    "direction": "outbound",
    "from": { "phone_number": "+13124495569" },
    "metadata": { "session_id": "sess_4821" },
    "tags": [{ "name": "flow", "value": "login-otp" }],
    "to": { "phone_number": "+14155550100" },
    "whatsapp_id": "wam_01ky7qbvswf3fvyaw3az90391c",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b"
  },
  "timestamp": "2026-07-23T14:51:39.913Z",
  "type": "whatsapp.delivered"
}
```

`whatsapp.failed` e `whatsapp.rejected` também incluem um objeto `error` com um Bird `code` estável, um `description` legível, um `meta_error_code` opcional e `occurred_at`. Consulte [eventos de falha](/docs/guides/whatsapp/events/lifecycle#failure-events) para saber o que diferencia os dois. Em uma falha relatada por WhatsApp, `description` é a explicação do próprio WhatsApp. Uma mensagem de serviço cuja janela de atendimento ao cliente fechou entre a aceitação e o envio falha assim:

```json
{
  "data": {
    "direction": "outbound",
    "error": {
      "code": "service_window_expired",
      "description": "Message failed to send because more than 24 hours have passed since the customer last replied to this number.",
      "meta_error_code": "131047",
      "occurred_at": "2026-07-23T14:51:40.201Z"
    },
    "from": { "phone_number": "+13124495569" },
    "metadata": null,
    "tags": null,
    "to": { "phone_number": "+14155550100" },
    "whatsapp_id": "wam_01ky7qbvswf3fvyaw3az90391c",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b"
  },
  "timestamp": "2026-07-23T14:51:40.201Z",
  "type": "whatsapp.failed"
}
```

[Marcar uma mensagem recebida como lida](/docs/guides/whatsapp/mark-message-as-read) registra `whatsapp.read` na linha do tempo da mensagem, mas não emite um webhook.

## Mensagens recebidas

`whatsapp.received` inclui o conteúdo da mensagem além dos campos presentes em todo evento de mensagem, permitindo que um endpoint atue sobre uma mensagem recebida sem precisar consultá-la novamente. Um toque em uma mensagem interativa chega como `interactive_reply`, e `in_reply_to_message_id` identifica a mensagem que ele responde:

```json
{
  "data": {
    "direction": "inbound",
    "from": {
      "display_name": "Alex Rivera",
      "phone_number": "+14155550100",
      "username": "alexr"
    },
    "in_reply_to_message_id": "wam_01ky7qbvswf3fvyaw3az90391c",
    "interactive_reply": {
      "list": {
        "description": "Next day to 2 days",
        "slug": "priority_express",
        "text": "Priority Mail Express"
      },
      "type": "list"
    },
    "metadata": null,
    "tags": null,
    "to": { "phone_number": "+13124495569" },
    "whatsapp_id": "wam_01ky8b3xq4gd7pmzn2ka51f7te",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b"
  },
  "timestamp": "2026-07-23T14:52:04.118Z",
  "type": "whatsapp.received"
}
```

Os outros ramos de conteúdo seguem o mesmo formato de um-destes: `text`, `image`, `video`, `audio`, `sticker`, `document`, `location`, `contact_cards` e `unsupported` para um tipo que o API não modela. [`GET /v1/whatsapp/messages/{message_id}`](/docs/api/reference/get-whatsapp-message) documenta cada um.

## Próximos passos

- [Webhooks de reação](/docs/guides/whatsapp/webhooks/reactions): as reações de um contato chegam separadamente
- [Receber mensagens WhatsApp](/docs/guides/whatsapp/receiving-whatsapp): todos os ramos de conteúdo e como obter mídia recebida
- [Eventos de ciclo de vida](/docs/guides/whatsapp/events/lifecycle): consulte a linha do tempo de uma mensagem pela API

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/whatsapp-api) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
