Dokumen ini sudah diperbarui.
Terjemahan ke Bahasa Indonesia belum selesai.
Bahasa Inggris diperbarui: Kemarin

Mengirim Pesan

Anda dapat menggunakan API untuk mengirim jenis pesan berikut:

Semua jenis ini, kecuali pesan tanggapan, dapat ditetapkan sebagai balas.

Sintaksis Permintaan

Gunakan endpoint POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages untuk mengirim pesan ke pengguna WhatsApp:

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages

Isi Postingan

Semua permintaan pengiriman pesan menggunakan format objek induk generik berikut.

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<TO>",
  "type": "<TYPE>",
  
  /* TEXT MESSAGES ONLY */
  "text": {<TEXT>}

  /* REACTION MESSAGES ONLY */
  "reaction": {<REACTION>}

  /* MEDIA MESSAGES ONLY. FOR EXAMPLE, FOR IMAGE MEDIA: */
  "image": {<IMAGE>}

  /* LOCATION MESSAGES ONLY */
  "location": {<LOCATION>}

  /* CONTACTS MESSAGES ONLY */
  "contacts": {<CONTACTS>}

  /* INTERACTIVE MESSAGES ONLY */
  "interactive": {<INTERACTIVE>}

  /* TEMPLATE MESSAGES ONLY */
  "template": {<TEMPLATE>}

}

Parameter Isi Postingan

PlaceholderDeskripsiContoh Nilai

<TO>

String

ID WhatsApp atau nomor telepon pelanggan yang menjadi tujuan pengiriman pesan. Lihat Format Nomor Telepon

+16315551234

<TYPE>

String

Menunjukkan jenis pesan.

text

<TEXT>

Objek

Konten pesan teks.

Lihat Pesan Teks.

<REACTION>

Objek

Konten pesan tanggapan.

Lihat Pesan Tanggapan.

<IMAGE>

Objek

Konten pesan media. Nama properti harus cocok dengan jenis pesan media yang Anda kirim (image untuk pesan gambar, video untuk pesan video, dsb.).

Lihat Pesan Media.

<LOCATION>

Objek

Konten pesan lokasi.

Lihat Pesan Lokasi.

<CONTACTS>

Objek

Konten pesan kontak.

Lihat Pesan Kontak.

<INTERACTIVE>

Objek

Konten pesan interaktif.

Lihat Pesan Interaktif.

Contoh dalam dokumen ini menjelaskan persyaratan payload isi postingan untuk setiap jenis pesan.

Sintaksis Tanggapan

Setelah berhasil, API akan menanggapi dengan:

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "<WHATSAPP_USER_PHONE_NUMBER>",
      "wa_id": "<WHATSAPP_USER_ID>"
    }
  ],
  "messages": [
    {
      "id": "<WHATSAPP_MESSAGE_ID>"
    }
  ]
}

Parameter Tanggapan

PlaceholderDescriptionSample Value

<WHATSAPP_USER_PHONE_NUMBER>

String

WhatsApp user's WhatsApp phone number. May not match wa_id value.

+16505551234

<WHATSAPP_USER_ID>

String

WhatsApp user's WhatsApp ID. May not match input value.

16505551234

<WHATSAPP_MESSAGE_ID>

String

WhatsApp Message ID.


This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks.

wamid.HBgLMTY0NjcwNDM1OTUVAgARGBI4MjZGRDA0OUE2OTQ3RkEyMzcA

Phone Number Formats

Plus signs (+), hyphens (-), parenthesis ((,)), and spaces are supported in send message requests.

We highly recommend that you include both the plus sign and country calling code when sending a message to a customer. If the plus sign is omitted, your business phone number's country calling code is prepended to the customer's phone number. This can result in undelivered or misdelivered messages.

For example, if your business is in India (country calling code 91) and you send a message to the following customer phone number in various formats:

Number In Send Message RequestNumber Message Delivered ToOutcome

+16315551234

+16315551234

Correct number

+1 (631) 555-1234

+16315551234

Correct number

(631) 555-1234

+916315551234

Potentially wrong number

1 (631) 555-1234

+9116315551234

Potentially wrong number

Pesan Teks

Pesan teks adalah pesan yang hanya berisi isi teks dan pratinjau tautan opsional.

