We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.

Pesan

Gunakan endpoint /PHONE_NUMBER_ID/messages untuk mengirim teks, media, kontak, lokasi, dan pesan interaktif, serta template pesan ke pelanggan Anda. Pelajari selengkapnya tentang pesan yang dapat Anda kirim.

EndpointAutentikasi

/PHONE_NUMBER_ID/messages

Developers can authenticate their API calls with the access token generated in the App Dashboard > WhatsApp > API Setup.


Solution Partners must authenticate themselves with an access token with the whatsapp_business_messaging permission.

Pesan diidentifikasi dengan ID unik (WAMID). Anda dapat melacak status pesan di Webhooks melalui WAMID-nya. Anda juga dapat menandai pesan masuk sebagai endpoint pesan yang telah dibaca. WAMID ini dapat memiliki panjang maksimal hingga 128 karakter.

Dengan Cloud API, tidak ada lagi cara untuk memeriksa secara eksplisit apakah suatu nomor telepon memiliki ID WhatsApp. Untuk mengirim pesan kepada seseorang menggunakan Cloud API, cukup kirimkan langsung ke nomor telepon pelanggan—setelah mereka setuju untuk dikirimi pesan. Lihat Referensi, Pesan untuk contohnya.

Objek Pesan

Untuk mengirim pesan, Anda harus terlebih dahulu menyusun objek pesan dengan konten yang ingin Anda kirim. Ini adalah parameter yang digunakan dalam objek message:

NamaDeskripsi (Klik panah di kolom kiri untuk opsi yang didukung.)

audio

object

Diperlukan saat type=audio.

Objek media berisi audio.

biz_opaque_callback_data

string

Opsional.

String arbitrer, berguna untuk pelacakan.


Misalnya, Anda dapat meneruskan ID template pesan di kolom ini untuk melacak perjalanan pelanggan Anda mulai dari pesan pertama yang Anda kirim. Anda kemudian dapat melacak ROI berbagai jenis template pesan untuk menentukan yang paling efektif.


Semua aplikasi yang berlangganan kolom webhook messages di Akun WhatsApp Business bisa mendapatkan string ini, karena disertakan dalam objek statuses di payload webhook.


Cloud API tidak memproses kolom ini, melainkan hanya menampilkannya sebagai bagian dari webhook pesan yang terkirim/tersampaikan/dibaca.


Maksimal 512 karakter.


Cloud API saja.

contacts

object

Diperlukan saat type=contacts.

Objek contacts.

context

object

Diperlukan jika membalas pesan di percakapan.

Objek yang berisi ID pesan sebelumnya yang Anda balas. Contoh:


{"message_id":"MESSAGE_ID"}


Cloud API saja.

document

object

Diperlukan saat type=document.

Objek media berisi dokumen.

hsm

object

Berisi objek hsm. Opsi ini tidak digunakan lagi pada On-Premises API v2.39. Gunakan objek template sebagai gantinya.


On-Premises API saja.

image

object

Diperlukan saat type=image.

Objek media berisi gambar.

interactive

object

Diperlukan saat type=interactive.

Objek interactive. Komponen dari setiap objek interactive umumnya mengikuti pola yang konsisten: header, body, footer, dan action.

location

object

Diperlukan saat type=location.

Objek location.

messaging_product

string

Diperlukan

Layanan pesan digunakan untuk permintaan tersebut. Gunakan "whatsapp".


Cloud API saja.

preview_url

boolean

Diperlukan jika type=text.

Memungkinkan pratinjau URL dalam pesan teks — Lihat Mengirim URL dalam Pesan Teks. Kolom ini opsional jika tidak menyertakan URL dalam pesan Anda. Nilai:false (default), true.


On-Premises API saja. Pengguna Cloud API dapat menggunakan fungsi yang sama pada kolom preview_url di dalam objek teks.

recipient_type

string

Opsional.

Saat ini, Anda hanya dapat mengirim pesan ke perorangan. Atur ini sebagai individual.


Default: individual

status

string

Status pesan. Anda dapat menggunakan kolom ini untuk menandai pesan sebagai read. Lihat panduan berikut untuk informasi:


sticker

object

Diperlukan saat type=sticker.

