{"id":1652,"date":"2026-10-07T08:27:53","date_gmt":"2026-10-07T08:27:53","guid":{"rendered":"https:\/\/whapi.id\/blog\/?p=1652"},"modified":"2026-10-05T03:32:31","modified_gmt":"2026-10-05T03:32:31","slug":"cara-menangani-status-pesan-whatsapp-dari-webhook","status":"publish","type":"post","link":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/","title":{"rendered":"Cara Menangani Status Pesan WhatsApp dari Webhook"},"content":{"rendered":"<p>Status pesan WhatsApp menunjukkan perkembangan pesan setelah aplikasi mengirimkan request melalui API. Dengan webhook, perubahan status tersebut dapat diterima secara otomatis oleh server sehingga aplikasi tidak perlu terus-menerus melakukan pengecekan status pesan.<\/p>\n<p>Status pesan dapat digunakan untuk memperbarui riwayat pengiriman, menampilkan status pada dashboard, mencatat pesan yang gagal, atau menentukan proses lanjutan setelah pesan diterima oleh WhatsApp.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg\" alt=\"Cara Menangani Status Pesan WhatsApp dari Webhook\" width=\"1408\" height=\"768\" class=\"alignnone size-full wp-image-1653\" srcset=\"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg 1408w, https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook-300x164.jpg 300w, https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook-1024x559.jpg 1024w, https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook-768x419.jpg 768w\" sizes=\"(max-width: 1408px) 100vw, 1408px\" \/><\/p>\n<p>Alur sederhananya:<\/p>\n<pre><code class=\"lang-text\">Aplikasi\r\n   \u2193\r\nAPI WhatsApp\r\n   \u2193\r\nPesan dikirim\r\n   \u2193\r\nStatus pesan berubah\r\n   \u2193\r\nWebhook\r\n   \u2193\r\n<span class=\"hljs-built_in\">Server<\/span>\r\n   \u2193\r\nDatabase \/ Dashboard\r\n`\r\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"IMAGE_URL\" alt=\"Diagram alur penanganan status pesan WhatsApp melalui webhook\"><\/p>\n<h2 id=\"apa-itu-status-pesan-whatsapp-\">Apa Itu Status Pesan WhatsApp?<\/h2>\n<p>Status pesan WhatsApp adalah informasi mengenai kondisi pesan dalam proses pengiriman.<\/p>\n<p>Status ini berbeda dengan status koneksi device.<\/p>\n<p><strong>Status device<\/strong> menunjukkan apakah device WhatsApp terhubung, sedangkan <strong>status pesan<\/strong> menunjukkan kondisi pesan tertentu setelah dikirim.<\/p>\n<p>Contohnya:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-symbol\">Device:<\/span>\r\nCONNECTED\r\n<\/code><\/pre>\n<p>berbeda dengan:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-symbol\">Pesan:<\/span>\r\nSENT\r\nDELIVERED\r\nREAD\r\n<\/code><\/pre>\n<p>Aplikasi perlu menyimpan kedua jenis informasi tersebut secara terpisah jika membutuhkan monitoring device sekaligus monitoring pesan.<\/p>\n<h2 id=\"mengapa-status-pesan-perlu-ditangani-\">Mengapa Status Pesan Perlu Ditangani?<\/h2>\n<p>Ketika sistem mengirim ribuan pesan, aplikasi tidak cukup hanya mengetahui bahwa request API berhasil diterima.<\/p>\n<p>Request berhasil diterima API belum tentu berarti pesan sudah sampai ke penerima.<\/p>\n<p>Contoh alur:<\/p>\n<pre><code class=\"lang-text\">Request <span class=\"hljs-keyword\">berhasil\r\n<\/span>      \u2193\r\nPesan <span class=\"hljs-keyword\">diproses\r\n<\/span>      \u2193\r\nPesan terkirim\r\n      \u2193\r\nPesan <span class=\"hljs-keyword\">diterima\r\n<\/span>      \u2193\r\nPesan <span class=\"hljs-keyword\">dibaca<\/span>\r\n<\/code><\/pre>\n<p>Dengan menerima event status melalui webhook, aplikasi dapat memperbarui informasi pesan berdasarkan event yang diterima.<\/p>\n<p>Contohnya pada dashboard:<\/p>\n<pre><code class=\"lang-text\">Pesan <span class=\"hljs-meta\">#12345<\/span>\r\n<span class=\"hljs-symbol\">Status:<\/span> READ\r\n<\/code><\/pre>\n<p>atau:<\/p>\n<pre><code class=\"lang-text\">Pesan <span class=\"hljs-meta\">#12346<\/span>\r\n<span class=\"hljs-symbol\">Status:<\/span> FAILED\r\n<\/code><\/pre>\n<h2 id=\"buat-endpoint-webhook\">Buat Endpoint Webhook<\/h2>\n<p>Endpoint webhook harus dapat menerima HTTP request dari API.<\/p>\n<p>Contoh menggunakan Node.js dan Express:<\/p>\n<pre><code class=\"lang-javascript\">const express = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'express'<\/span>);\r\n\r\nconst app = express();\r\n\r\napp.use(express.json());\r\n\r\napp.post(<span class=\"hljs-string\">'\/webhook\/whatsapp'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-params\">(req, res)<\/span> =&gt;<\/span> {\r\n  <span class=\"hljs-built_in\">console<\/span>.log(\r\n    JSON.stringify(req.body, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>)\r\n  );\r\n\r\n  res.sendStatus(<span class=\"hljs-number\">200<\/span>);\r\n});\r\n\r\napp.listen(<span class=\"hljs-number\">3000<\/span>, <span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> {\r\n  <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Server berjalan di port 3000'<\/span>);\r\n});\r\n<\/code><\/pre>\n<p>Pada tahap awal, tampilkan payload secara lengkap agar struktur event dapat diketahui.<\/p>\n<p>Jangan langsung membuat kode berdasarkan asumsi nama field status. Gunakan payload aktual yang diterima dari API.<\/p>\n<h2 id=\"membaca-payload-status\">Membaca Payload Status<\/h2>\n<p>Setelah webhook menerima event, periksa isi request:<\/p>\n<pre><code class=\"lang-javascript\">app.post(<span class=\"hljs-string\">'\/webhook\/whatsapp'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-params\">(req, res)<\/span> =&gt;<\/span> {\r\n  const data = req.body;\r\n\r\n  <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Webhook diterima'<\/span>);\r\n  <span class=\"hljs-built_in\">console<\/span>.log(JSON.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\r\n\r\n  res.sendStatus(<span class=\"hljs-number\">200<\/span>);\r\n});\r\n<\/code><\/pre>\n<p>Dari payload tersebut, tentukan:<\/p>\n<ul>\n<li>ID pesan<\/li>\n<li>Nomor tujuan<\/li>\n<li>Status pesan<\/li>\n<li>Waktu event<\/li>\n<li>Device yang digunakan<\/li>\n<li>Informasi lain yang diperlukan aplikasi<\/li>\n<\/ul>\n<p>Nama field harus mengikuti struktur payload webhook yang digunakan.<\/p>\n<p>Jika struktur payload belum diketahui, jangan membuat parser dengan nama field yang belum diverifikasi.<\/p>\n<h2 id=\"simpan-id-pesan\">Simpan ID Pesan<\/h2>\n<p>ID pesan penting untuk menghubungkan event webhook dengan pesan yang sebelumnya dikirim.<\/p>\n<p>Misalnya aplikasi mengirim pesan:<\/p>\n<pre><code class=\"lang-text\">Pesan <span class=\"hljs-string\">ID:<\/span> ABC123\r\n<span class=\"hljs-string\">Tujuan:<\/span> <span class=\"hljs-number\">628123456789<\/span>\r\n<span class=\"hljs-string\">Status:<\/span> SENT\r\n<\/code><\/pre>\n<p>Kemudian webhook menerima event untuk pesan yang sama.<\/p>\n<p>Aplikasi dapat mencari:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-attr\">message_id<\/span> = ABC123\r\n<\/code><\/pre>\n<p>lalu memperbarui status pada database.<\/p>\n<p>Alurnya:<\/p>\n<pre><code class=\"lang-text\">Kirim pesan\r\n    \u2193\r\nSimpan message_id\r\n    \u2193\r\nWebhook menerima event\r\n    \u2193\r\nCari message_id\r\n    \u2193\r\n<span class=\"hljs-keyword\">Update<\/span> <span class=\"hljs-keyword\">status<\/span>\r\n<\/code><\/pre>\n<p>Tanpa identifier yang konsisten, aplikasi akan kesulitan menentukan pesan mana yang harus diperbarui ketika jumlah pengiriman sudah besar.<\/p>\n<h2 id=\"struktur-database-untuk-status-pesan\">Struktur Database untuk Status Pesan<\/h2>\n<p>Data pesan dan statusnya dapat disimpan pada tabel seperti:<\/p>\n<pre><code class=\"lang-text\">messages\r\n-<span class=\"ruby\"> id\r\n<\/span>-<span class=\"ruby\"> message_id\r\n<\/span>-<span class=\"ruby\"> device_id\r\n<\/span>-<span class=\"ruby\"> recipient\r\n<\/span>-<span class=\"ruby\"> message\r\n<\/span>-<span class=\"ruby\"> status\r\n<\/span>-<span class=\"ruby\"> created_at\r\n<\/span>-<span class=\"ruby\"> updated_at<\/span>\r\n<\/code><\/pre>\n<p>Contoh:<\/p>\n<table>\n<thead>\n<tr>\n<th>Message ID<\/th>\n<th>Recipient<\/th>\n<th>Status<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ABC123<\/td>\n<td>628123456789<\/td>\n<td>SENT<\/td>\n<\/tr>\n<tr>\n<td>ABC124<\/td>\n<td>628987654321<\/td>\n<td>DELIVERED<\/td>\n<\/tr>\n<tr>\n<td>ABC125<\/td>\n<td>628555555555<\/td>\n<td>READ<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ketika event baru diterima, aplikasi mencari <code>message_id<\/code> yang sesuai dan memperbarui <code>status<\/code>.<\/p>\n<h2 id=\"update-status-dari-webhook\">Update Status dari Webhook<\/h2>\n<p>Contoh struktur handler:<\/p>\n<pre><code class=\"lang-javascript\">app.post(<span class=\"hljs-string\">'\/webhook\/whatsapp'<\/span>, <span class=\"hljs-keyword\">async<\/span> (req, res) =&gt; {\r\n  <span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">event<\/span> = req.body;\r\n\r\n  res.sendStatus(<span class=\"hljs-number\">200<\/span>);\r\n\r\n  <span class=\"hljs-keyword\">try<\/span> {\r\n    <span class=\"hljs-keyword\">const<\/span> messageId = extractMessageId(<span class=\"hljs-keyword\">event<\/span>);\r\n    <span class=\"hljs-keyword\">const<\/span> status = extractMessageStatus(<span class=\"hljs-keyword\">event<\/span>);\r\n\r\n    <span class=\"hljs-keyword\">if<\/span> (!messageId || !status) {\r\n      <span class=\"hljs-keyword\">return<\/span>;\r\n    }\r\n\r\n    <span class=\"hljs-keyword\">await<\/span> updateMessageStatus(\r\n      messageId,\r\n      status\r\n    );\r\n\r\n  } <span class=\"hljs-keyword\">catch<\/span> (error) {\r\n    console.error(\r\n      <span class=\"hljs-string\">'Gagal memproses status pesan:'<\/span>,\r\n      error\r\n    );\r\n  }\r\n});\r\n<\/code><\/pre>\n<p>Fungsi <code>extractMessageId()<\/code> dan <code>extractMessageStatus()<\/code> perlu disesuaikan dengan struktur payload yang benar-benar diterima.<\/p>\n<h2 id=\"jangan-menganggap-request-api-pesan-berhasil-terkirim\">Jangan Menganggap Request API = Pesan Berhasil Terkirim<\/h2>\n<p>Salah satu kesalahan umum adalah mengubah status pesan menjadi <code>SENT<\/code> hanya karena request API menghasilkan response sukses.<\/p>\n<p>Contohnya:<\/p>\n<pre><code class=\"lang-text\">Aplikasi\r\n   \u2193\r\nPOST API\r\n   \u2193\r\nHTTP <span class=\"hljs-number\">200<\/span>\r\n<\/code><\/pre>\n<p>Response HTTP yang sukses menunjukkan request telah diproses oleh API. Status pesan berikutnya tetap perlu ditangani sesuai event yang diterima.<\/p>\n<p>Karena itu, sistem dapat menyimpan status secara bertahap:<\/p>\n<pre><code class=\"lang-text\">REQUESTED\r\n   \u2193\r\nSENT\r\n   \u2193\r\nDELIVERED\r\n   \u2193\r\n<span class=\"hljs-keyword\">READ<\/span>\r\n<\/code><\/pre>\n<p>Nama dan urutan status harus mengikuti event yang tersedia pada API yang digunakan.<\/p>\n<h2 id=\"menangani-pesan-gagal\">Menangani Pesan Gagal<\/h2>\n<p>Status gagal perlu diproses secara khusus karena aplikasi mungkin perlu mengambil tindakan berikutnya.<\/p>\n<p>Contohnya:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-symbol\">Status:<\/span> FAILED\r\n       \u2193\r\nSimpan alasan <span class=\"hljs-keyword\">jika <\/span>tersedia\r\n       \u2193\r\nTandai pesan gagal\r\n       \u2193\r\nMasuk antrean retry <span class=\"hljs-keyword\">jika <\/span><span class=\"hljs-keyword\">diperlukan<\/span>\r\n<\/code><\/pre>\n<p>Data dapat disimpan seperti:<\/p>\n<pre><code class=\"lang-text\">message_id: ABC123\r\nstatus: FAILED\r\n<span class=\"hljs-keyword\">error: <\/span>...\r\nupdated_at: ...\r\n<\/code><\/pre>\n<p>Jangan langsung melakukan retry setiap kali menerima status gagal.<\/p>\n<p>Retry harus memiliki batas percobaan dan aturan yang jelas agar satu pesan tidak dikirim berulang kali tanpa kontrol.<\/p>\n<h2 id=\"membuat-retry-untuk-pesan-gagal\">Membuat Retry untuk Pesan Gagal<\/h2>\n<p>Jika sistem membutuhkan retry, simpan jumlah percobaan pengiriman.<\/p>\n<p>Contoh:<\/p>\n<pre><code class=\"lang-text\">messages\r\n-<span class=\"ruby\"> message_id\r\n<\/span>-<span class=\"ruby\"> status\r\n<\/span>-<span class=\"ruby\"> retry_count\r\n<\/span>-<span class=\"ruby\"> last_retry_at<\/span>\r\n<\/code><\/pre>\n<p>Alurnya:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-symbol\">FAILED<\/span>\r\n  \u2193\r\n<span class=\"hljs-symbol\">retry_count<\/span> &lt; <span class=\"hljs-keyword\">batas?\r\n<\/span>  \u2199          \u2198\r\n<span class=\"hljs-symbol\">Ya<\/span>           Tidak\r\n\u2193              \u2193\r\n<span class=\"hljs-symbol\">Retry<\/span>        Tandai gagal\r\n<\/code><\/pre>\n<p>Misalnya batas retry ditetapkan sebanyak tiga kali:<\/p>\n<pre><code class=\"lang-text\">Percobaan <span class=\"hljs-number\">1<\/span> \u2192 FAILED\r\nPercobaan <span class=\"hljs-number\">2<\/span> \u2192 FAILED\r\nPercobaan <span class=\"hljs-number\">3<\/span> \u2192 FAILED\r\n\u2192 Berhenti retry\r\n<\/code><\/pre>\n<p>Batas tersebut harus disesuaikan dengan kebutuhan sistem.<\/p>\n<h2 id=\"menangani-status-read\">Menangani Status READ<\/h2>\n<p>Status <code>READ<\/code> dapat digunakan untuk memperbarui tampilan pada dashboard.<\/p>\n<p>Contohnya:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-symbol\">Pesan:<\/span>\r\nHalo, apakah masih tersedia?\r\n\r\n<span class=\"hljs-symbol\">Status:<\/span>\r\nREAD\r\n<\/code><\/pre>\n<p>Database kemudian diperbarui:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">UPDATE<\/span> messages\r\n<span class=\"hljs-keyword\">SET<\/span> <span class=\"hljs-keyword\">status<\/span> = <span class=\"hljs-string\">'READ'<\/span>\r\n<span class=\"hljs-keyword\">WHERE<\/span> message_id = <span class=\"hljs-string\">'ABC123'<\/span>;\r\n<\/code><\/pre>\n<p>Pada aplikasi nyata, gunakan query parameterized atau ORM agar query tidak dibuat dari string input secara langsung.<\/p>\n<h2 id=\"menangani-status-delivered\">Menangani Status DELIVERED<\/h2>\n<p>Status <code>DELIVERED<\/code> menunjukkan pesan telah mencapai tahap penerimaan yang sesuai dengan status tersebut.<\/p>\n<p>Aplikasi dapat menggunakannya untuk:<\/p>\n<ul>\n<li>memperbarui dashboard;<\/li>\n<li>menghitung statistik pengiriman;<\/li>\n<li>mencatat waktu delivery;<\/li>\n<li>membedakan pesan yang sudah diterima dan belum.<\/li>\n<\/ul>\n<p>Contoh data:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-symbol\">message_id:<\/span> ABC123\r\n<span class=\"hljs-symbol\">status:<\/span> DELIVERED\r\n<span class=\"hljs-symbol\">delivered_at:<\/span> <span class=\"hljs-number\">2026<\/span><span class=\"hljs-number\">-09<\/span><span class=\"hljs-number\">-30<\/span> <span class=\"hljs-number\">10<\/span>:<span class=\"hljs-number\">30<\/span>:<span class=\"hljs-number\">12<\/span>\r\n<\/code><\/pre>\n<p>Simpan waktu setiap status jika laporan pengiriman membutuhkan data tersebut.<\/p>\n<h2 id=\"simpan-waktu-setiap-perubahan-status\">Simpan Waktu Setiap Perubahan Status<\/h2>\n<p>Untuk laporan yang lebih detail, database dapat menyimpan timestamp setiap perubahan.<\/p>\n<p>Contoh:<\/p>\n<pre><code class=\"lang-text\">messages\r\n-<span class=\"ruby\"> message_id\r\n<\/span>-<span class=\"ruby\"> status\r\n<\/span>-<span class=\"ruby\"> sent_at\r\n<\/span>-<span class=\"ruby\"> delivered_at\r\n<\/span>-<span class=\"ruby\"> read_at\r\n<\/span>-<span class=\"ruby\"> failed_at<\/span>\r\n<\/code><\/pre>\n<p>Data tersebut dapat digunakan untuk mengetahui durasi antara pengiriman, penerimaan, dan pembacaan pesan.<\/p>\n<p>Contohnya:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-selector-tag\">sent_at<\/span>       \u2192 10<span class=\"hljs-selector-pseudo\">:00<\/span><span class=\"hljs-selector-pseudo\">:00<\/span>\r\n<span class=\"hljs-selector-tag\">delivered_at<\/span>  \u2192 10<span class=\"hljs-selector-pseudo\">:00<\/span><span class=\"hljs-selector-pseudo\">:03<\/span>\r\n<span class=\"hljs-selector-tag\">read_at<\/span>       \u2192 10<span class=\"hljs-selector-pseudo\">:01<\/span><span class=\"hljs-selector-pseudo\">:15<\/span>\r\n<\/code><\/pre>\n<p>Dari data tersebut, aplikasi dapat menghitung waktu yang dibutuhkan setiap tahap.<\/p>\n<h2 id=\"hindari-status-mundur\">Hindari Status Mundur<\/h2>\n<p>Event webhook dapat datang tidak sesuai urutan waktu yang diharapkan jika aplikasi memproses banyak request secara bersamaan.<\/p>\n<p>Contoh:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-keyword\">READ<\/span>\r\n\u2193\r\nDELIVERED\r\n<\/code><\/pre>\n<p>Jika aplikasi langsung menyimpan event kedua, status pesan dapat berubah kembali dari <code>READ<\/code> menjadi <code>DELIVERED<\/code>.<\/p>\n<p>Karena itu, aplikasi perlu memiliki aturan urutan status.<\/p>\n<p>Contoh sederhana:<\/p>\n<pre><code class=\"lang-text\">SENT &lt; DELIVERED &lt; <span class=\"hljs-keyword\">READ<\/span>\r\n<\/code><\/pre>\n<p>Jika status baru memiliki tingkat yang lebih rendah daripada status yang sudah tersimpan, aplikasi dapat mengabaikannya.<\/p>\n<p>Contoh:<\/p>\n<pre><code class=\"lang-javascript\">const statusOrder = {\r\n  SENT: <span class=\"hljs-type\">1<\/span>,\r\n  DELIVERED: <span class=\"hljs-type\">2<\/span>,\r\n  READ: <span class=\"hljs-type\">3<\/span>\r\n};\r\n\r\n<span class=\"hljs-keyword\">if<\/span> (\r\n  statusOrder[<span class=\"hljs-keyword\">new<\/span><span class=\"hljs-type\">Status<\/span>] &gt;=\r\n  statusOrder[currentStatus]\r\n) {\r\n  await updateMessageStatus(\r\n    messageId,\r\n    <span class=\"hljs-keyword\">new<\/span><span class=\"hljs-type\">Status<\/span>\r\n  );\r\n}\r\n<\/code><\/pre>\n<p>Daftar status dan urutannya harus disesuaikan dengan status yang benar-benar digunakan oleh API.<\/p>\n<h2 id=\"hindari-event-duplikat\">Hindari Event Duplikat<\/h2>\n<p>Webhook dapat menerima event yang sama lebih dari sekali. Jika setiap event langsung diproses, database dapat mencatat perubahan yang sama berulang kali.<\/p>\n<p>Contoh:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-attribute\">ABC123<\/span> \u2192 DELIVERED\r\nABC123 \u2192 DELIVERED\r\nABC123 \u2192 DELIVERED\r\n<\/code><\/pre>\n<p>Untuk mencegah pemrosesan berulang, gunakan identifier event atau kombinasi data yang dapat membedakan event.<\/p>\n<p>Jika identifier event tidak tersedia, aplikasi dapat menggunakan kombinasi seperti:<\/p>\n<pre><code class=\"lang-text\">message_id + <span class=\"hljs-keyword\">status<\/span>\r\n<\/code><\/pre>\n<p>sebagai pemeriksaan tambahan.<\/p>\n<p>Namun, cara ini perlu disesuaikan dengan kebutuhan aplikasi karena satu status dapat muncul lebih dari sekali dalam kondisi tertentu.<\/p>\n<h2 id=\"pisahkan-webhook-dan-proses-status\">Pisahkan Webhook dan Proses Status<\/h2>\n<p>Endpoint webhook sebaiknya tidak menjalankan terlalu banyak pekerjaan sebelum memberikan response.<\/p>\n<p>Contoh:<\/p>\n<pre><code class=\"lang-javascript\">app.post(<span class=\"hljs-string\">'\/webhook\/whatsapp'<\/span>, <span class=\"hljs-keyword\">async<\/span> (req, res) =&gt; {\r\n  <span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">event<\/span> = req.body;\r\n\r\n  res.sendStatus(<span class=\"hljs-number\">200<\/span>);\r\n\r\n  <span class=\"hljs-keyword\">await<\/span> processMessageStatus(<span class=\"hljs-keyword\">event<\/span>);\r\n});\r\n<\/code><\/pre>\n<p>Untuk volume tinggi, proses status dapat diteruskan ke queue:<\/p>\n<pre><code class=\"lang-text\">Webhook\r\n   \u2193\r\nValidasi\r\n   \u2193\r\nQueue\r\n   \u2193\r\nWorker\r\n   \u2193\r\n<span class=\"hljs-keyword\">Update<\/span> <span class=\"hljs-keyword\">database<\/span>\r\n   \u2193\r\nDashboard\r\n<\/code><\/pre>\n<p>Dengan cara ini, endpoint tetap ringan ketika banyak event masuk secara bersamaan.<\/p>\n<h2 id=\"contoh-proses-status-pesan\">Contoh Proses Status Pesan<\/h2>\n<p>Struktur proses lengkap dapat dibuat seperti berikut:<\/p>\n<pre><code class=\"lang-javascript\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">async<\/span> function <span class=\"hljs-title\">processMessageStatus<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">event<\/span><\/span>) <\/span>{\r\n  <span class=\"hljs-keyword\">const<\/span> messageId = extractMessageId(<span class=\"hljs-keyword\">event<\/span>);\r\n  <span class=\"hljs-keyword\">const<\/span> newStatus = extractMessageStatus(<span class=\"hljs-keyword\">event<\/span>);\r\n\r\n  <span class=\"hljs-keyword\">if<\/span> (!messageId || !newStatus) {\r\n    <span class=\"hljs-keyword\">return<\/span>;\r\n  }\r\n\r\n  <span class=\"hljs-keyword\">const<\/span> message = <span class=\"hljs-keyword\">await<\/span> findMessage(messageId);\r\n\r\n  <span class=\"hljs-keyword\">if<\/span> (!message) {\r\n    <span class=\"hljs-keyword\">return<\/span>;\r\n  }\r\n\r\n  <span class=\"hljs-keyword\">const<\/span> currentStatus = message.status;\r\n\r\n  <span class=\"hljs-keyword\">if<\/span> (\r\n    shouldUpdateStatus(\r\n      currentStatus,\r\n      newStatus\r\n    )\r\n  ) {\r\n    <span class=\"hljs-keyword\">await<\/span> updateMessageStatus(\r\n      messageId,\r\n      newStatus\r\n    );\r\n  }\r\n}\r\n<\/code><\/pre>\n<p>Struktur ini memisahkan proses menjadi beberapa bagian:<\/p>\n<ol>\n<li>Membaca ID pesan.<\/li>\n<li>Membaca status.<\/li>\n<li>Mencari pesan pada database.<\/li>\n<li>Membandingkan status.<\/li>\n<li>Memperbarui status jika diperlukan.<\/li>\n<\/ol>\n<p>Kode dapat dikembangkan tanpa membuat route webhook menjadi terlalu panjang.<\/p>\n<h2 id=\"contoh-tampilan-status-pada-dashboard\">Contoh Tampilan Status pada Dashboard<\/h2>\n<p>Data status dari webhook dapat ditampilkan seperti:<\/p>\n<table>\n<thead>\n<tr>\n<th>Penerima<\/th>\n<th>Pesan<\/th>\n<th>Status<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>628123456789<\/td>\n<td>Pesanan diterima<\/td>\n<td>SENT<\/td>\n<\/tr>\n<tr>\n<td>628987654321<\/td>\n<td>Pembayaran berhasil<\/td>\n<td>DELIVERED<\/td>\n<\/tr>\n<tr>\n<td>628555555555<\/td>\n<td>Tiket dibuat<\/td>\n<td>READ<\/td>\n<\/tr>\n<tr>\n<td>628111111111<\/td>\n<td>OTP<\/td>\n<td>FAILED<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dashboard dapat menampilkan data terbaru berdasarkan status yang tersimpan di database.<\/p>\n<p>Jika membutuhkan laporan, tambahkan filter:<\/p>\n<pre><code class=\"lang-text\">Status:\r\n<span class=\"hljs-string\">[ Semua ]<\/span>\r\n\r\n<span class=\"hljs-string\">[ SENT ]<\/span>\r\n<span class=\"hljs-string\">[ DELIVERED ]<\/span>\r\n<span class=\"hljs-string\">[ READ ]<\/span>\r\n<span class=\"hljs-string\">[ FAILED ]<\/span>\r\n<\/code><\/pre>\n<h2 id=\"cara-menguji-status-pesan\">Cara Menguji Status Pesan<\/h2>\n<p>Pengujian dapat dilakukan dengan mengirim satu pesan terlebih dahulu.<\/p>\n<p>Urutannya:<\/p>\n<pre><code class=\"lang-text\"><span class=\"hljs-bullet\">1. <\/span>Kirim satu pesan melalui API\r\n<span class=\"hljs-bullet\">2. <\/span>Simpan ID pesan\r\n<span class=\"hljs-bullet\">3. <\/span>Periksa response API\r\n<span class=\"hljs-bullet\">4. <\/span>Tunggu event webhook\r\n<span class=\"hljs-bullet\">5. <\/span>Periksa payload\r\n<span class=\"hljs-bullet\">6. <\/span>Cocokkan ID pesan\r\n<span class=\"hljs-bullet\">7. <\/span>Periksa status\r\n<span class=\"hljs-bullet\">8. <\/span>Pastikan database diperbarui\r\n<\/code><\/pre>\n<p>Gunakan log saat pengembangan:<\/p>\n<pre><code class=\"lang-javascript\"><span class=\"hljs-selector-tag\">console<\/span><span class=\"hljs-selector-class\">.log<\/span>(\r\n  <span class=\"hljs-selector-tag\">JSON<\/span><span class=\"hljs-selector-class\">.stringify<\/span>(<span class=\"hljs-selector-tag\">req<\/span><span class=\"hljs-selector-class\">.body<\/span>, <span class=\"hljs-selector-tag\">null<\/span>, 2)\r\n);\r\n<\/code><\/pre>\n<p>Setelah struktur payload sudah diketahui, gunakan logging yang lebih terkontrol pada server production.<\/p>\n<h2 id=\"jika-status-pesan-tidak-masuk\">Jika Status Pesan Tidak Masuk<\/h2>\n<p>Jika status pesan tidak muncul pada webhook, periksa beberapa bagian berikut:<\/p>\n<h3 id=\"webhook-aktif\">Webhook Aktif<\/h3>\n<p>Pastikan URL webhook sudah dikonfigurasi dengan benar.<\/p>\n<h3 id=\"endpoint-dapat-diakses\">Endpoint Dapat Diakses<\/h3>\n<p>Pastikan server dapat menerima request dari internet.<\/p>\n<h3 id=\"route-menerima-post\">Route Menerima POST<\/h3>\n<p>Periksa method dan path endpoint.<\/p>\n<h3 id=\"payload-terbaca\">Payload Terbaca<\/h3>\n<p>Pastikan middleware membaca request body.<\/p>\n<h3 id=\"device-terhubung\">Device Terhubung<\/h3>\n<p>Status device perlu diperiksa karena pengiriman dan event pesan bergantung pada koneksi device.<\/p>\n<h3 id=\"id-pesan-tersimpan\">ID Pesan Tersimpan<\/h3>\n<p>Pastikan aplikasi menyimpan identifier pesan dari proses pengiriman sehingga event webhook dapat dikaitkan dengan data yang benar.<\/p>\n<h3 id=\"log-server\">Log Server<\/h3>\n<p>Periksa apakah event benar-benar sampai ke aplikasi.<\/p>\n<h2 id=\"status-pesan-untuk-laporan-pengiriman\">Status Pesan untuk Laporan Pengiriman<\/h2>\n<p>Data status dari webhook dapat digunakan untuk membuat laporan.<\/p>\n<p>Contohnya:<\/p>\n<pre><code class=\"lang-text\">Total pesan      : 10.000\r\nSENT             : 9.700\r\nDELIVERED        : 9.200\r\nREAD             : 8.500\r\nFAILED           : 300\r\n<\/code><\/pre>\n<p>Data tersebut dapat dihitung berdasarkan status terakhir setiap pesan.<\/p>\n<p>Jangan menghitung setiap event sebagai satu pesan. Satu pesan dapat menghasilkan beberapa perubahan status.<\/p>\n<p>Contohnya:<\/p>\n<pre><code class=\"lang-text\">ABC123 \u2192 SENT\r\nABC123 \u2192 DELIVERED\r\nABC123 \u2192 <span class=\"hljs-keyword\">READ<\/span>\r\n<\/code><\/pre>\n<p>Tetap dihitung sebagai <strong>satu pesan<\/strong>, bukan tiga pesan.<\/p>\n<h2 id=\"kesimpulan\">Kesimpulan<\/h2>\n<p>Cara menangani status pesan WhatsApp dari webhook dimulai dengan menerima event, mengambil identifier pesan dan status, kemudian memperbarui data pesan pada database.<\/p>\n<p>Alurnya:<\/p>\n<pre><code class=\"lang-text\">Pesan dikirim\r\n      \u2193\r\nSimpan <span class=\"hljs-keyword\">message<\/span> ID\r\n      \u2193\r\nStatus berubah\r\n      \u2193\r\nWebhook menerima event\r\n      \u2193\r\nCari <span class=\"hljs-keyword\">message<\/span> ID\r\n      \u2193\r\nPeriksa status\r\n      \u2193\r\nUpdate database\r\n      \u2193\r\nDashboard \/ laporan\r\n<\/code><\/pre>\n<p>Hal penting yang perlu diperhatikan adalah membedakan status device dengan status pesan, menyimpan identifier pesan, menangani event duplikat, mencegah status mundur, dan tidak menganggap response API sebagai status akhir pesan.<\/p>\n<p>Struktur webhook yang sederhana juga membuat proses status lebih mudah dikembangkan untuk dashboard, laporan pengiriman, retry, CRM, dan sistem notifikasi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Status pesan WhatsApp menunjukkan perkembangan pesan setelah aplikasi mengirimkan request melalui API. Dengan webhook, perubahan status tersebut dapat diterima secara [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1653,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1652","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cara Menangani Status Pesan WhatsApp dari Webhook - WHAPI | BLOG<\/title>\n<meta name=\"description\" content=\"Cara menangani status pesan WhatsApp dari webhook, mulai dari menerima dan membaca status, menyimpan data, hingga memperbarui status pesan di aplikasi.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cara Menangani Status Pesan WhatsApp dari Webhook - WHAPI | BLOG\" \/>\n<meta property=\"og:description\" content=\"Cara menangani status pesan WhatsApp dari webhook, mulai dari menerima dan membaca status, menyimpan data, hingga memperbarui status pesan di aplikasi.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/\" \/>\n<meta property=\"og:site_name\" content=\"WHAPI | BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-07T08:27:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1408\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Doveriz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"Doveriz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/\",\"url\":\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/\",\"name\":\"Cara Menangani Status Pesan WhatsApp dari Webhook - WHAPI | BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/whapi.id\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg\",\"datePublished\":\"2026-10-07T08:27:53+00:00\",\"author\":{\"@id\":\"https:\/\/whapi.id\/blog\/#\/schema\/person\/ca540be71f16cd13214efb59ef58236a\"},\"description\":\"Cara menangani status pesan WhatsApp dari webhook, mulai dari menerima dan membaca status, menyimpan data, hingga memperbarui status pesan di aplikasi.\",\"breadcrumb\":{\"@id\":\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#primaryimage\",\"url\":\"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg\",\"contentUrl\":\"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg\",\"width\":1408,\"height\":768,\"caption\":\"Cara Menangani Status Pesan WhatsApp dari Webhook\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Beranda\",\"item\":\"https:\/\/whapi.id\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cara Menangani Status Pesan WhatsApp dari Webhook\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/whapi.id\/blog\/#website\",\"url\":\"https:\/\/whapi.id\/blog\/\",\"name\":\"WHAPI | BLOG\",\"description\":\"Blog Resmi Whapi.id Temukan tips praktis, panduan teknis, dan informasi terbaru seputar WhatsApp API, chatbot, serta otomasi bisnis. Ditulis oleh tim ahli untuk membantu meningkatkan pelayanan, efisiensi operasional, dan penjualan bisnis secara berkelanjutan.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/whapi.id\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/whapi.id\/blog\/#\/schema\/person\/ca540be71f16cd13214efb59ef58236a\",\"name\":\"Doveriz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/whapi.id\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2797b0bc9cdfb3ca0fbc22a3708768605e7bee3cfa5ec0b6c98c8511a1378252?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2797b0bc9cdfb3ca0fbc22a3708768605e7bee3cfa5ec0b6c98c8511a1378252?s=96&d=mm&r=g\",\"caption\":\"Doveriz\"},\"description\":\"Saya adalah Developer dan penulis Blog Whapi.id serta Fullstack Developer spesialisasi pengembangan aplikasi berbasis web dan chatbot automation untuk berbagai platform bisnis.\",\"sameAs\":[\"https:\/\/whapi.id\/blog\"],\"url\":\"https:\/\/whapi.id\/blog\/author\/whapi\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cara Menangani Status Pesan WhatsApp dari Webhook - WHAPI | BLOG","description":"Cara menangani status pesan WhatsApp dari webhook, mulai dari menerima dan membaca status, menyimpan data, hingga memperbarui status pesan di aplikasi.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/","og_locale":"id_ID","og_type":"article","og_title":"Cara Menangani Status Pesan WhatsApp dari Webhook - WHAPI | BLOG","og_description":"Cara menangani status pesan WhatsApp dari webhook, mulai dari menerima dan membaca status, menyimpan data, hingga memperbarui status pesan di aplikasi.","og_url":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/","og_site_name":"WHAPI | BLOG","article_published_time":"2026-10-07T08:27:53+00:00","og_image":[{"width":1408,"height":768,"url":"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg","type":"image\/jpeg"}],"author":"Doveriz","twitter_card":"summary_large_image","twitter_misc":{"Ditulis oleh":"Doveriz","Estimasi waktu membaca":"7 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/","url":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/","name":"Cara Menangani Status Pesan WhatsApp dari Webhook - WHAPI | BLOG","isPartOf":{"@id":"https:\/\/whapi.id\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#primaryimage"},"image":{"@id":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#primaryimage"},"thumbnailUrl":"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg","datePublished":"2026-10-07T08:27:53+00:00","author":{"@id":"https:\/\/whapi.id\/blog\/#\/schema\/person\/ca540be71f16cd13214efb59ef58236a"},"description":"Cara menangani status pesan WhatsApp dari webhook, mulai dari menerima dan membaca status, menyimpan data, hingga memperbarui status pesan di aplikasi.","breadcrumb":{"@id":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#primaryimage","url":"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg","contentUrl":"https:\/\/whapi.id\/blog\/wp-content\/uploads\/2026\/10\/Cara-Menangani-Status-Pesan-WhatsApp-dari-Webhook.jpg","width":1408,"height":768,"caption":"Cara Menangani Status Pesan WhatsApp dari Webhook"},{"@type":"BreadcrumbList","@id":"https:\/\/whapi.id\/blog\/cara-menangani-status-pesan-whatsapp-dari-webhook\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Beranda","item":"https:\/\/whapi.id\/blog\/"},{"@type":"ListItem","position":2,"name":"Cara Menangani Status Pesan WhatsApp dari Webhook"}]},{"@type":"WebSite","@id":"https:\/\/whapi.id\/blog\/#website","url":"https:\/\/whapi.id\/blog\/","name":"WHAPI | BLOG","description":"Blog Resmi Whapi.id Temukan tips praktis, panduan teknis, dan informasi terbaru seputar WhatsApp API, chatbot, serta otomasi bisnis. Ditulis oleh tim ahli untuk membantu meningkatkan pelayanan, efisiensi operasional, dan penjualan bisnis secara berkelanjutan.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/whapi.id\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Person","@id":"https:\/\/whapi.id\/blog\/#\/schema\/person\/ca540be71f16cd13214efb59ef58236a","name":"Doveriz","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/whapi.id\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2797b0bc9cdfb3ca0fbc22a3708768605e7bee3cfa5ec0b6c98c8511a1378252?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2797b0bc9cdfb3ca0fbc22a3708768605e7bee3cfa5ec0b6c98c8511a1378252?s=96&d=mm&r=g","caption":"Doveriz"},"description":"Saya adalah Developer dan penulis Blog Whapi.id serta Fullstack Developer spesialisasi pengembangan aplikasi berbasis web dan chatbot automation untuk berbagai platform bisnis.","sameAs":["https:\/\/whapi.id\/blog"],"url":"https:\/\/whapi.id\/blog\/author\/whapi\/"}]}},"_links":{"self":[{"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/posts\/1652","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/comments?post=1652"}],"version-history":[{"count":2,"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/posts\/1652\/revisions"}],"predecessor-version":[{"id":1655,"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/posts\/1652\/revisions\/1655"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/media\/1653"}],"wp:attachment":[{"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/media?parent=1652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/categories?post=1652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/whapi.id\/blog\/wp-json\/wp\/v2\/tags?post=1652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}