Pesan Tanggapan

Pesan tanggapan adalah tanggapan emoji yang dapat Anda terapkan pada pesan pengguna WhatsApp sebelumnya yang telah Anda terima.

Pesan Media

Anda dapat mengirim pesan audio, dokumen, gambar, stiker, dan video ke pengguna WhatsApp.

Pesan Audio

Pesan audio menampilkan ikon audio dan tautan ke file audio. Saat pengguna WhatsApp mengetuk ikon, klien WhatsApp memuat dan memutar file audio.

Pesan Dokumen

Pesan dokumen adalah pesan yang menampilkan ikon dokumen, yang ditautkan ke sebuah dokumen, yang dapat diketuk oleh pengguna WhatsApp untuk diunduh.

Pesan Gambar

Contoh, inilah pesan gambar dengan keterangan opsional yang disertakan:

Pesan Stiker

Pesan stiker menampilkan gambar stiker animasi atau statis dalam pesan WhatsApp.

Pesan Video

Pesan video menampilkan pratinjau gambar mini dari gambar video dengan keterangan opsional. Saat pengguna WhatsApp mengetuk pratinjau, video akan dimuat video dan ditampilkan ke pengguna.

Aset Media

Aset media harus diunggah ke nomor telepon bisnis yang akan mengirim pesan, atau Anda harus menghosting aset di server publik dan menyertakan URL-nya ke dalam permintaan pengiriman pesan.

Untuk mengurangi kemungkinan kesalahan dan menghindari permintaan yang tidak perlu ke server publik Anda, sebaiknya unggah aset media Anda dan gunakan ID-nya saat mengirim pesan.

Caching HTTP Media

WhatsApp Cloud API mendukung caching HTTP media. Jika Anda menggunakan tautan (link) ke aset media di server Anda (bukan menggunakan ID (id) dari aset yang telah Anda unggah ke server kami), Anda dapat menginstruksikan kami untuk menyimpan cache aset Anda untuk digunakan kembali dengan pesan di masa mendatang dengan memasukkan header di bawah dalam tanggapan server Anda saat kami meminta aset. Jika tidak ada satu pun dari header ini yang disertakan, kami tidak akan melakukan cache aset Anda.

Cache-Control: <CACHE_CONTROL>
Last-Modified: <LAST_MODIFIED>
ETag: <ETAG>

Cache-Control

Header Cache-Control memberi tahu kami cara menangani caching aset. Kami mendukung arahan berikut:

  • max-age=n: Menunjukkan jumlah detik (n) untuk melakukan cache aset. Kami akan menggunakan kembali cache aset dalam pesan berikutnya sampai waktu ini terlampaui, setelah itu kami akan meminta aset lagi, jika diperlukan. Contoh: Cache-Control: max-age=604800.
  • no-cache: Menunjukkan aset dapat di-cache, tetapi harus diperbarui jika nilai Last-Modified berbeda dari tanggapan sebelumnya. Memerlukan header Last-Modified. Contoh: Cache-Control: no-cache.
  • no-store: Menunjukkan bahwa aset tidak boleh di-cache. Contoh: Cache-Control: no-store.
  • private: Menunjukkan bahwa aset dipersonalisasi untuk penerima dan tidak boleh di-cache.

Last-Modified

Menunjukkan kapan aset tersebut terakhir kali diubah. Digunakan dengan Cache-Control: no-cache. Jika nilai Last-Modified berbeda dari tanggapan sebelumnya dan Cache-Control: no-cache disertakan dalam tanggapan, kami akan memperbarui versi cache aset kami dengan aset dalam tanggapan. Contoh: Date: Tue, 22 Feb 2022 22:22:22 GMT.

ETag

Header ETag adalah string unik yang mengidentifikasi versi tertentu dari sebuah aset. Contoh: ETag: "33a64df5". Header ini diabaikan kecuali header Cache-Control dan Last-Modified-keduanya tidak disertakan dalam tanggapan. Dalam hal ini, kami akan melakukan cache aset sesuai dengan logika internal kami sendiri (yang tidak kami ungkapkan).

Contoh Tanggapan dengan Header

HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
ETag: "33a64df5"
Cache-Control: max-age=604800

<IMAGE_PAYLOAD>

Pesan Lokasi