Objek media berisi stiker.


Cloud API: Di samping semua jenis stiker masuk, stiker statis dan animasi keluar pihak ketiga juga didukung. Stiker statis harus berukuran 512x512 pixel dan tidak boleh melebihi 100 KB. Stiker animasi harus berukuran 512x512 pixel dan tidak boleh melebihi 500 KB.


On-Premises API: Di samping semua jenis stiker masuk, hanya stiker keluar statis pihak ketiga yang didukung. Stiker statis harus berukuran 512x512 pixel dan tidak boleh melebihi 100 KB. Stiker animasi tidak didukung.

template

object

Diperlukan saat type=template.

Objek template.

text

object

Diperlukan untuk pesan teks.

Objek text.

to

string

Diperlukan.

ID WhatsApp atau nomor telepon pelanggan yang hendak Anda kirimi pesan. Lihat Format Nomor Telepon.


Jika diperlukan, pengguna On-Premises API bisa mendapatkan nomor ini dengan memanggil contacts endpoint.

type

string

Opsional.

Jenis pesan yang ingin Anda kirim. Jika dihilangkan, defaultnya adalah text.

Objek berikut bersarang di dalam objek pesan:

Objek Kontak

NameDescription

addresses

object

Optional.

Full contact address(es) formatted as an addresses object. The object can contain the following fields:

streetstringOptional. Street number and name.

citystringOptional. City name.

statestringOptional. State abbreviation.

zipstringOptional. ZIP code.

countrystringOptional. Full country name.

country_codestringOptional. Two-letter country abbreviation.

typestringOptional. Standard values are HOME and WORK.

birthday

Optional.

YYYY-MM-DD formatted string.

emails

object

Optional.

Contact email address(es) formatted as an emails object. The object can contain the following fields:

emailstringOptional. Email address.

typestringOptional. Standard values are HOME and WORK.

name

object

Required.

Full contact name formatted as a name object. The object can contain the following fields:

formatted_namestringRequired. Full name, as it normally appears.

first_namestringOptional*. First name.

last_namestringOptional*. Last name.

middle_namestringOptional*. Middle name.

suffixstringOptional*. Name suffix.

prefixstringOptional*. Name prefix.


*At least one of the optional parameters needs to be included along with the formatted_name parameter.

org

object

Optional.

Contact organization information formatted as an org object. The object can contain the following fields:

companystringOptional. Name of the contact's company.

departmentstringOptional. Name of the contact's department.

titlestringOptional. Contact's business title.

phones

object

Optional.

Contact phone number(s) formatted as a phone object. The object can contain the following fields:

phonestringOptional. Automatically populated with the `wa_id` value as a formatted phone number.

typestringOptional. Standard Values are CELL, MAIN, IPHONE, HOME, and WORK.

wa_idstringOptional. WhatsApp ID.

urls

object

Optional.

Contact URL(s) formatted as a urls object. The object can contain the following fields:

urlstringOptional. URL.

typestringOptional. Standard values are HOME and WORK.

Objek Interaktif

NamaDeskripsi

action

objek

Wajib.

Tindakan yang Anda ingin pengguna lakukan setelah membaca pesan.

body

objek

Opsional untuk jenis product. Wajib untuk jenis pesan lainnya.

Objek dengan isi pesan.


Objek body berisi kolom berikut:

textstringWajib jika ada isinya. Konten pesan. Emoji dan markdown didukung. Panjang maksimal: 1.024 karakter.

footer

objek

Opsional. Objek dengan footer pesan.


Objek footer berisi kolom berikut:

textstringWajib jika ada footer. Konten footer. Emoji, markdown, dan tautan didukung. Panjang maksimal: 60 karakter.

header

objek

Wajib untuk jenis product_list. Opsional untuk jenis lain.

Konten header ditampilkan di atas pesan. Anda tidak dapat mengatur header jika objek interaktif Anda bertipe product. Lihat objek header untuk informasi selengkapnya.

type

objek

Wajib.

