Sign inGet Started

Event status pesan WhatsApp

Bird mencatat event untuk pesan WhatsApp masuk dan keluar. Lini masa keluar menunjukkan apa yang terjadi setelah pengiriman mengembalikan 202: penerimaan, penyerahan ke WhatsApp, pengiriman, pembacaan, atau kegagalan. Lini masa masuk mencatat kapan Bird menerima pesan.
Halaman ini membahas cara membaca timeline tersebut melalui API. Agar Bird mengirim setiap event ke endpoint Anda saat terjadi, lihat webhook status pesan. Reaksi memiliki riwayat tersendiri, yang dibahas di Event reaksi.

Event siklus hidup

Event muncul dalam urutan kronologis. Pesan keluar dapat berhenti di whatsapp.failed atau whatsapp.rejected, dan event whatsapp.read muncul hanya jika penerima membuka pesan. Lini masa masuk dimulai dengan whatsapp.received dan dapat mencatat whatsapp.read setelah workspace Anda menandai pesan sebagai dibaca.
EventArti
whatsapp.acceptedBird menerima permintaan kirim. Ini yang dilaporkan 202.
whatsapp.sentBird menyerahkan pesan ke jaringan WhatsApp.
whatsapp.deliveredWhatsApp mengonfirmasi pengiriman ke perangkat penerima.
whatsapp.readPenerima membuka pesan.
whatsapp.failedPesan tidak terkirim. error.code menjelaskan penyebabnya.
whatsapp.rejectedBird menolak pesan sebelum mengirimnya. Pesan tidak dikenai biaya.
whatsapp.receivedBird menerima pesan masuk dari kontak.
Callback delivered atau read yang berlaku dapat memicu bagian biaya Meta. Payload event WhatsApp tidak membawa informasi biaya. Baca kembali pesan dengan GET /v1/whatsapp/messages/{message_id} untuk melihat biayanya. Lihat Biaya dan penagihan.
Menandai pesan masuk sebagai dibaca mencatat whatsapp.read di lini masanya tetapi tidak mengirimkan webhook konfirmasi baca. Pesan masuk mempertahankan status received dan mencatat read_at setelah WhatsApp menerima konfirmasi tersebut.
whatsapp.read tidak mengubah status pesan. Pesan yang terkirim tetap delivered; pesan juga mencatat pembacaan di read_at.
whatsapp.delivered dapat dilewati sepenuhnya. Ketika penerima sudah membuka chat di perangkatnya, Meta melaporkan pembacaan tanpa pernah melaporkan pengiriman, sehingga lini masa terbaca whatsapp.accepted → whatsapp.sent → whatsapp.read tanpa whatsapp.delivered di antaranya. Perlakukan read sebagai bukti pengiriman: consumer yang menunggu delivered sebelum menganggap pesan sampai akan menggantung tepat pada penerima yang paling cepat melihatnya, dan consumer yang menghitung tingkat pengiriman hanya dari delivered akan melaporkan angka lebih rendah dari seharusnya. status pesan tetap sent dalam kasus ini, karena hanya tanda terima pengiriman yang memajukannya.
Callback hanya-baca tetap dapat memicu biaya Meta yang berlaku. Bird menggunakan satu identitas biaya untuk jalur terkirim dan terbaca; event pengiriman yang tidak ada tidak berarti komponen Meta gratis. Lihat Biaya dan penagihan.
Daftar tipe event bersifat terbuka: tipe baru dapat ditambahkan seiring waktu, jadi perlakukan nilai yang tidak dikenali sebagai event masa depan, bukan kesalahan.

Event kegagalan

whatsapp.failed dan whatsapp.rejected bersifat terminal. Penolakan berarti Bird menghentikan pesan sebelum mengirimnya ke WhatsApp, sehingga tidak dikenai biaya. Penyebabnya antara lain penerima yang disupres atau memilih keluar, saldo dompet tidak mencukupi, atau tujuan tanpa harga yang dikonfigurasi. Kegagalan berarti pesan tidak terkirim, dan error.code menjelaskan siapa yang memutuskan hal itu. Sebagian besar kode membawa keputusan WhatsApp, dipetakan dari kode yang dilaporkannya. internal_error adalah pengecualian: ia mencatat kredensial pengirim yang tidak tersedia atau percobaan ulang pemrosesan yang habis. Upaya transport yang tidak pasti tidak membuktikan Meta tidak pernah menerima permintaan tersebut. meta_error_code berisi kode WhatsApp jika tersedia, dan kegagalan internal_error tidak memilikinya secara desain.
Kedua event berisi objek error dengan Bird code yang stabil, description yang dapat dibaca manusia, meta_error_code opsional, dan occurred_at. Objek ini muncul di catatan API dan payload webhook hanya untuk tipe event ini.

Membaca event dari API

GET /v1/whatsapp/messages/{message_id}/events mengembalikan lini masa dalam urutan kronologis. Daftar terbatas ini tidak dipaginasi. Membaca event memerlukan kunci API dengan whatsapp:read:
const { data } = await bird.whatsapp.listEvents("wa_abc123");
for (const event of data) console.log(event.type, event.occurred_at);
Pesan yang diterima, dikirim, terkirim, dan dibaca mengembalikan empat event:
Contoh kode
{
  "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"
    }
  ]
}
Berikan type untuk mengembalikan satu tipe event publik yang tepat, seperti ?type=whatsapp.failed atau ?type=whatsapp.read. Abaikan parameter ini untuk mendapatkan lini masa lengkap.
Lini masa yang sama adalah yang dirender halaman log WhatsApp saat Anda membuka pesan.
Lembar detail pesan WhatsApp di dasbor Bird, dibuka untuk pesan bird_delivery_update yang terkirim: tab Events menampilkan lini masa siklus hidup per pesan yaitu Accepted, Sent, Delivered, dan Read, masing-masing dengan waktu berlalu dan stempel waktunya, di atas daftar pesan yang diredupkan

Langkah selanjutnya