Pesan lokasi memungkinkan Anda mengirim koordinat lintang dan bujur suatu lokasi ke pengguna WhatsApp.

Pesan Kontak

Untuk mengirim pesan kontak, buat panggilan POST ke /PHONE_NUMBER_ID/messages dan lampirkan objek message dengan type=contact. Lalu, tambahkan objek contacts.

Contoh permintaan:

curl -X  POST \
 'https://graph.facebook.com/v19.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"
        }]
    }]
}'

Tanggapan yang berhasil mencakup objek dengan pengidentifikasi berawalan wamid. Gunakan ID yang terdaftar setelah wamid untuk melacak status pesan Anda.

{
  "messaging_product": "whatsapp",
  "contacts": [{
      "input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID",
    }]
  "messages": [{
      "id": "wamid.ID",
    }]
}

Pesan Interaktif

Pesan interaktif mencakup pesan daftar, tombol balas, tombol URL ajakan bertindak, dan pesan Flows. Untuk mengirim pesan interaktif, buat panggilan POST ke /PHONE_NUMBER_ID/messages dan lampirkan objek pesan dengan type=interactive. Lalu, tambahkan objekinteractive.

Pesan Daftar Interaktif

Pesan daftar interaktif memungkinkan Anda untuk menyajikan daftar opsi kepada pengguna WhatsApp untuk dipilih.

Pesan Permintaan Lokasi Interaktif

Pesan permintaan lokasi menampilkan teks isi dan tombol kirim lokasi. Saat pengguna WhatsApp mengetuk tombol, layar berbagi lokasi muncul yang dapat digunakan oleh pengguna untuk berbagi lokasi mereka.

Pesan Tombol Balasan Interaktif

Pesan tombol balasan interaktif memungkinkan Anda untuk mengirim hingga tiga balasan yang sudah ditentukan sebelumnya untuk dipilih oleh pengguna.

Tombol URL Ajakan Bertindak Interaktif

Pelanggan Anda mungkin ragu-ragu untuk mengetuk URL mentah yang berisi string panjang atau tidak jelas dalam pesan teks. Dalam situasi ini, Anda mungkin ingin mengirim pesan interaktif dengan teks isi dan tombol URL ajakan bertindak (CTA).

Tombol URL CTA memungkinkan Anda untuk memetakan URL apa pun ke tombol sehingga Anda tidak perlu menyertakan URL mentah di body pesan interaktif.

Sintaksis Permintaan

POST /<BUSINESS_PHONE_NUMBER_ID>/messages

Isi Postingan

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<CUSTOMER_PHONE_NUMBER>",
  "type": "interactive",
  "interactive": {
    "type": "cta_url",

    /* Header optional */
    "header": {
      "type": "text",
      "text": "<HEADER_TEXT>"
    },

    /* Body optional */
    "body": {
      "text": "<BODY_TEXT>"
    },

    /* Footer optional */
    "footer": {
      "text": "<FOOTER_TEXT>"
    },
    "action": {
      "name": "cta_url",
      "parameters": {
        "display_text": "<BUTTON_TEXT>",
        "url": "<BUTTON_URL>"
      }
    }
  }
}

Properti Isi


PlaceholderDeskripsiContoh Nilai

<CUSTOMER_PHONE_NUMBER>

String

Wajib.


ID WhatsApp atau nomor telepon pelanggan yang dikirimi pesan. Lihat Format Nomor Telepon.

+15558543153

<HEADER_TEXT>

String

Opsional.


Teks header.

Available Dates

<BODY_TEXT>

String

Wajib.


Teks body pesan.

Tap the button below to see available dates.

<FOOTER_TEXT>

String

Opsional.


Teks footer pesan.

Dates subject to change.

<BUTTON_TEXT>

String

Wajib.


Teks tombol.

See Dates

<BUTTON_URL>

String

Wajib.


URL yang akan dimuat di browser web standar perangkat saat diketuk oleh pengguna WhatsApp.

https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4

Contoh Permintaan

curl 'https://graph.facebook.com/v19.0/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '{
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "+16505555555",
    "type": "interactive",
    "interactive": {
        "type": "cta_url",
        "header": {
            "text": "Available Dates"
        },
        "body": {
            "text": "Tap the button below to see available dates."
        },
        "footer": {
            "text": "Dates subject to change."
        },
        "action": {
            "name": "cta_url",
            "parameters": {
                "display_text": "See Dates",
                "url": "https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4"
            }
        }
    }
}'

