# Webhooki statusu wiadomości WhatsApp

Każda zmiana [statusu](/docs/guides/whatsapp/events/message-status) wiadomości wychodzącej może być przekazywana do Twojego endpointu w momencie wystąpienia. Każdy ładunek korzysta z [koperty zdarzenia WhatsApp](/docs/guides/whatsapp/webhooks#the-event-envelope) i zawiera [pola wspólne dla każdego zdarzenia wiadomości](/docs/guides/whatsapp/webhooks#fields-every-message-event-carries).

## Zdarzenia dostarczania

`whatsapp.accepted`, `whatsapp.sent`, `whatsapp.delivered` i `whatsapp.read` zawierają wyłącznie pola wspólne dla każdego zdarzenia wiadomości. [Zdarzenia cyklu życia](/docs/guides/whatsapp/events/message-status#lifecycle-events) opisują znaczenie każdego z nich oraz kiedy `whatsapp.delivered` jest pomijany.

```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` i `whatsapp.rejected` zawierają dodatkowo obiekt `error` ze stabilnym Bird `code`, czytelnym dla człowieka `description`, opcjonalnym `meta_error_code` oraz `occurred_at`. Zobacz [zdarzenia niepowodzenia](/docs/guides/whatsapp/events/message-status#failure-events), aby poznać różnicę między nimi. W przypadku zgłoszonego niepowodzenia WhatsApp, `description` jest własnym wyjaśnieniem WhatsApp. Wiadomość serwisowa, której okno obsługi klienta zamknęło się między akceptacją a wysyłką, kończy się niepowodzeniem w następujący sposób:

```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"
}
```

[Oznaczenie wiadomości przychodzącej jako przeczytanej](/docs/guides/whatsapp/mark-message-as-read) zapisuje `whatsapp.read` na osi czasu wiadomości, ale nie emituje webhooka.

## Następne kroki

- [Webhooki wiadomości przychodzących](/docs/guides/whatsapp/webhooks/messages): ładunek `whatsapp.received` dla wiadomości wysłanej przez kontakt
- [Webhooki reakcji](/docs/guides/whatsapp/webhooks/reactions): reakcje kontaktu przychodzą osobno
- [Zdarzenia statusu wiadomości](/docs/guides/whatsapp/events/message-status): odczytaj oś czasu wiadomości za pomocą 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)
