Skip to main content
BlogBackend

Integrasi WhatsApp Business Cloud API Resmi untuk Pasar Indonesia

Cara saya mengatur template pesan, webhook, jendela 24 jam, dan pricing per-pesan dengan WhatsApp Cloud API resmi untuk aplikasi di Indonesia.

Matthews Wong

Software Engineer

Juli 202610 menit baca
Integrasi WhatsApp Business Cloud API Resmi untuk Pasar Indonesia

Foto oleh Wikimedia Commons contributor (CC0)

Ringkasan Utama

Untuk notifikasi pelanggan di Indonesia, gunakan WhatsApp Business Cloud API resmi dari Meta, bukan library tidak resmi. Daftarkan template pesan yang sudah disetujui, balas dengan pesan bebas di dalam jendela layanan pelanggan 24 jam yang terbuka saat pelanggan mengirim pesan, terima pesan masuk lewat webhook, dan siapkan anggaran untuk pricing per-pesan template yang berbeda per kategori (marketing, utility, authentication), sementara balasan non-template di dalam jendela tetap gratis.

Di Indonesia, WhatsApp bukan sekadar aplikasi chat — ini adalah kanal default untuk segala hal, dari konfirmasi pesanan sampai pengingat pembayaran. Pada sebuah proyek untuk klien Indonesia baru-baru ini, saya butuh backend yang mengirim notifikasi andal begitu pesanan dikirim atau tagihan jatuh tempo. Godaannya selalu memakai library scraper yang mengotomasi WhatsApp Web. Saya sangat menyarankan untuk tidak melakukannya, dan artikel ini menjelaskan jalur resmi yang saya tempuh sebagai gantinya.

Opsi resmi adalah WhatsApp Business Platform Cloud API, yang di-hosting oleh Meta. Tidak ada server WhatsApp yang perlu Anda jalankan sendiri — Anda cukup memanggil satu endpoint HTTP, dan Meta menangani pengiriman, enkripsi, serta kesehatan akun. Keputusan tunggal itu menghilangkan satu kelas penuh insiden produksi yang biasa diciptakan oleh tools tidak resmi.

Kenapa Cloud API resmi mengalahkan library tidak resmi

Library Node dan Python populer yang menggerakkan WhatsApp Web lewat headless browser terlihat praktis karena gratis dan melewati proses persetujuan. Tapi ini adalah klien hasil reverse-engineering, dan Ketentuan Layanan WhatsApp melarang reverse engineering layanannya maupun penggunaannya lewat cara otomatis yang tidak sah. Library seperti ini bisa rusak setiap kali WhatsApp memperbarui klien web-nya, dan Ketentuan yang sama mengizinkan WhatsApp menonaktifkan atau menangguhkan akun yang melanggarnya. Untuk pipeline notifikasi bisnis, nomor yang dinonaktifkan berarti gangguan total tanpa peringatan. Berikut perbandingan kedua pendekatan tersebut.

AspekCloud API resmiLibrary tidak resmi
KeandalanDi-hosting Meta, endpoint stabil dengan versiHasil reverse-engineer WhatsApp Web, rusak saat ada update
Keamanan akunDirestui Meta; penegakan dimulai dari peringatan dan pembatasan yang bisa diajukan bandingAkun bisa dinonaktifkan karena melanggar Ketentuan WhatsApp
KepatuhanReview template dan opt-in ditegakkanTanpa pengaman, ada risiko hukum nyata
SkalaTier resmi dari 250 hingga tanpa batas penerima per 24 jamSatu sesi yang rapuh, mudah ditandai
DukunganDokumentasi Meta plus dukungan BSPHanya komunitas, tanpa bantuan saat rusak

Jika WhatsApp menonaktifkan sebuah nomor karena melanggar Ketentuannya, seluruh alur notifikasi Anda ikut berhenti, dan Anda tidak bisa begitu saja mendaftarkan pengganti, karena Ketentuan tersebut melarang pembuatan akun lain tanpa izin. Penghematan biaya dari library tidak resmi tidak sebanding dengan risiko operasional itu pada sistem produksi.

Template pesan dan cara mendapatkan persetujuannya