Contoh Tanggapan

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

Pesan Flows

Setelah membuat WhatsApp Flow, Anda dapat mengirimkannya. Untuk mengirim pesan dengan flow, kami telah memperkenalkan jenis baru Objek Interaktif yang disebut flow. Berikut ini adalah properti Objek Interaktif yang spesifik untuk flow:

Properti Jenis Deskripsi

interactive.type

String

Nilai harus flow

interactive.action.name

String

Nilai harus flow

interactive.action.parameters.mode

String

Flow dapat dalam mode draft atau published. published adalah nilai default untuk kolom ini.

interactive.action.parameters.flow_message_version

String

Nilai harus 3.

interactive.action.parameters.flow_token

String

Token Flow yang dihasilkan oleh bisnis untuk berfungsi sebagai pengidentifikasi.

interactive.action.parameters.flow_id

String

ID unik Flow yang disediakan oleh WhatsApp.

interactive.action.parameters.flow_cta

String

Teks pada tombol CTA. Contoh: "Daftar"

Batas karakter - 20 karakter (tanpa emoji).

interactive.action.parameters.flow_action

String

navigate atau data_exchange. Nilai default adalah navigate

interactive.action.parameters.flow_action_payload

String

Wajib jika flow_action adalah navigate. Jika tidak, jangan disertakan.

interactive.action.parameters.flow_action_payload.screen

String

id layar pertama.

interactive.action.parameters.flow_action_payload.data

String

Opsional. Data input untuk layar pertama Flow. Tidak boleh berupa objek kosong.

Contoh Permintaan

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "recipient_type": "individual",
  "messaging_product": "whatsapp",
  "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": "1",
        "flow_cta": "Book!",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "<SCREEN_NAME>",
          "data": { 
            "product_name": "name",
            "product_description": "description",
            "product_price": 100
          }
        }
      }
    }
  }
}'

Contoh Tanggapan

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "Input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID"
    }
  ],
  "messages": [
    {
      "id": "wamid.ID"
    }
  ]
}

Balasan

Anda dapat mengirim pesan apa pun sebagai balasan ke pesan sebelumnya dalam percakapan dengan memasukkan ID pesan sebelumnya dalam objek context. Penerima akan menerima pesan baru bersama dengan gelembung kontekstual yang menampilkan konten pesan sebelumnya.

Penerima tidak akan melihat gelembung kontekstual jika:

  • membalas dengan pesan template ("type":"template")
  • membalas dengan gambar, video, PTT, atau audio, dan penerima ada di KaiOS

Ini adalah bug yang diketahui yang sedang kami tangani.

Contoh permintaan:

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -d '{
   "messaging_product": "whatsapp",
   "context": {
     "message_id": "MESSAGE_ID"
   },
   "to": "<phone number> or <wa_id>",
   "type": "text",
   "text": {
     "preview_url": False,
     "body": "your-text-message-content"
   }
 }'

Tanggapan yang berhasil menyertakan objek dengan pengidentifikasi prefiks dengan wamid. Gunakan ID yang tercantum setelah wamid untuk melacak status pesan Anda.

Catatan: jika pesan sebelumnya lebih dari 30 hari atau tidak sesuai dengan pesan apa pun dalam percakapan, pesan akan dikirim secara normal, bukan sebagai balasan.

Contoh tanggapan:

{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "PHONE_NUMBER",
    "wa_id": "WHATSAPP_ID",
  }]
  "messages": [{
    "id": "wamid.ID",
  }]
}

Pesan Alamat

Fitur ini hanya tersedia untuk bisnis yang berkantor di Singapura dan pelanggannya di Singapura, serta bisnis yang berkantor di India dan pelanggannya di India.

Pesan alamat memberikan pengguna Anda cara yang lebih sederhana untuk membagikan alamat pengiriman dengan bisnis di WhatsApp.

Pesan alamat adalah pesan interaktif yang berisi 4 bagian utama: header, body, footer, dan action. Di dalam komponen tindakan, bisnis menentukan nama “address_message” dan parameter yang relevan.

