Kami akan menghentikan On-Premises API. Lihat Proses Penghentian On-Premises API dokumen untuk detailnya, dan untuk mempelajari cara bermigrasi ke Cloud API generasi berikutnya.

Mengirim Pesan Interaktif

Panduan ini mengajarkan kepada Anda cara mengirim tiap-tiap opsi pesan interaktif. Pesan interaktif memberi pengguna Anda cara yang lebih mudah untuk menemukan dan memilih apa yang mereka inginkan dari bisnis Anda di WhatsApp. Selama pengujian, bot obrolan yang menggunakan fitur pesan interaktif mencapai tingkat tanggapan dan konversi yang jauh lebih tinggi dibandingkan dengan yang berbasis teks.

Jenis pesan interaktif:

  • Pesan berisi Daftar: Pesan menyertakan menu hingga 10 opsi. Jenis pesan ini menawarkan cara yang lebih sederhana dan lebih konsisten bagi pengguna untuk membuat pilihan saat berinteraksi dengan bisnis.
  • Pesan berisi Tombol Balas: Pesan menyertakan hingga 3 opsi—setiap opsi adalah tombol. Jenis pesan ini menawarkan cara yang lebih cepat bagi pengguna untuk membuat pilihan dari menu saat berinteraksi dengan bisnis. Tombol balas memiliki pengalaman pengguna yang sama dengan template interaktif dengan tombol.
  • Pesan Satu Produk: Pesan dengan satu item produk dari stok bisnis. Lihat Membagikan Produk dengan Pelanggan untuk informasi selengkapnya.
  • Pesan Multiproduk: Pesan yang berisi pilihan hingga 30 item dari stok bisnis. Lihat Membagikan Produk dengan Pelanggan untuk informasi selengkapnya.
  • Pesan Permintaan Lokasi: Pesan yang meminta lokasi pengguna.
  • Pesan Alur: Pesan untuk interaksi terstruktur. Lihat Pesan Alur untuk informasi selengkapnya.

Spesifikasi Pesan Interaktif

  • Beberapa pesan interaktif dapat digabungkan dalam alur yang sama.
  • Pengguna tidak dapat memilih lebih dari satu opsi sekaligus dari pesan berisi daftar atau tombol, tetapi mereka dapat kembali dan membuka kembali pesan sebelumnya.
  • Pesan berisi daftar atau tombol balas tidak dapat digunakan sebagai notifikasi. Saat ini, pesan berisi daftar atau tombol balas hanya dapat dikirim dalam waktu 24 jam dari pesan terakhir dari pengguna. Jika Anda mencoba mengirim pesan di luar periode 24 jam, Anda mendapatkan pesan kesalahan.
  • Platform yang didukung: iOS, Android, dan web (Pesan alur tidak didukung di web).

Lihat bagaimana pesan teks dibandingkan dengan pesan interaktif:


Lihat contoh bagaimana pesan berisi Daftar dan tombol Balas dapat digabungkan dalam alur yang sama:

Ada Masalah
Kami mengalami masalah saat memutar video ini.

Ringkasan

Mengapa Anda Harus Menggunakannya

Pemahaman Pengguna

Bila dibandingkan dengan daftar berbasis teks, pesan interaktif memberikan format yang lebih sederhana dan lebih konsisten bagi orang-orang untuk menemukan dan memilih apa yang mereka inginkan dari suatu bisnis. Selama pengujian, tingkat pemahaman orang-orang saat berinteraksi dengan fitur-fitur ini memang lebih tinggi.

Hasil Bisnis

Selama pengujian, bot obrolan yang menggunakan fitur pesan interaktif mencapai tingkat tanggapan dan konversi yang jauh lebih tinggi dibandingkan dengan yang berbasis teks.

Dipersonalisasi

Diisi secara dinamis secara realtime sehingga dapat dipersonalisasi sesuai pelanggan atau situasi. Contoh: Anda dapat menampilkan pesan berisi Daftar slot waktu yang tersedia untuk janji temu, atau menggunakan tombol Balas untuk menunjukkan alamat pengiriman sebelumnya.

Tidak Ada Template

Pesan Interaktif tidak memerlukan template atau persetujuan terlebih dahulu.

Kapan Sebaiknya Digunakan

Pesan berisi Daftar adalah yang terbaik untuk menyajikan beberapa opsi, seperti:

  • Layanan pelanggan atau menu Pertanyaan Umum
  • Menu makanan yang dibungkus
  • Pilihan toko atau lokasi di sekitar
  • Waktu reservasi yang tersedia
  • Memilih untuk mengulang pesanan terbaru

