Pesan Interaktif WhatsApp
Quick Reply, CTA URL, dan List — pesan dengan tombol/pilihan yang membuat pelanggan merespons tanpa perlu mengetik.
Pesan interaktif memungkinkan pelanggan membalas dengan menekan tombol atau memilih opsi alih-alih mengetik. Tidak butuh approval template — cukup kirim ke kontak yang sudah membalas pesan kamu dalam 24 jam terakhir.
POST /v1/whatsapp/messagesScope: whatsapp:send
Tipe yang tersedia
| Tipe | interactive.type | Kegunaan |
|---|---|---|
| Quick Reply | button | Maks 3 tombol balas cepat |
| CTA URL | cta_url | 1 tombol membuka link |
| List | list | Daftar pilihan dengan kategori (mis. menu pilihan layanan) |
Satu pesan, satu tipe
Setiap pesan interaktif hanya boleh berisi satu tipe. Untuk kombinasi (mis. Quick Reply + CTA URL di percakapan yang sama), kirim dua pesan terpisah.
Quick Reply (tombol balas cepat)
{
"to": "628123456789",
"type": "interactive",
"interactive": {
"type": "button",
"header": { "type": "text", "text": "Konfirmasi Pesanan" },
"body": { "text": "Pesanan #ORD-12345 siap dikirim. Alamat sudah benar?" },
"footer": { "text": "Balas dalam 24 jam" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "confirm_yes", "title": "Ya, Benar" } },
{ "type": "reply", "reply": { "id": "confirm_no", "title": "Ubah Alamat" } }
]
}
}
}Batas
| Field | Min | Maks |
|---|---|---|
| Jumlah tombol | 1 | 3 |
reply.title | 1 | 20 karakter |
reply.id | 1 | 256 karakter |
header.text | — | 60 karakter |
body.text | 1 | 1024 karakter |
footer.text | — | 60 karakter |
reply.id adalah ID unik yang akan kamu terima di webhook saat user
menekan tombol — pakai untuk routing logic di handler kamu.
CTA URL (tombol membuka link)
{
"to": "628123456789",
"type": "interactive",
"interactive": {
"type": "cta_url",
"body": { "text": "Pesanan menunggu pembayaran Rp 250.000. Klik untuk membayar." },
"footer": { "text": "Link berlaku 24 jam" },
"action": {
"name": "cta_url",
"parameters": {
"display_text": "Bayar Sekarang",
"url": "https://payment.toko-anda.com/pay/ORD-12345"
}
}
}
}Batas
| Field | Min | Maks |
|---|---|---|
parameters.display_text | 1 | 20 karakter |
parameters.url | 1 | 2000 karakter, harus HTTP/HTTPS |
body.text | 1 | 1024 karakter |
header | opsional | — |
footer.text | opsional | 60 karakter |
List (daftar pilihan)
Cocok untuk menu pilihan layanan, kategori produk, jadwal slot, dll.
{
"to": "628123456789",
"type": "interactive",
"interactive": {
"type": "list",
"header": { "type": "text", "text": "Menu Layanan" },
"body": { "text": "Silakan pilih layanan yang Anda butuhkan:" },
"footer": { "text": "Pilih salah satu opsi" },
"action": {
"button": "Pilih Layanan",
"sections": [
{
"title": "Layanan Pelanggan",
"rows": [
{ "id": "faq", "title": "FAQ", "description": "Pertanyaan yang sering diajukan" },
{ "id": "talk_agent", "title": "Hubungi CS", "description": "Bicara langsung dengan agen kami" }
]
},
{
"title": "Order & Pembayaran",
"rows": [
{ "id": "track_order", "title": "Lacak Pesanan", "description": "Cek status pengiriman" },
{ "id": "payment_help", "title": "Bantuan Pembayaran", "description": "Pertanyaan seputar metode pembayaran" }
]
}
]
}
}
}Batas
| Field | Min | Maks |
|---|---|---|
action.button | 1 | 20 karakter |
Jumlah sections | 1 | 10 |
Jumlah rows per section | 1 | 10 |
rows[].title | 1 | 24 karakter |
rows[].description | — | 72 karakter |
rows[].id | 1 | 256 karakter |
body.text | 1 | 1024 karakter |
Server menolak request yang melebihi batas — kamu akan menerima
error WHATSAPP_INTERACTIVE_LIMIT_EXCEEDED.
Pesan error pesan interaktif
| Kode | Penyebab | Solusi |
|---|---|---|
WHATSAPP_SESSION_CLOSED | Di luar jendela 24 jam | Pakai template |
WHATSAPP_INTERACTIVE_INVALID_TYPE | interactive.type tidak dikenal | Pakai button, list, atau cta_url |
WHATSAPP_INTERACTIVE_MISSING_FIELD | Field wajib tidak ada | Cek details.field |
WHATSAPP_INTERACTIVE_INVALID_FIELD | Format field tidak valid | Cek details.hint (mis. URL bukan HTTPS) |
WHATSAPP_INTERACTIVE_LIMIT_EXCEEDED | Melebihi batas tombol/section/karakter | Lihat tabel batas di atas |
Menerima jawaban user
Saat user menekan tombol Quick Reply atau memilih row di List, Chatera
mengirim webhook event message.inbound ke endpoint webhook kamu.
Payload webhook akan berisi interactive.reply.id (untuk button) atau
interactive.list_reply.id (untuk list) — gunakan ID ini untuk routing
logic di handler kamu.
Lihat Webhook untuk detail format payload.