Saat ini pesan alamat didukung di dua negara berikut: India dan Singapura. Tabel di bawah ini menjelaskan kolom apa yang didukung di negara mana secara spesifik.

Nama Kolom Label Tampilan Jenis Input Negara yang Didukung Batasan

name

Nama

teks

India, Singapura

Tidak Ada

phone_number

Nomor Telepon

tel

India, Singapura

Hanya nomor telepon yang valid

in_pin_code

Kode PIN

teks

India

Panjang maksimum: 6

sg_post_code

Kode Pos

angka

Singapura

Panjang maksimal: 6

house_number

Nomor Flat/Rumah

teks

India

Tidak Ada

floor_number

Nomor Lantai

teks

India

Tidak Ada

tower_number

Nomor Menara

teks

India

Tidak Ada

building_name

Nama Bangunan/Apartemen

teks

India

Tidak Ada

address

Alamat

teks

India, Singapura

Tidak Ada

landmark_area

Landmark/Area

teks

India

Tidak Ada

unit_number

Nomor unit

teks

Singapura

Tidak Ada

city

Kota

teks

India, Singapura

Tidak Ada

state

Negara Bagian

teks

India

Tidak Ada

Contoh panggilan API

Ini adalah contoh panggilan API untuk pesan alamat. Atribut country adalah kolom wajib dalam parameter tindakan. Jika tidak disertakan, akan ada kesalahan validasi.

curl -X  POST \
'https://graph.facebook.com/v15.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": "address_message",
              "body": {
                   "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
              },
              "action": {
                   "name": "address_message",
                   "parameters": {
                      "country" :"COUNTRY_ISO_CODE"
                   }
              }
          }
    }' 

Penanganan Kesalahan

Jika kode area nomor telepon untuk negara tertentu tidak benar, bisnis tidak akan dapat meminta pesan alamat dari penerima. Contoh: bisnis tidak akan dapat meminta pesan alamat dari penerima dengan negara "Singapura" tetapi nomor teleponnya berkode area "91".

Pesan alamat tidak akan mengizinkan melewati secara bersamaan kolom-kolom yang bertentangan. Contoh: Anda tidak dapat melewati sg_post_code saat country diatur ke “IN”.

Setelah pesan alamat dikirimkan, bisnis menunggu pengguna untuk mengisi alamat dan mengirimkannya kembali. Alamat yang dimasukkan pengguna dibagikan melalui Webhooks yang terdaftar di proses pengaturan.

Langkah-Langkah Pesan Alamat

Langkah-langkah yang terlibat dalam Pesan Alamat adalah sebagai berikut:

  1. Bisnis mengirimkan pesan alamat dengan nama tindakan address_message kepada pengguna
  2. Pengguna berinteraksi dengan pesan dengan mengeklik CTA, yang menampilkan layar Pesan Alamat. Pengguna mengisi alamatnya dan mengirimkan formulir
  3. Setelah formulir pesan alamat dikirimkan oleh pengguna, partner menerima notifikasi Webhooks, yang berisi detail alamat yang dikirimkan oleh pengguna
Contoh Pesan Alamat India
Contoh Pesan Alamat Singapura

Diagram urutan berikut menunjukkan alur integrasi biasanya untuk pesan alamat.

Parameter Tindakan Tambahan

Bisnis dapat melewati atribut tambahan seperti values, validation_errors, atau saved_addresses sebagai bagian dari parameter tindakan interaktif. Anda dapat menemukan informasi tentang setiap penggunaannya di bawah ini.

Parameter Tindakan Penggunaan

values

Bisnis terlebih dahulu mengisi untuk kolom alamat (misalnya: terlebih dahulu mengisi kolom alamat kota dengan “Singapura”)

saved_addresses

Untuk bisnis, mereka dapat melewati alamat yang disimpan sebelumnya terkait dengan pengguna.

Pengguna akan disajikan dengan opsi untuk memilih alamat tersimpan dan bukan mengisinya secara manual

validation_errors

Bisnis dapat melemparkan kesalahan di kolom alamat dan WhatsApp akan mencegah pengguna agar tidak mengirimkan alamat sampai masalah terselesaikan.

Mengirim Pesan Alamat kepada Pengguna

Buat panggilan POST ke /PHONE_NUMBER_ID/messages menggunakan API WhatsApp untuk mengirim pesan alamat dienkripsi end-to-end kepada pengguna:

