# Menerima reaksi WhatsApp

Berlangganan perubahan reaksi untuk mengetahui kapan kontak menambahkan emoji ke salah satu pesan Anda, menggantinya, atau mencabutnya. Reaksi menandai pesan yang sudah ada dan masuk melalui `whatsapp.reacted`.

## Prasyarat

Siapkan [endpoint webhook](/docs/guides/webhooks) untuk workspace Anda. Untuk mengambil reaksi terkini atau riwayatnya, gunakan kunci API dengan izin baca WhatsApp.

## 1. Berlangganan perubahan reaksi

Tambahkan `whatsapp.reacted` ke langganan webhook Anda. Langganan `whatsapp.received` tidak mencakup reaksi. Ikuti [panduan webhook](/docs/guides/webhooks) untuk verifikasi tanda tangan, percobaan ulang pengiriman, dan konfigurasi endpoint.

Reaksi tidak membuat pesan baru di daftar pesan atau membuka jendela layanan pelanggan. Jika Anda perlu membalas, periksa [aturan jendela layanan](/docs/guides/whatsapp/sending-whatsapp) sebelum mengirim pesan bebas.

## 2. Identifikasi pesan dan perubahannya

Baca `data.whatsapp_id` pada event untuk menemukan pesan yang direaksi oleh kontak. Ini adalah ID pesan Bird asli (`wam_…`), bukan ID reaksi terpisah.

Gunakan `data.from` untuk mengidentifikasi kontak dan `data.to` untuk mengidentifikasi pengirim WhatsApp Anda. Keduanya adalah objek alamat WhatsApp; tangani [ID pengguna cakupan bisnis](/docs/guides/whatsapp/business-scoped-user-ids) jika alamat kontak tidak memiliki nomor telepon.

Kontak yang menambahkan reaksi jempol ke atas menghasilkan webhook berikut:

```json
{
  "data": {
    "emoji": "👍",
    "from": { "phone_number": "+14155550100" },
    "to": { "phone_number": "+13124495569" },
    "whatsapp_id": "wam_01ky8b3xq4gd7pmzn2ka51f7te",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b"
  },
  "timestamp": "2026-08-28T19:01:10.000Z",
  "type": "whatsapp.reacted"
}
```

Interpretasikan `data.emoji` sebagai berikut:

- Emoji non-null menambahkan atau mengganti reaksi kontak tersebut pada pesan yang dirujuk.
- Emoji `null` menghapus reaksi kontak tersebut. Field ini ada pada event penghapusan.

Penggantian tiba sebagai satu event yang membawa emoji baru; tidak ada event penghapusan terpisah untuk emoji lama. Pertahankan string persis: `❤` dan `❤️` adalah nilai yang berbeda dalam payload.

## 3. Ambil reaksi terkini

Jika aplikasi Anda menampilkan reaksi yang saat ini melekat pada pesan, [ambil pesan tersebut](/docs/api/reference/get-whatsapp-message) dan baca `reactions`-nya. Daftar ini berisi satu reaksi aktif per pengirim dan dihilangkan jika tidak ada reaksi yang aktif.

Untuk `GET /v1/whatsapp/messages/wam_01ky8b3xq4gd7pmzn2ka51f7te`, field terkait reaksi memiliki bentuk berikut (field pesan lainnya dihilangkan):

```json
{
  "id": "wam_01ky8b3xq4gd7pmzn2ka51f7te",
  "reactions": [
    {
      "emoji": "👍",
      "from": { "phone_number": "+14155550100" }
    }
  ]
}
```

Pesan tetap mempertahankan konten, arah, dan status pengiriman aslinya. `reactions[].from` mengidentifikasi orang yang memberikan reaksi.

Jangan memperlakukan webhook terakhir yang Anda terima sebagai kondisi terkini. WhatsApp melaporkan waktu reaksi hingga detik, sehingga perubahan bisa memiliki timestamp yang sama, dan percobaan ulang webhook dapat mengubah urutan kedatangan. Gunakan webhook untuk memicu pembaruan reaksi terkini pada pesan.

## 4. Periksa riwayat reaksi

[Daftar event reaksi](/docs/api/reference/list-whatsapp-message-reaction-events) untuk memeriksa perubahan pada pesan yang dirujuk. Perubahan kontak masuk memiliki status `received`; penghapusan membawa `emoji: null`. Daftar ini juga mencakup hasil [reaksi yang dikirim workspace Anda](/docs/guides/whatsapp/reactions).

Reaction-events API mengembalikan respons berpaginasi. Contoh ini menampilkan reaksi bisnis yang ditolak dan reaksi kontak yang diterima sebelumnya:

```json
{
  "data": [
    {
      "id": "war_01krdgeqcxet5s7t44vh8rt9mh",
      "emoji": "🎉",
      "status": "rejected",
      "from": {
        "phone_number": "+13124495569"
      },
      "error": {
        "code": "internal_error",
        "description": "the receiving number is no longer connected",
        "occurred_at": "2026-08-28T19:04:22Z"
      },
      "occurred_at": "2026-08-28T19:04:22Z"
    },
    {
      "id": "war_01krdgeqcxet5s7t44vh8rt9mg",
      "emoji": "👍",
      "status": "received",
      "from": {
        "phone_number": "+14155550100",
        "bsuid": "US.13491208655302741918"
      },
      "occurred_at": "2026-08-28T19:01:10Z"
    }
  ],
  "next_cursor": null,
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiMjAyNi0wOC0yOFQxOTowNDoyMloiLCJpIjoiMDE5ZTFiMDctNWQ5ZC03NjhiLTkzZTgtODRkYzUxOGQyNjkxIn0"
}
```

Riwayat reaksi terpisah dari event pengiriman pesan. Endpoint message-events tidak berisi perubahan `whatsapp.reacted`. Untuk retensi dan paginasi, ikuti [referensi log reaksi](/docs/api/reference/list-whatsapp-message-reaction-events).

## Pemecahan masalah

- **Tidak ada webhook reaksi**: Periksa apakah langganan mencakup `whatsapp.reacted`. Reaksi terhadap pesan lama yang referensi penyedianya tidak lagi dapat diselesaikan tidak menghasilkan reaksi yang cocok, entri log, atau webhook.
- **Reaksi tidak muncul di daftar pesan**: Cari pesan aslinya. Reaksi melekat pada pesan tersebut dan tidak memiliki baris pesan terpisah.
- **Status reaksi berubah tak terduga**: Perbarui `reactions` pesan asli alih-alih mengurutkan event webhook berdasarkan waktu kedatangan atau timestamp.

## Langkah selanjutnya

- [Kirim atau hapus reaksi](/docs/guides/whatsapp/reactions)
- [Baca payload event WhatsApp](/docs/guides/whatsapp/events)
- [Terima pesan WhatsApp](/docs/guides/whatsapp/receiving-whatsapp)

## 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](/products/whatsapp) (product)

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