Setiap pesan yang Anda kirim di luar jendela layanan pelanggan yang terbuka wajib memakai template yang sudah disetujui. Anda membuat template sekali lewat Message Templates API atau WhatsApp Manager, lengkap dengan contoh nilai untuk setiap placeholder, lalu Meta meninjaunya; keputusan persetujuan bisa memakan waktu hingga 24 jam. Hanya template yang sudah disetujui yang bisa dikirim. Template mendukung variabel placeholder yang Anda isi saat pengiriman, jadi satu template yang disetujui bisa mencakup ribuan pesan yang dipersonalisasi. Pilih kategori yang tepat — utility untuk update transaksional, marketing untuk promosi, authentication untuk kode sekali pakai — karena kategori menentukan aturan persetujuan sekaligus penagihan.

// Create a UTILITY template (Bahasa Indonesia) via the Graph API
// POST https://graph.facebook.com/v26.0/<WABA_ID>/message_templates
// Authorization: Bearer <SYSTEM_USER_TOKEN>
{
  "name": "order_shipped_id",
  "language": "id",
  "category": "UTILITY",
  "components": [
    {
      "type": "BODY",
      "text": "Halo {{1}}, pesanan {{2}} Anda sudah dikirim dan diperkirakan tiba {{3}}.",
      "example": {
        "body_text": [["Budi", "INV-2026-0817", "besok sore"]]
      }
    }
  ]
}

Tulis template dalam Bahasa Indonesia sejak awal, dengan kode bahasa id. Meta tidak menerjemahkan isi template, dan setiap versi bahasa adalah template tersendiri yang melewati review dan dihitung dalam batas jumlah template Anda, jadi pisahkan versi Inggris dan Indonesia alih-alih mencampur keduanya dalam satu isi template.

Jendela layanan pelanggan 24 jam

Begitu pelanggan mengirim pesan kepada Anda, jendela layanan pelanggan 24 jam terbuka. Selama jendela terbuka, Anda bisa membalas dengan pesan bebas — tanpa template — dan setiap pesan baru dari pelanggan mereset timer menjadi 24 jam lagi. Setelah jendela tertutup, satu-satunya cara menjangkau pelanggan itu lagi adalah lewat pesan template. Perbedaan inilah inti dari platform ini: template untuk kontak yang diinisiasi bisnis, pesan layanan bebas untuk percakapan yang dimulai pelanggan.

  • Jendela terbuka: kirim teks, gambar, tombol, atau daftar dengan bebas — ideal untuk balasan support atau chatbot.
  • Jendela tertutup: hanya pesan template yang disetujui yang bisa menghubungi pelanggan kembali.
  • Setiap pesan masuk dari pelanggan mereset timer 24 jam, sehingga chat yang aktif tetap bisa bebas template.

Mengirim pesan template dari backend

Semua pesan keluar menuju satu endpoint. Anda butuh phone number ID dari dashboard Meta, access token System User yang berumur panjang, dan nomor penerima lengkap dengan tanda plus dan kode negara — untuk Indonesia berarti +62 tanpa angka nol di depan, jadi nomor yang diawali 0812 menjadi +62812. Meta sangat menyarankan tanda plus tetap dicantumkan: tanpa tanda plus, kode negara nomor bisnis Anda sendiri akan ditambahkan di depan, sehingga pesan bisa salah terkirim. Parameter body mengisi placeholder template sesuai urutan.

// POST https://graph.facebook.com/v26.0/<PHONE_NUMBER_ID>/messages
// Authorization: Bearer <ACCESS_TOKEN>
{
  "messaging_product": "whatsapp",
  "to": "+6281234567890",
  "type": "template",
  "template": {
    "name": "order_shipped_id",
    "language": { "code": "id" },
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Budi" },
          { "type": "text", "text": "INV-2026-0817" },
          { "type": "text", "text": "besok sore" }
        ]
      }
    ]
  }
}

Menerima pesan masuk dengan webhook