curl -X  POST \
'https://graph.facebook.com/v15.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": "address_message",
                 "body": {
                       "text": "Thanks for your order! Tell us what address you’d like this order delivered 
                        to."
                 },
                "action": {
                      "name": "address_message",
                      "parameters": "JSON Payload"
                 }
            }
     }'

Untuk mengirim pesan alamat tanpa alamat tersimpan, WhatsApp akan meminta pengguna atau bisnis untuk memasukkan alamat baru di formulir alamat.

India

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "+91xxxxxxxxxx",
      "type": "interactive",
      "interactive": {
        "type": "address_message",
        "body": {
          "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
        },
        "action": {
          "name": "address_message",
          "parameters": {
              "country": "IN",
              "values": {
                 "name": "CUSTOMER_NAME",
                 "phone_number": "+91xxxxxxxxxx"
              }
           }
        }
      }
   }'

Singapura

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "+65xxxxxxxxxx",
      "type": "interactive",
      "interactive": {
        "type": "address_message",
        "body": {
          "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
        },
        "action": {
          "name": "address_message",
          "parameters": {
              "country": "SG",
              "values": {
                  "name": "CUSTOMER_NAME",
                  "phone_number": "+65xxxxxxxxxx"
              }
           }
        }
      }
   }'

Untuk mengirim pesan alamat dengan alamat tersimpan, WhatsApp akan meminta pengguna atau bisnis untuk memilih dari alamat tersimpan atau menambahkan opsi alamat. Pengguna dapat mengabaikan alamat tersimpan dan memasukkan alamat baru.

India

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "91xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
          "country": "IN",
          "saved_addresses": [
             {
                 "id": "address1",
                 "value": {
                    "name": "CUSTOMER_NAME",
                    "phone_number": "+91xxxxxxxxxx",
                    "in_pin_code": "400063",
                    "floor_number": "8",
                    "building_name": "",
                    "address": "Wing A, Cello Triumph,IB Patel Rd",
                    "landmark_area": "Goregaon",
                    "city": "Mumbai"
                 }
             }
          ]
       }
    }
  }
}'

Singapura

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+65xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
         "country": "SG",
         "values": {
             "name": "CUSTOMER_NAME",
             "phone_number": "+65xxxxxxxxxx"
         },
         "saved_addresses": [
            {
                "id": "address1",
                "value": {
                   "name": "CUSTOMER_NAME",
                   "phone_number": "+65xxxxxxxxxx",
                   "sg_post_code": "018937",
                   "address": "9 Straits View, Marina One West Tower",
                   "unit_number": "Suite 29-00",
                   "city": "Singapore"
                }
            }
         ]
      }
    }
  }
}'

Memeriksa Tanggapan Anda

Tanggapan yang berhasil mengandung objek messages dengan pengidentifikasi untuk pesan yang baru dibuat.

{
  "messaging_product": "whatsapp",
  "contacts": [{
      "input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID",
    }]
  "messages": [{
      "id": "wamid.ID",
    }]
}

Tanggapan yang gagal akan berisi pesan kesalahan. Lihat Kode Kesalahan dan Status untuk informasi selengkapnya.

Mengirim Pesan Alamat dengan Kesalahan Validasi

Pesan alamat harus dikirim ulang kepada pengguna jika terjadi kesalahan validasi pada server bisnis. Bisnis harus mengirim kembali set nilai yang telah dimasukkan oleh pengguna, bersama dengan kesalahan validasi masing-masing untuk setiap kolom yang tidak valid, seperti yang ditunjukkan pada contoh payload di bawah ini.

India

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "91xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
          "country": "IN",
          "values": {
             "name": "CUSTOMER_NAME",
             "phone_number": "+91xxxxxxxxxx",
             "in_pin_code": "666666",
             "address": "Some other location",
             "city": "Delhi"
          },
          "validation_errors": {
             "in_pin_code": "We could not locate this pin code."
          }
       }
    }
  }
}'

Singapura

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "12065550107",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
           "country": "SG",
           "values": {
              "name": "CUSTOMER_NAME",
              "phone_number": "+65xxxxxxxxxx",
              "sg_post_code": "666666",
              "address": "Some other location",
              "city": "Singapore"
           },
           "validation_errors": {
              "sg_post_code": "We could not locate this pin code."
           }
        }
     }
  }
}'