Jenis pesan interaktif yang ingin Anda kirim. Nilai yang didukung:


  • button: Gunakan untuk Tombol Balas.
  • catalog_message: Gunakan untuk Pesan Katalog.
  • list: Gunakan untuk Pesan Daftar.
  • product: Gunakan untuk Pesan Satu Produk.
  • product_list: Gunakan untuk Pesan Multiproduk.
  • flow: Gunakan untuk Pesan Alur.

Objek berikut bertumpuk di dalam objek interactive:

Objek Tindakan

NamaDeskripsi

button

string

Wajib untuk Pesan Daftar.

Konten tombol. Tidak boleh berupa string kosong dan harus unik dalam pesan. Emoji didukung, markdown tidak didukung.


Panjang maksimal: 20 karakter.

buttons

array objek

Wajib untuk Tombol Balas.

Objek tombol dapat berisi parameter berikut:


  • type: jenis yang didukung hanya reply (untuk Tombol Balas)
  • title: Judul tombol. Tidak boleh berupa string kosong dan harus unik dalam pesan. Emoji didukung, markdown tidak didukung. Panjang maksimal: 20 karakter.
  • id: Pengidentifikasi unik untuk tombol Anda. ID ini ditampilkan di Webhooks ketika tombol diklik oleh pengguna. Panjang maksimal: 256 karakter.

Anda dapat memiliki hingga 3 tombol. Anda tidak boleh memiliki spasi di depan atau di belakang saat mengatur ID.

catalog_id

string

Wajib untuk Pesan Satu Produk dan Pesan Multiproduk.

Pengidentifikasi unik katalog Facebook yang ditautkan ke Akun WhatsApp Business Anda. ID ini dapat diambil melalui Commerce Manager Meta.

product_retailer_id

string

Wajib untuk Pesan Satu Produk dan Pesan Multiproduk.

Pengidentifikasi unik dari produk di katalog.


Untuk mendapatkan ID ini buka Commerce Manager Meta dan pilih akun Meta Business Anda. Anda akan melihat daftar toko yang terhubung ke akun Anda. Klik toko yang ingin Anda gunakan. Di panel sisi kiri, klik Katalog > Items, dan cari item yang ingin Anda sebutkan. ID untuk produk tersebut ditampilkan di bagian nama produk.

sections

array objek

Wajib untuk Pesan Daftar dan Pesan Multiproduk.

Array objek section. Minimal 1, maksimal 10. Lihat objek section.

mode

string

Opsional untuk Pesan Alur.

Mode Alur saat ini, baik draft atau published.


Default: published

flow_message_version

string

Wajib untuk Pesan Alur.

Harus 3.

flow_token

string

Wajib untuk Pesan Alur.

Token yang dihasilkan oleh bisnis untuk berfungsi sebagai pengidentifikasi.

flow_id

string

Wajib untuk Pesan Alur.

Pengidentifikasi unik Alur yang disediakan oleh WhatsApp.

flow_cta

string

Wajib untuk Pesan Alur.

Teks pada tombol CTA, contohnya. "Mendaftar".


Panjang maksimum: 20 karakter (tanpa emoji).

flow_action

string

Opsional untuk Pesan Alur.

navigate atau data_exchange. Gunakan navigate untuk menentukan terlebih dahulu layar pertama sebagai bagian dari pesan. Gunakan data_exchange untuk kasus penggunaan lanjutan di mana layar pertama disediakan oleh endpoint Anda.


Default: navigate

flow_action_payload

objek

Opsional untuk Pesan Alur.

Diperlukan hanya jika flow_action adalah navigate. Objek dapat berisi parameter berikut:

screenstringWajib.id dari layar pertama Alur.

dataobjekOpsional. Input data untuk layar pertama Alur. Harus objek yang tidak kosong.

Objek Header

NamaDeskripsi

document

objek

Wajib jika type diatur ke document.

Berisi objek media untuk dokumen ini.

image

objek

Wajib jika type diatur ke image.

Berisi objek media untuk gambar ini.

text

string

Wajib jika type diatur ke text.

Teks untuk header. Pemformatan mengizinkan emoji, tetapi markdown tidak diizinkan.


Panjang maksimal: 60 karakter.

sub_text

string

Opsional.

Teks untuk header. Pemformatan mengizinkan emoji, tetapi markdown tidak diizinkan.


Panjang maksimal: 60 karakter.