Tombol Balas adalah yang terbaik untuk menawarkan tanggapan cepat dari serangkaian opsi terbatas, seperti:

  • Isi ulang pulsa
  • Mengubah detail pribadi
  • Memesan ulang pesanan sebelumnya
  • Meminta retur
  • Menambahkan tambahan opsional ke pesanan makanan
  • Memilih metode pembayaran

Tombol Balas sangat berharga untuk kasus penggunaan 'dipersonalisasi' ketika tanggapan generik tidak memadai.

Pesan alur paling baik untuk komunikasi terstruktur di satu atau beberapa layar, seperti:

  • Memesan janji temu
  • Menelusuri produk
  • Mengumpulkan masukan dari pelanggan
  • Mendapatkan prospek penjualan baru

Dengan pesan alur, pelaku bisnis dapat menawarkan pengalaman pengguna yang lebih kaya dan lebih menarik yang dapat membantu pelanggan menyelesaikan sesuatu dengan lebih cepat di WhatsApp tanpa harus beralih ke aplikasi lain, atau mengunjungi situs web.

Cara Menggunakannya

Pada level API, pesan interaktif diatur dengan menentukan type pesan ke interactive dan menambahkan objek interactive. Umumnya, pesan-pesan ini mencakup 4 bagian utama: header, body, footer, dan action.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive" 
  "interactive":{
    "type": "list" | "button" | ...,
    "header": {},
    "body": {},
    "footer": {},
    "action": {}
  }
}
Untuk Pesan berisi Daftar, ini adalah bagaimana bagian-bagiannya cocok satu sama lain:

Untuk Pesan berisi Tombol Balas, ini adalah bagaimana bagian-bagiannya cocok satu sama lain:

Lihat informasi selengkapnya di bawah ini tentang cara mengirimkan pesan-pesan ini.

Memulai

Sebelum mengirim setiap pesan, Anda perlu mendapatkan ID WhatsApp penerima dengan panggilan ke node /contacts.

Kami merekomendasikan pengaturan Webhooks untuk menerima notifikasi status pesan dan pesan masuk. Dengan cara ini, Anda dapat melacak: apakah pesan terkirim dan jawaban dari pelanggan. Lihat Webhooks untuk informasi selengkapnya.

Langkah 1: Susun objek interactive Anda

Pesan Daftar

Untuk mengirim pesan berisi daftar, Anda harus menyusun objek interactive dari jenis list dengan komponen berikut:

ObjekDeskripsi

header

Opsional.

Jika Anda memutuskan untuk menyertakannya, Anda harus mengatur jenis tajuk ke teks dan menambahkan kolom teks dengan konten yang diinginkan. Maksimal 60 karakter.


Lihat semua kolom header yang tersedia.

body

Wajib.

Body pesan Anda. Maksimal 1.024 karakter.


Lihat semua kolom body yang tersedia.

footer

Opsional.

Footer pesan Anda.


Lihat semua kolom footer yang tersedia.

action

Wajib.

Di dalam action, Anda harus menyusun:

  • kolom button dengan konten tombol Anda, maksimal 20 karakter
  • setidaknya satu objek section (maksimal 10) dengan maksimal 24 karakter untuk titlesection

Di dalam section, Anda harus menambahkan setidaknya satu objek rows. title maksimal 24 karakter untuk satu baris dan description maksimal 72 karakter untuk satu baris.


Lihat semua kolom action yang tersedia.

Lihat semua kolom section yang tersedia.

Pada akhirnya, objek interactive harus terlihat seperti ini:

"interactive":{
  "type": "list",
  "header": {
    "type": "text",
    "text": "your-header-content"
  },
  "body": {
    "text": "your-text-message-content"
  },
  "footer": {
    "text": "your-footer-content"
  },
  "action": {
    "button": "cta-button-content",
    "sections":[
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      ...
    ]
  }
}

Tombol Balas

Untuk mengirim pesan tombol balasan, Anda harus menyusun objek interactive berjenis button dengan komponen berikut:

ObjekDeskripsi

header

Opsional.

Untuk pesan interaktif button, Anda bisa menggunakan jenis tajuk berikut: text, video, image, atau document.


Setelah Anda memilih type Anda, tambahkan objek/kolom yang sesuai dengan informasi selengkapnya:

  • Untuk video, image, dan document jenis: Tambahkan objek media.
  • Untuk jenis text: Tambahkan kolom text dengan konten yang diinginkan.