Menerima Notifikasi untuk Pengajuan Alamat

Bisnis akan menerima notifikasi pengajuan alamat melalui Webhooks, seperti yang ditunjukkan di bawah ini.

{
    "messages": [
        {
           "id": "gBGGFlAwCWFvAgmrzrKijase8yA",
           "from": "PHONE_NUMBER",
           "Interactive": {
               "type":  "nfm_reply",
               "action":  "address_message",
               "nfm_reply": {
                   "name": "address_message",
                    "response_json": “<response_json from client>”,
                    "body": “<body text from client>”,
            }
           "timestamp": "1670394125",
           "type": "interactive"  
        }
    ]
}

Notifikasi Webhooks memiliki nilai-nilai berikut.

Nama Kolom Jenis Deskripsi

interactive

Objek

Menyimpan tanggapan dari klien

type

String

Akan berupa nfm_reply yang menunjukkan bahwa itu adalah Native Flow Response (NFM) dari klien

nfm_reply

Objek

Menyimpan data yang diterima dari klien

response_json

String

Nilai kolom alamat yang diisi oleh pengguna dalam format JSON yang selalu ada

body (Opsional)

String

Teks isi dari klien, apa yang dilihat pengguna

name (Opsional)

String

Akan berupa address_message yang menunjukkan jenis tanggapan tindakan NFM dari klien

Balasan pesan alamat sebagai jenis tanggapan NFM untuk permintaan pesan alamat di India ditampilkan di bawah ini.

{
   "messages": [
      {
          "context": {
	  "from": "FROM_PHONE_NUMBER_ID",
	  "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgARGBI3NjNFN0U5QzMzNDlCQjY0M0QA"
           },
          "from": "PHONE_NUMBER",
         "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgASGCA5RDhBNENEMEQ3RENEOEEzMEI0RUExRDczN0I1NThFQwA=",
         "timestamp": "1671498855",
         "type": "interactive",
         "interactive": {
	 "type": "nfm_reply",
	"nfm_reply": {
	      "response_json": "{\"saved_address_id\":\"address1\",\"values\":{\"in_pin_code\":\"400063\",\"building_name\":\"\",\"landmark_area\":\"Goregaon\",\"address\":\"Wing A, Cello Triumph, IB Patel Rd\",\"city\":\"Mumbai\",\"name\":\"CUSTOMER_NAME\",\"phone_number\":\"+91xxxxxxxxxx\",\"floor_number\":\"8\"}}",
                    "body": "CUSTOMER_NAME\n +91xxxxxxxxxx\n 400063, Goregaon, Wing A, Cello Triumph,IB Patel Rd, Mumbai, 8",
                    "name": "address_message"
                }
            }
        }
    ]
}

Fitur Tidak Didukung

Jika klien tidak mendukung address_message, pesan secara diam-diam akan gagal dan pesan kesalahan akan dikirimkan kembali kepada bisnis dalam Webhooks. Notifikasi Webhooks yang akan dikirim kembali ditunjukkan di bawah ini:

{
  "statuses": [
    {
      "errors": [
        {
          "code": 1026,
          "href": "https://developers.facebook.com/docs/whatsapp/api/errors/",
          "title": "Receiver Incapable"
        }
      ],
      "id": "gBGGFlAwCWFvAgkyHMGKnRu4JeA",
      "message": {
        "recipient_id": "+91xxxxxxxxxx"
      },
      "recipient_id": "91xxxxxxxxxx",
      "status": "failed",
      "timestamp": "1670394125",
      "type": "message"
    }
  ]
}

Pesan Template

Lihat Pesan Template.

Urutan Pengiriman Beberapa Pesan

Saat mengirim serangkaian pesan, urutan penyampaian tidak dijamin sesuai dengan urutan permintaan API Anda. Jika Anda perlu memastikan urutan pengiriman pesan, konfirmasikan tanda terima status delivered dalam webhook pesan sebelum mengirim pesan berikutnya dalam urutan pesan Anda.

Pemecahan Masalah

Jika Anda mengalami masalah dengan pengiriman pesan, lihat Pesan Tidak Tersampaikan.