type

string

Wajib.

Jenis header yang ingin Anda gunakan. Nilai yang didukung:


  • text: Digunakan untuk Pesan Daftar, Tombol Balas, dan Pesan Multiproduk.
  • video: Digunakan untuk Tombol Balas.
  • image: Digunakan untuk Tombol Balas.
  • document: Digunakan untuk Tombol Balas.

video

objek

Wajib jika type diatur ke video.

Berisi objek media untuk video ini.

Objek Bagian

NamaDeskripsi

product_items

array objek

Wajib untuk Pesan Multiproduk.

Array objek product. Minimal ada 1 produk per bagian dan maksimal 30 produk di seluruh bagian.


Tiap objek product berisi kolom berikut:


  • product_retailer_idstringWajib untuk Pesan Multiproduk. Pengidentifikasi unik dari produk di katalog. Untuk mendapatkan ID ini, buka Commerce Manager Meta, pilih akun Anda dan toko yang ingin Anda gunakan. Lalu, klik Katalog > Produk, dan temukan produk yang ingin Anda sebut. ID untuk produk tersebut ditampilkan di bagian nama produk.

rows

array objek

Wajib untuk Pesan Daftar.

Berisi daftar baris. Anda dapat memiliki total 10 baris di seluruh bagian Anda.


Setiap baris harus memiliki judul (Panjang maksimal: 24 karakter) dan ID (Panjang maksimal: 200 karakter). Anda dapat menambahkan deskripsi (Panjang maksimal: 72 karakter), tetapi ini opsional.


Contoh:

"rows": [
  {
   "id":"unique-row-identifier-here",
   "title": "row-title-content-here",
   "description": "row-description-content-here",           
   }
]

title

string

Wajib jika pesan memiliki lebih dari satu bagian.

Judul bagian.


Panjang maksimal: 24 karakter.

Objek Lokasi

NameDescription

latitude

Required.

Location latitude in decimal degrees.

longitude

Required.

Location longitude in decimal degrees.

name

Required.

Name of the location.

address

Required.

Address of the location.

Objek Media

Lihat Dapatkan ID Media untuk informasi tentang cara mendapatkan ID objek media Anda. Untuk informasi tentang jenis media yang didukung untuk Cloud API, lihat Jenis Media yang Didukung.

NameDescription

id

string

Required when type is audio, document, image, sticker, or video and you are not using a link.


The media object ID. Do not use this field when message type is set to text.

link

string

Required when type is audio, document, image, sticker, or video and you are not using an uploaded media ID (i.e. you are hosting the media asset on your public server).

The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs.


Do not use this field when message type is set to text.


Cloud API users only:


  • See Media HTTP Caching if you would like us to cache the media asset for future messages.
  • When we request the media asset from your server you must indicate the media's MIME type by including the Content-Type HTTP header. For example: Content-Type: video/mp4. See Supported Media Types for a list of supported media and their MIME types.

caption

string

Optional.


Media asset caption. Do not use with audio or sticker media.


On-Premises API users:

  • For v2.41.2 or newer, this field is is limited to 1024 characters.
  • Captions are currently not supported for document media.

filename

string

Optional.


Describes the filename for the specific document. Use only with document media.


The extension of the filename will specify what format the document is displayed as in WhatsApp.

provider

string

Optional. On-Premises API only.

This path is optionally used with a link when the HTTP/HTTPS link is not directly accessible and requires additional configurations like a bearer token. For information on configuring providers, see the Media Providers documentation.

Objek Template

NamaDeskripsi

namespace

Wajib.

Namespace template.


Dimulai dari v2.27.8, ini haruslah namespace yang terkait dengan akun WhatsApp Business yang memiliki nomor telepon yang terkait dengan klien API WhatsApp Business saat ini. Jika tidak, pesan akan gagal terkirim.

name

Wajib.

Nama template.

language

Wajib.

Menentukan bahasa template yang dapat di-render. Hanya kebijakan bahasa deterministic yang berfungsi dengan pesan template media. Lihat bagian Bahasa untuk informasi selengkapnya.

components

Opsional.

Array yang berisi parameter pesan.

Objek berikut bersarang di dalam objek template:

Objek Parameter Tombol

NamaDeskripsi (Klik panah di kolom kiri untuk opsi yang didukung.)

type

string

Wajib.

Menunjukkan jenis parameter untuk tombol.

Opsi yang Didukung

  • "payload"
  • "text"

payload

Wajib untuk quick_reply tombol.

Payload yang ditentukan developer yang ditampilkan ketika tombol diklik, selain teks tampilan pada tombol.


Lihat Panggilan balik dari Klik Tombol Balasan Cepat sebagai contohnya.

text

Wajib untuk tombol URL.

Akhiran yang disediakan developer yang ditambahkan ke URL awalan yang telah ditentukan sebelumnya di template.

Objek Komponen

NamaDeskripsi

type

Wajib.

Mendeskripsikan jenis component.
Nilai:header, body, footer

parameters

Opsional.

Array yang berisi konten pesan.

Objek Mata Uang

NamaDeskripsi

fallback_value

Wajib.

Teks default jika pelokalan gagal.

code

Wajib.

Kode mata uang seperti yang ditentukan dalam ISO 4217.

amount_1000

Wajib.

Jumlahnya dikalikan 1000.

Objek Tanggal_Waktu

NamaDeskripsi

fallback_value

Wajib.

Teks default. Untuk Cloud API, kami selalu menggunakan nilai fallback, dan kami tidak mencoba melokalisasi menggunakan kolom opsional lainnya.

Objek Parameter

NamaDeskripsi

type

string

Wajib.

Menjelaskan jenis parameter. Nilai yang didukung:


  • currency
  • date_time
  • document
  • image
  • text
  • video

Untuk template berbasis teks, satu-satunya jenis parameter yang didukung adalah currency, date_time, dan text.

text

string

Diperlukan saat type=text.

Teks pesan. Batas karakter bervariasi berdasarkan jenis komponen yang disertakan berikut ini.


Untuk jenis komponen header:

  • 60 karakter

Untuk jenis komponen body:

  • 1024 karakter jika tipe komponen lain disertakan
  • 32,768 karakter jika body adalah satu-satunya jenis komponen yang disertakan

currency

objek

Diperlukan saat type=currency.

Objek currency.

date_time

objek

Diperlukan saat type=date_time.

Objek date_time.

image

objek

Diperlukan saat type=image.

Objek media jenis image. Keterangan tidak didukung saat digunakan dalam template media.

document

objek

Diperlukan saat type=document.

Objek media jenis document. Hanya dokumen PDF yang didukung untuk template pesan berbasis media. Keterangan tidak didukung saat digunakan dalam template media.

video

objek

Diperlukan saat type=video.

Objek media jenis video. Keterangan tidak didukung saat digunakan dalam template media.

Objek Teks

NamaDeskripsi

body

string

Wajib untuk pesan teks.

Teks pesan teks yang dapat berisi URL yang dimulai dengan http:// atau https:// dan formatnya. Lihat opsi format yang tersedia di sini.


Jika Anda menyertakan URL dalam teks dan ingin menyertakan kotak pratinjau dalam pesan teks (preview_url: true), pastikan URL dimulai dengan http:// atau https://—URL https:// lebih baik. Anda harus memasukkan nama host, karena alamat IP tidak akan cocok.


Panjang maksimal: 4096 karakter

preview_url

boolean

Opsional. Khusus Cloud API.

Diatur ke true agar aplikasi WhatsApp Messenger dan WhatsApp Business mencoba merender pratinjau tautan URL di string teks body. URL harus dimulai dengan http:// atau https://. Jika ada beberapa URL di string teks body hanya URL pertama yang ditampilkan.


Jika preview_url dihilangkan, atau jika tidak dapat mengambil pratinjau, akan ditampilkan tautan yang dapat diklik.


Pengguna On-Premises API, gunakan preview_url di payload pesan tingkat atas sebagai gantinya. Lihat Parameter.

Objek Tanggapan

NamaDeskripsi

message_id

string

Wajib.

ID Pesan WhatsApp (wamid) dari pesan yang akan menampilkan tanggapan. Tanggapan tidak akan dikirim jika:


  • Pesannya lebih tua dari 30 hari
  • Pesan adalah pesan tanggapan
  • Pesan sudah dihapus