Untuk merespons balasan pelanggan — dan untuk tahu bahwa jendela layanan baru saja terbuka — Anda berlangganan webhook. Meta pertama-tama memanggil endpoint Anda dengan request GET untuk memverifikasinya terhadap token yang Anda tetapkan, lalu mengirim setiap pesan masuk dan update status pengiriman sebagai POST yang ditandatangani dengan header X-Hub-Signature-256, yang sebaiknya Anda cocokkan dengan app secret. Balas dengan HTTP 200 secepatnya: untuk respons lain Meta akan mengulang pengiriman hingga 7 hari, dan pengulangan itu bisa datang sebagai duplikat, jadi lakukan deduplikasi berdasarkan ID pesan. Lakukan proses berat di antrean (queue), bukan langsung di dalam handler webhook.

// Express webhook: verification (GET) + inbound handling (POST)
app.get("/webhook", (req, res) => {
  const mode = req.query["hub.mode"];
  const token = req.query["hub.verify_token"];
  const challenge = req.query["hub.challenge"];
  if (mode === "subscribe" && token === process.env.VERIFY_TOKEN) {
    return res.status(200).send(challenge);
  }
  return res.sendStatus(403);
});

app.post("/webhook", (req, res) => {
  res.sendStatus(200); // ack immediately, then process
  const value = req.body.entry?.[0]?.changes?.[0]?.value;
  const message = value?.messages?.[0];
  if (message) {
    // Customer messaged us -> 24-hour service window is now open
    enqueue({ from: message.from, text: message.text?.body });
  }
});

Kategori template dan pricing per-pesan

Sejak 1 Juli 2025, Meta menagih per pesan, bukan lagi per percakapan: Anda membayar setiap kali pesan template terkirim, dan tarifnya bergantung pada kategori template serta kode negara nomor penerima. Pesan non-template, yang hanya bisa dikirim di dalam jendela layanan pelanggan yang terbuka, gratis, dan template utility yang terkirim di dalam jendela terbuka juga gratis. Indonesia (+62) punya tarif tersendiri di rate card Meta, yang juga diterbitkan dalam rupiah, dan volume bulanan yang lebih tinggi membuka tarif utility dan authentication yang lebih rendah. Jika Anda membalas dalam 24 jam pelanggan yang datang lewat iklan Click to WhatsApp atau tombol Halaman Facebook di aplikasi ponsel, terbuka jendela free entry point selama 72 jam yang membuat semua pesan gratis. Cek rate card terbaru sebelum menyusun anggaran, karena Meta memperbaruinya secara berkala.

KategoriPemakaian umumDitagih?
MarketingPromo, newsletter, pengingat keranjangDitagih per pesan terkirim
UtilityUpdate pesanan, struk, pengingat tagihanGratis di dalam jendela 24 jam, selebihnya ditagih
AuthenticationKode OTP dan verifikasi loginDitagih; bisnis yang berbasis di luar Indonesia bisa dikenai tarif authentication-international
ServiceBalasan Anda ke pelanggan di dalam jendela 24 jamGratis

Rancang alur agar update transaksional terkirim saat jendela masih terbuka. Jika pelanggan baru saja memesan lewat chat, mengirim update pengiriman sebagai pesan utility di dalam jendela itu tidak berbiaya — penghematan nyata pada volume khas Indonesia.

Aturan opt-in dan kepatuhan

Meta mewajibkan opt-in sebelum Anda mengirim pesan ke siapa pun. Pelanggan harus setuju menerima pesan dari bisnis Anda, dan permintaan persetujuan harus menyebut nama bisnis Anda dengan jelas. Sejak pembaruan kebijakan Meta pada November 2024, opt-in tidak lagi harus menyebut WhatsApp secara spesifik, asalkan mematuhi hukum setempat, dan di Indonesia hukum itu mencakup UU PDP. Nomor telepon yang terkait dengan pelanggan yang dikenali termasuk data pribadi menurut UU ini, pemrosesannya butuh dasar hukum seperti persetujuan eksplisit (Pasal 20), persetujuan harus tertulis atau terekam (Pasal 22), dan Anda wajib bisa menunjukkan bukti persetujuan itu (Pasal 24). Simpan jejak persetujuan; Anda akan membutuhkannya jika pelanggan mempersoalkan sebuah pesan.

  • Ambil opt-in di kanal yang sudah dipakai pelanggan — checkout web, aplikasi, atau formulir fisik Anda.
  • Nyatakan dengan jelas bahwa mereka setuju menerima pesan dari bisnis Anda dan sebut nama bisnisnya; menyebut bahwa pesan akan datang lewat WhatsApp tidak lagi diwajibkan Meta, tapi mencegah pelanggan kaget.
  • Hormati opt-out dengan segera dan simpan daftar berhenti agar Anda tidak pernah mengirim ke nomor yang berhenti berlangganan.
  • Jaga kualitas tetap tinggi: blokir, laporan, dan mute dari pengguna menurunkan quality rating Anda, dan kualitas rendah yang berlangsung lama membuat pengiriman Anda dibatasi.