Contoh:

"header": {
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }

Lihat semua kolom header yang tersedia.

body

Wajib.

Lihat semua kolom body yang tersedia.

footer

Opsional.

Lihat semua kolom footer yang tersedia.

action

Wajib.

Anda harus menambahkan setidaknya satu button, serta menyertakan type, title, dan id untuk tombol Anda. Anda tidak bisa menambahkan lebih dari 3 tombol. Maksimal 20 karakter untuk title.

Tidak boleh ada spasi di depan atau di belakang saat mengatur ID.


Contoh:

"action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    }

Lihat semua kolom action yang tersedia.

Pada akhirnya, objek interactive harus terlihat seperti ini:

"interactive": {
    "type": "button",
    "header": { # optional
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }, # end header
    "body": {
      "text": "your-text-body-content"
    },
    "footer": { # optional
      "text": "your-text-footer-content"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    } # end action   
  } # end interactive

Pesan Permintaan Lokasi

Pesan permintaan lokasi berisi teks isi dan tombol Kirim lokasi yang dapat diketuk pengguna. Mengetuk tombol menampilkan layar bagikan lokasi yang kemudian dapat digunakan pengguna untuk membagikan lokasi mereka.

Untuk mengirim pesan permintaan lokasi, pertama-tama susun objek interactive dengan teks yang ingin Anda tampilkan dalam pesan:

{
  "type": "location_request_message",
  "body": {
    "type": "text",
    "text": "<TEXT>"
  },
  "action": {
    "name": "send_location" 
  }
}
PropertiDeskripsi

type

Atur ke location_request_message.

body.type

Atur ke text.

body.text

Atur ke teks yang ingin Anda tampilkan di atas tombol Kirim lokasi.

action.name

Atur ke send_location.

Pesan Alur

Pesan alur berisi tombol ajakan bertindak yang dapat diketuk oleh pengguna. Ketukan pada tombol akan menampilkan Alur kustom Anda.

Untuk mengirim pesan Alur, Anda harus merangkai objek interactive berjenis flow. Lihat di sini untuk detail lengkapnya.

Langkah 2: Tambahkan parameter pesan umum

Setelah objek interaktif selesai, tambahkan parameter lain yang menyusun pesan: recipient_type, to, dan type. Jangan lupa mengatur type ke interactive.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id", // WhatsApp ID of your recipient
  "type": "interactive",
  "interactive":{
    // Your interactive object  
   }
  }

Lihat parameter yang umum untuk semua jenis pesan di sini.

Langkah 3: Buat panggilan POST ke /messages

Kirim panggilan POST ke endpoint /messages dengan objek JSON yang disusun di Langkah 1 dan 2. Jika pesan berhasil dikirim, Anda mendapatkan tanggapan berikut:

{
  "messages": [{
    "id": "{message-id}"
  }]
}

Langkah 4: Periksa Webhooks

Jika Anda mengatur Webhooks Anda, periksa perubahan status pesan Anda serta tanggapan yang berasal dari pengguna.

Webhooks pengguna yang menanggapi pesan interaktif menyertakan komponen baru yang disebut interactive, yang berisi informasi tentang pilihan pengguna. Lihat Webhooks, Komponen untuk informasi selengkapnya.

Contoh: berikut ini adalah permintaan Webhooks yang menjelaskan pengguna yang telah membagikan lokasinya.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "12345",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "12345",
              "phone_number_id": "12345"
            },
            "contacts": [
              {
                "profile": {
                  "name": "John Doe"
                },
                "wa_id": "12345"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "12345",
                  "id": "test-id"
                },
                "from": "123450",
                "id": "test-id",
                "timestamp": "16632",
                "location": {
                  "address": "1071 5th Ave, New York, NY 10128", #Optional
                  "latitude": 37.421996751527,
                  "longitude": -122.08407156636,
                  "name": "Solomon R. Guggenheim Museum" #Optional
                },
                "type": "location"
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Komponen location dalam payload berisi garis lintang dan garis bujur pengguna. Perhatikan bahwa address dan name bersifat opsional bagi pengguna dan mungkin tidak disertakan.

"location": {
  "address": "1071 5th Ave, New York, NY 10128", #Optional
  "latitude": 40.782910059774,
  "longitude": -73.959075808525,
  "name": "Solomon R. Guggenheim Museum" #Optional
}