Jika ID adalah pesan yang telah dihapus, pesan tidak akan tersampaikan.

emoji

string

Wajib.

Emoji akan muncul di pesan.


  • Semua emoji yang didukung oleh perangkat Android dan iOS didukung.
  • Emoji hasil render didukung.
  • Jika menggunakan nilai unicode emoji, nilai harus dikodekan dengan Java- atau JavaScript-escape.
  • Hanya satu emoji yang dapat dikirim dalam pesan tanggapan
  • Gunakan string kosong untuk menghapus emoji yang dikirim sebelumnya.

Ringkasan

Panduan

Lihat panduan berikut untuk informasi lengkap tentang cara menggunakan endpoint /messages untuk mengirim pesan:

Contoh

Pesan Teks

curl -X  POST \
'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '
    {
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "PHONE_NUMBER",
      "type": "text",
      "text": { // the text object
        "preview_url": false,
        "body": "MESSAGE_CONTENT"
        }
    }'

Pesan Tanggapan

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "reaction",
  "reaction": {
    "message_id": "wamid.HBgLM...",
    "emoji": "\uD83D\uDE00"
  }
}'

Pesan Media

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM-PHONE-NUMBER-ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE-NUMBER",
  "type": "image",
  "image": {
    "id" : "MEDIA-OBJECT-ID"
  }
}'

Pesan Lokasi

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "location",
  "location": {
    "longitude": LONG_NUMBER,
    "latitude": LAT_NUMBER,
    "name": LOCATION_NAME,
    "address": LOCATION_ADDRESS
  }
}'

Pesan Kontak

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "contacts",
  "contacts": [{
      "addresses": [{
          "street": "STREET",
          "city": "CITY",
          "state": "STATE",
          "zip": "ZIP",
          "country": "COUNTRY",
          "country_code": "COUNTRY_CODE",
          "type": "HOME"
        },
        {
          "street": "STREET",
          "city": "CITY",
          "state": "STATE",
          "zip": "ZIP",
          "country": "COUNTRY",
          "country_code": "COUNTRY_CODE",
          "type": "WORK"
        }],
      "birthday": "YEAR_MONTH_DAY",
      "emails": [{
          "email": "EMAIL",
          "type": "WORK"
        },
        {
          "email": "EMAIL",
          "type": "HOME"
        }],
      "name": {
        "formatted_name": "NAME",
        "first_name": "FIRST_NAME",
        "last_name": "LAST_NAME",
        "middle_name": "MIDDLE_NAME",
        "suffix": "SUFFIX",
        "prefix": "PREFIX"
      },
      "org": {
        "company": "COMPANY",
        "department": "DEPARTMENT",
        "title": "TITLE"
      },
      "phones": [{
          "phone": "PHONE_NUMBER",
          "type": "HOME"
        },
        {
          "phone": "PHONE_NUMBER",
          "type": "WORK",
          "wa_id": "PHONE_OR_WA_ID"
        }],
      "urls": [{
          "url": "URL",
          "type": "WORK"
        },
        {
          "url": "URL",
          "type": "HOME"
        }]
    }]
}'

Pesan Interaktif

Pesan Satu Produk

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
   "messaging_product": "whatsapp",
   "recipient_type": "individual",
   "to": "PHONE_NUMBER",
   "type": "interactive",
   "interactive": {
     "type": "product",
     "body": {
       "text": "optional body text"
     },
     "footer": {
       "text": "optional footer text"
     },
     "action": {
       "catalog_id": "CATALOG_ID",
       "product_retailer_id": "ID_TEST_ITEM_1"
     }
   }
 }'

Pesan Multiproduk

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
 "messaging_product": "whatsapp",
   "recipient_type": "individual",
   "to": "PHONE_NUMBER",
   "type": "interactive",
   "interactive": {
     "type": "product_list",
     "header":{
       "type": "text",
       "text": "header-content"
     },
     "body": {
       "text": "body-content"
     },
     "footer": {
       "text": "footer-content"
     },
     "action": {
       "catalog_id": "CATALOG_ID",
       "sections": [
         {
           "title": "section-title",
           "product_items": [
             { "product_retailer_id": "product-SKU-in-catalog" },
             { "product_retailer_id": "product-SKU-in-catalog" },
             ...
           ]
         },
         {
           "title": "section-title",
           "product_items": [
             { "product_retailer_id": "product-SKU-in-catalog" },
             { "product_retailer_id": "product-SKU-in-catalog" },
             ...
           ]
         }
       ]
     }
   }
 }