Digabungkan, inilah pipeline yang saya percayai di produksi: template yang disetujui untuk peringatan keluar, webhook yang mengubah pelanggan ke jendela layanan gratis, pengiriman yang sadar kategori untuk mengendalikan biaya, dan catatan persetujuan yang menjaga kepatuhan. Setup-nya memang lebih banyak daripada library scraper, tapi inilah satu-satunya versi yang bertahan menghadapi trafik nyata di Indonesia.

FAQ

Pertanyaan Umum

Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.

Apakah saya butuh Business Solution Provider (BSP) untuk memakai WhatsApp Cloud API?

Tidak. Cloud API di-hosting oleh Meta, dan bisnis yang berintegrasi untuk dirinya sendiri bisa langsung bekerja lewat Meta App Dashboard dengan access token System User. Business Solution Provider bisa mengambil alih onboarding, penagihan, dan dukungan, tapi sifatnya opsional.

Bisakah saya mengirim pesan WhatsApp ke pelanggan yang belum pernah menghubungi saya lebih dulu?

Hanya dengan template pesan yang sudah disetujui, dan hanya jika pelanggan sudah memberi opt-in untuk menerima pesan dari bisnis Anda. Pesan bebas hanya diizinkan di dalam jendela layanan pelanggan 24 jam yang terbuka saat pelanggan mengirim pesan atau menelepon Anda. Di luar jendela itu, template adalah satu-satunya cara untuk memulai kontak.

Berapa biaya WhatsApp Business API untuk nomor Indonesia?

Sejak 1 Juli 2025 Meta menagih per pesan template yang terkirim, dengan tarif yang ditentukan kategori template dan kode negara penerima; Indonesia punya tarif tersendiri di rate card Meta, yang juga diterbitkan dalam rupiah. Pesan non-template di dalam jendela layanan pelanggan yang terbuka gratis, begitu pula template utility yang terkirim di dalam jendela itu. Template marketing dan authentication ditagih, dan volume bulanan yang lebih tinggi membuka tarif utility dan authentication yang lebih rendah, jadi cek rate card terbaru sebelum menyusun anggaran.

Kenapa tidak pakai library WhatsApp gratis yang mengotomasi WhatsApp Web saja?

Library seperti itu adalah klien hasil reverse-engineering, dan Ketentuan Layanan WhatsApp melarang reverse engineering layanannya maupun penggunaannya lewat cara otomatis yang tidak sah. Ketentuan itu mengizinkan WhatsApp menonaktifkan atau menangguhkan akun yang melanggar, dan Anda setuju tidak membuat akun lain tanpa izin, sehingga satu tindakan penegakan bisa menjatuhkan seluruh alur notifikasi Anda. Untuk sistem produksi, Cloud API resmi adalah pilihan yang andal.

Apakah saya perlu menangani opt-in untuk notifikasi WhatsApp di Indonesia?

Ya. Meta mewajibkan opt-in yang menyebut nama bisnis Anda dengan jelas, dan sejak pembaruan kebijakan November 2024 opt-in boleh bersifat umum, tidak harus khusus WhatsApp, asalkan mematuhi hukum setempat. Menurut UU PDP, persetujuan harus tertulis atau terekam dan Anda wajib bisa menunjukkan buktinya, jadi catat kapan dan bagaimana setiap pelanggan memberi persetujuan, dan hormati opt-out dengan segera.