Pesan Katalog

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive" : {
    "type" : "catalog_message",
    "body" : {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "catalog_message",
      "parameters": { 
        "thumbnail_product_retailer_id": "<Product-retailer-id>"
      }
    }
  }
}'

Pesan Alur

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive" : {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Flow message header"
    },
    "body": {
      "text": "Flow message body"
    },
    "footer": {
      "text": "Flow message footer"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s",
        "flow_id": "<FLOW_ID>",
        "flow_cta": "Book!",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "<SCREEN_ID>",
          "data": {
            "user_name": "name",
            "user_age": 25
          }
        }
      }
    }
  }
}'
  

Pesan Daftar

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "HEADER_TEXT"
    },
    "body": {
      "text": "BODY_TEXT"
    },
    "footer": {
      "text": "FOOTER_TEXT"
    },
    "action": {
      "button": "BUTTON_TEXT",
      "sections": [
        {
          "title": "SECTION_1_TITLE",
          "rows": [
            {
              "id": "SECTION_1_ROW_1_ID",
              "title": "SECTION_1_ROW_1_TITLE",
              "description": "SECTION_1_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_1_ROW_2_ID",
              "title": "SECTION_1_ROW_2_TITLE",
              "description": "SECTION_1_ROW_2_DESCRIPTION"
            }
          ]
        },
        {
          "title": "SECTION_2_TITLE",
          "rows": [
            {
              "id": "SECTION_2_ROW_1_ID",
              "title": "SECTION_2_ROW_1_TITLE",
              "description": "SECTION_2_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_2_ROW_2_ID",
              "title": "SECTION_2_ROW_2_TITLE",
              "description": "SECTION_2_ROW_2_DESCRIPTION"
            }
          ]
        }
      ]
    }
  }
}'

Tombol Balas

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "body": {
      "text": "BUTTON_TEXT"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_1",
            "title": "BUTTON_TITLE_1"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_2",
            "title": "BUTTON_TITLE_2"
          }
        }
      ]
    }
  }
}'

Pesan Template

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "template",
  "template": {
    "name": "TEMPLATE_NAME",
    "language": {
      "code": "LANGUAGE_AND_LOCALE_CODE"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "http(s)://URL"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "TEXT_STRING"
          },
          {
            "type": "currency",
            "currency": {
              "fallback_value": "VALUE",
              "code": "USD",
              "amount_1000": NUMBER
            }
          },
          {
            "type": "date_time",
            "date_time": {
              "fallback_value": "MONTH DAY, YEAR"
            }
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "0",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "1",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      }
    ]
  }
}'

Balas Pesan

curl -X POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "context": {
     "message_id": "MESSAGE_ID"
  },
  "to": "PHONE_NUMBER",
  "type": "text",
  "text": {
    "preview_url": false,
    "body": "your-text-message-content"
  }
}’

Tanggapan yang Berhasil

    {
      "messaging_product": "whatsapp",
      "contacts": [
        {
          "input": "16505555555",
          "wa_id": "16505555555"
        }
      ],
      "messages": [
        {
          "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
        }
      ]
    }
    

Applies to businesses in Brazil, Colombia, and Singapore, starting September 12, 2023. Applies to all businesses starting October 12, 2023.

Messages will have one of the following statuses which will be returned in each of the messages objects

  • "message_status":"accepted" : means the message was sent to the intended recipient
  • "message_status":"held_for_quality_assessment": means the message send was delayed until quality can be validated and it will either be sent or dropped at this point

      {
      "messaging_product": "whatsapp",
      "contacts": [
        {
          "input": "16505555555",
          "wa_id": "16505555555"
        }
      ],
      "messages": [
        {
          "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA",
          "message_status": "accepted",
        }
      ]
    }