We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
Template digunakan saat mengirim pesan template dengan Cloud API yang di-hosting oleh Meta atau API di Tempat. Cloud API meninjau template dan parameter variabel menggunakan pembelajaran mesin untuk melindungi keamanan dan integritas layanan Cloud API. Ketika Cloud API meninjau template dan teks variabel, tidak ada informasi yang dibagikan dengan WhatsApp.
Template ini dapat dibuat menggunakan API Pengelolaan Bisnis atau Pengelola WhatsApp Business. Jumlah template yang dapat dimiliki Akun WhatsApp Business ditentukan oleh bisnis induk. Jika bisnis induk tidak terverifikasi, masing-masing Akun WhatsApp Business dibatasi hingga 250 template. Namun, jika bisnis induk terverifikasi dan setidaknya satu dari Akun WhatsApp Business-nya memiliki nomor telepon bisnis dengan nama tampilan yang disetujui, masing-masing Akun WhatsApp Business dapat memiliki hingga 6.000 template.
Anda memerlukan:
Anda dapat menambahkan template pesan dalam bahasa tertentu saat membuat template. Template ini diperhitungkan terhadap batasan Anda. Konsistenlah saat memberikan terjemahan. Lihat artikel pusat bantuan Mengapa saya melihat kesalahan 'struktur tidak tersedia' dalam panggilan balik saya? untuk informasi selengkapnya.
Kirim permintaan POST ke endpoint Akun WhatsApp Business > Template Pesan untuk membuat template.
POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates
{ "name": "<NAME>", "category": "<CATEGORY>", "allow_category_change": <ALLOW_CATEGORY_CHANGE>, "language": "<LANGUAGE>", "components": [<COMPONENTS>] }
Placeholder | Deskripsi | Contoh Nilai |
---|---|---|
String | Wajib. Nama template. Maksimal 512 karakter. |
|
Enum | Wajib. Kategori template. Lihat Kategori Template di bawah. |
|
Boolean | Opsional. Atur ke true untuk mengizinkan kami menetapkan kategori secara otomatis. Jika diabaikan, template dapat ditolak karena salah kategori. |
|
Enum | Wajib. Template bahasa dan kode locale. |
|
String | Opsional. Nama yang tepat dari template Galeri Template Utilitas. Pelajari cara membuat template menggunakan Galeri Template Utilitas |
|
Array objek | Wajib. Komponen yang membentuk template. Lihat Komponen Template di bawah. | Lihat Komponen Template di bawah. |
Placeholder | Deskripsi | Contoh Nilai |
---|---|---|
Objek JSON | Opsional. Data opsional selama pembuatan template dari Galeri Template. Ini adalah kolom opsional untuk komponen tombol. Catatan: Untuk template utilitas yang berisi tombol, properti ini tidak bersifat opsional. |
|
enum | Jenis tombol QUICK_REPLY, URL, PHONE_NUMBER, OTP, MPM, CATALOG, FLOW, VOICE_CALL, APP Wajib |
|
String | Nomor telepon untuk tombol. Opsional |
|
Objek JSON | Lihat parameter URL objek JSON Opsional | |
boolean | Apakah ketentuan zero tap diterima oleh pengguna atau tidak. Opsional |
|
enum | Jenis OTP. COPY_CODE, ONE_TAP, ZERO_TAP Opsional |
|
Array Objek JSON | Lihat parameter Aplikasi yang Didukung objek JSON Opsional |
Placeholder | Deskripsi | Contoh Nilai |
---|---|---|
Objek JSON | Opsional. Data opsional selama pembuatan template dari Galeri Template. Ini adalah kolom opsional untuk komponen tombol. | |
boolean | Nilai boolean untuk menambahkan informasi ke template tentang menghubungi bisnis di nomor telepon mereka. Opsional |
|
boolean | Nilai boolean untuk menambahkan informasi ke template tentang mempelajari informasi selengkapnya dengan tautan url. Tidak tersedia secara luas dan akan diabaikan jika tidak tersedia. Opsional |
|
boolean | Nilai boolean untuk menambahkan informasi ke template tentang tidak berbagi kode autentikasi dengan siapa pun. Opsional |
|
boolean | Nilai boolean untuk menambahkan informasi ke template untuk melacak paket pengiriman. Tidak tersedia secara luas dan akan diabaikan jika tidak tersedia. Opsional |
|
int64 | Nilai bilangan bulat untuk menambahkan informasi ke template tentang kapan kode akan kedaluwarsa. Opsional |
|
Template harus dikategorikan sebagai salah satu kategori berikut. Kategori difaktorkan ke harga dan kategori yang Anda pilih akan divalidasi pada saat pembuatan template.
AUTHENTICATION
MARKETING
UTILITY
Lihat dokumenKategorisasi Template kami untuk menentukan kategori mana yang akan digunakan saat membuat template.
Template terdiri dari berbagai teks, media, dan komponen interaktif, berdasarkan kebutuhan bisnis Anda. Lihat dokumen Komponen Template untuk mengetahui daftar semua komponen yang mungkin dan persyaratannya serta sampel dan contoh kueri.
Saat membuat template, definisikan komponennya dengan menetapkan array objek komponen ke properti komponen di body permintaan.
Contoh: berikut adalah array yang berisi komponen body teks dengan dua variabel dan contoh nilai, komponen tombol nomor telepon, dan komponen tombol URL:
[ { "type": "BODY", "text": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!", "example": { "body_text": [ [ "Pablo","860198-230332" ] ] } }, { "type": "BUTTONS", "buttons": [ { "type": "PHONE_NUMBER", "text": "Call", "phone_number": "15550051310" }, { "type": "URL", "text": "Contact Support", "url": "https://www.luckyshrub.com/support" } ] } ]
Lihat dokumen Komponen Template untuk mengetahui daftar semua komponen yang mungkin dan persyaratannya serta sampel dan contoh kueri.
Perhatikan bahwa template dengan kategori AUTHENTICATION
memiliki persyaratan komponen yang unik. Lihat Template Autentikasi.
Saat Anda mengirim permintaan pembuatan template, kami segera memvalidasi kategori menggunakan panduan kategorisasi template kami.
status
ke PENDING
. Lalu template akan menjalani tinjauan template.status
template ke REJECTED
dan memicu Webhooks pembaruan status template pesan dengan reason
diatur ke INCORRECT_CATEGORY
. Kami merekomendasikan Anda mendengarkan Webhooks ini untuk mengidentifikasi template yang ditolak, atau meminta kolom rejected_reason
pada template yang baru dibuat, yang akan memiliki nilai TAG_CONTENT_MISMATCH
.Dalam kedua kasus, status awal template diberikan sebagai bagian dari tanggapan API.
Jika status template Anda telah diatur ke REJECTED
sebagai bagian dari validasi kategori, Anda memiliki beberapa opsi:
Anda dapat menyertakan properti allow_category_change
di permintaan Anda agar kami dapat secara otomatis menetapkan kategori berdasarkan konten template dan pedoman kategorisasi template kami. Hal ini dapat mencegah status template Anda agar tidak segera diatur ke REJECTED
akibat salah kategori.
Harap diperhatikan bahwa kategorisasi otomatis hanya dimungkinkan saat membuat template.
Template dengan status PENDING
sedang menjalani tinjauan template. Kami meninjau konten setiap template yang baru dibuat atau diedit untuk memastikan template tersebut mematuhi pedoman dan kebijakan konten kami. Berdasarkan hasil tinjauan ini, kami secara otomatis akan mengubah statusnya menjadi APPROVED
atau REJECTED
, yang memicu Webhooks pembaruan status template pesan.
Berdasarkan hasil validasi kategori dan tinjauan template, kami mengatur atau mengubah status
template Anda menjadi salah satu nilai berikut:
APPROVED
— Template telah melewati tinjauan template dan telah disetujui, dan sekarang dapat dikirim dalam pesan template.PENDING
— Template melewati validasi kategori dan sedang menjalani tinjauan template.REJECTED
— Template gagal dalam validasi kategori atau tinjauan template. Anda dapat meminta kolom rejected_reason pada template untuk mendapatkan alasannya.Lihat referensi endpoint Template Pesan WhatsApp untuk semua kemungkinan kolom dan status.
Setelah berhasil, API menanggapi dengan ID, status, dan kategori template yang baru dibuat. Ada tiga kemungkinan hasil:
status
-nya adalah PENDING
).status
-nya adalah REJECTED
)status
-nya adalah APPROVED
). Ini hanya mungkin untuk template autentikasi dengan tombol kata sandi sekali pakai.{ "id": "<ID>", "status": "<STATUS>", "category": "<CATEGORY>" }
Placeholder | Deskripsi | Contoh Nilai |
---|---|---|
| ID template. |
|
|
| |
| Kategori template yang Anda tentukan, atau yang kami tetapkan. |
|
Berikut ini adalah contoh permintaan untuk membuat template promosi musiman yang terdiri dari komponen berikut:
Untuk contoh tambahan, lihat Contoh Permintaan.
curl 'https://graph.facebook.com/v21.0
/102290129340398/message_templates' \
-H 'Authorization: Bearer EAAJB...' \
-H 'Content-Type: application/json' \
-d '
{
"name": "seasonal_promotion",
"language": "en_US",
"category": "MARKETING",
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Summer Sale"
]
}
},
{
"type": "BODY",
"text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
"example": {
"body_text": [
[
"the end of August","25OFF","25%"
]
]
}
},
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
},
{
"type":"BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from Promos"
},
{
"type":"QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
]
}'
{ "id": "572279198452421", "status": "PENDING", "category": "MARKETING" }
Gunakan Cloud API atau On-Premises API untuk mengirim template dalam pesan template.
Jika kami tidak dapat mengirimkan pesan kepada pengguna WhatsApp, kami akan mencoba kembali pengiriman tersebut dalam jangka waktu yang dikenal sebagai time-to-live (TTL), atau masa berlaku pesan.
Anda dapat menyesuaikan TTL default untuk template autentikasi, utilitas, dan marketing.
Kami mendorong Anda untuk mengatur TTL semua template autentikasi, sebaiknya sama atau kurang dari waktu kedaluwarsa kode, untuk memastikan pelanggan hanya mendapatkan pesan saat kode itu masih dapat digunakan.
Autentikasi | Utilitas | Marketing | |
---|---|---|---|
TTL Default | 10 menit | 30 hari | 30 hari |
Kompatibilitas | Cloud API + On-Premise API | Hanya Cloud API | Marketing Messages (MM) Lite API |
Rentang yang dapat disesuaikan | 30 detik hingga 15 menit | 30 detik hingga 12 jam | 12 jam hingga 30 hari |
Template autentikasi yang dibuat sebelum 23 Oktober 2024, memiliki TTL default 30 hari.
Untuk mengatur TTL khusus pada template autentikasi utilitas, atau marketing, sertakan dan atur nilai properti message_send_ttl_seconds
dalam panggilan POST /<PHONE_NUMBER_ID>/messages
.
TTL dapat disesuaikan dalam kelipatan 1 detik.
message_send_ttl_seconds
yang valid30
hingga 900
detik (30 detik hingga 15 menit) 30
hingga 43200
detik (30 detik hingga 12 jam)43200
hingga 2592000
(12 jam hingga 30 hari)Untuk template autentikasi dan utilitas, Anda dapat mengatur nilai properti message_send_ttl_seconds
hingga -1
, yang akan mengatur TTL khusus 30 hari.
Pesan yang tidak dapat dikirim dalam TTL default atau yang disesuaikan akan dibatalkan.
Jika Anda tidak menerima webhook pesan terkirim sebelum TTL terlampaui, anggaplah pesan tersebut dibatalkan.
Jika Anda mengirim pesan yang gagal terkirim, mungkin ada penundaan kecil sebelum Anda menerima webhook, jadi Anda mungkin ingin membangun buffer kecil sebelum mengasumsikan bahwa pesan tersebut dibatalkan.
Kami merekomendasikan Anda untuk menambahkan tombol Balasan Cepat ke template yang dikategorikan sebagai MARKETING
agar memudahkan pelanggan untuk menolak pesan marketing Anda. Ini akan memberi pelanggan Anda opsi untuk menolak pesan marketing Anda tanpa harus memblokir bisnis Anda. Sebagai hasilnya, Anda mungkin dapat meningkatkan volume berkirim pesan lebih cepat. Silakan lihat artikel ini untuk detail lebih lanjut tentang manfaat menambahkan tombol menolak ke template marketing Anda.
Bisnis Anda harus mengambil langkah-langkah yang diperlukan untuk berhenti mengirim pesan marketing kepada pelanggan yang telah memilih untuk menolaknya. Tidak melakukannya akan berdampak negatif terhadap tingkat pemblokiran dan skor kualitas Anda.
Kirim permintaan GET ke endpoint Akun WhatsApp Business > Template Pesan untuk mendapatkan daftar template yang dimiliki oleh Akun WhatsApp Business.
GET /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?fields=<FIELDS> &limit=<LIMIT>
Placeholder | Deskripsi | Contoh Nilai |
---|---|---|
Daftar yang dipisahkan koma | Opsional. Daftar kolom template yang ingin ditampilkan. |
|
Bilangan bulat | Opsional. Jumlah maksimum template yang ingin ditampilkan di setiap halaman hasil. |
|
curl 'https://graph.facebook.com/v21.0
/102290129340398/message_templates?fields=name,status&limit=3' \
-H 'Authorization: Bearer EAAJB...'
{
"data": [
{
"name": "seasonal_promotion_text_only",
"status": "APPROVED",
"id": "564750795574598"
},
{
"name": "seasonal_promotion_video",
"status": "PENDING",
"id": "1252715608684590"
},
{
"name": "seasonal_promotion_image_header",
"status": "PENDING",
"id": "1372429296936443"
}
],
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MgZDZD"
},
"next": "https://graph.facebook.com/v21.0
/102290129340398/message_templates?fields=name%2Cstatus&limit=3&after=MgZDZD"
}
}
Anda hanya dapat menampilkan template dengan nilai kolom tertentu dengan menyertakan kolom dan nilai yang diinginkan dalam permintaan Anda. Contoh: sertakan status=REJECTED
untuk hanya mendapatkan template yang telah ditolak.
curl 'https://graph.facebook.com/v21.0
/104996122399160/message_templates?fields=name,status&status=REJECTED' \
-H 'Authorization: Bearer EAAJB...'
{ "data": [ { "name": "seasonal_promotion_text_only_v4", "status": "REJECTED", "id": "564750795574598" }, { "name": "discount_qualifier", "status": "REJECTED", "id": "163917509772674" }, { "name": "limited_time_offer_tuscan_getaway_2023", "status": "REJECTED", "id": "202389039167147" }, { "name": "2023_mar_promo_2", "status": "REJECTED", "id": "1116034925734553" }, { "name": "2023_mar_promo", "status": "REJECTED", "id": "952600926095321" } ] }
Namespace template pesan diperlukan untuk mengirim pesan menggunakan template pesan.
Untuk mendapatkan namespace template, kirim permintaan GET
ke endpoint /{whatsapp-business-account-ID}
dan sertakan kolom message_template_namespace
.
curl -i -X GET "https://graph.facebook.com/v21.0
/{whatsapp-business-account-ID}
?fields=message_template_namespace
&access_token={system-user-access-token}"
Jika berhasil, objek JSON dengan ID Akun WhatsApp Business dan namespace akan ditampilkan:
{ "id": "1972385232742141", "message_template_namespace": "12abcdefghijk_34lmnop" }
Kirim permintaan POST ke endpoint Template Pesan WhatsApp untuk mengedit template. Anda juga dapat mengedit template secara manual menggunakan panel Pengelola WhatsApp > Fitur akun > Template pesan.
APPROVED
, REJECTED
, atau PAUSED
yang bisa diedit.category
atau components
template.category
dari template yang disetujui.POST /<WHATSAPP_MESSAGE_TEMPLATE_ID>
{ "category": "<CATEGORY>", "components": [<COMPONENTS>] }
Placeholder | Deskripsi | Contoh Nilai |
---|---|---|
String | Wajib jika properti komponen ditiadakan. Kategori template. |
|
Array | Wajib jika properti kategori ditiadakan. Array objek komponen template. | Lihat Contoh Permintaan (Mengedit Komponen) di bawah ini. |
Contoh permintaan ke teks body template yang berisi konten marketing dan utilitas untuk hanya berisi konten marketing.
curl 'https://graph.facebook.com/v21.0
/564750795574598' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Spring Sale"
]
}
},
{
"type": "BODY",
"text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
"example": {
"body_text": [
[
"the end of April",
"25OFF",
"25%"
]
]
}
},
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubcribe from Promos"
},
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
]
}'
Contoh permintaan untuk mengubah kategori template dari UTILITY
menjadi MARKETING
.
curl 'https://graph.facebook.com/v21.0
/1252715608684590' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"category": "MARKETING"
}'
Contoh tanggapan jika berhasil.
{ "success": true }
Gunakan endpoint Akun WhatsApp Business > Pesan Template untuk menghapus template berdasarkan nama atau ID.
PENDING_DELETION
dan kami akan mencoba untuk mengirimkan pesan selama 30 hari. Setelah waktu ini Anda akan menerima kesalahan "Struktur Tidak Tersedia" dan pelanggan tidak akan menerima pesan.Menghapus template berdasarkan nama akan menghapus semua template yang cocok dengan nama itu (artinya template dengan nama yang sama tetapi dalam bahasa yang berbeda juga akan dihapus).
DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?name=<NAME>
curl -X DELETE 'https://graph.facebook.com/v16.0/102290129340398/message_templates?name=order_confirmation' \ -H 'Authorization: Bearer EAAJB...'
{ "success": true }
Untuk menghapus template berdasarkan ID, sertakan ID template bersama dengan namanya dalam permintaan Anda; hanya template dengan ID template yang cocok yang akan dihapus.
DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?hsm_id=<HSM_ID>, &name=<NAME>
curl -X DELETE 'https://graph.facebook.com/v21.0
/102290129340398/message_templates?hsm_id=1407680676729941&name=order_confirmation' \
-H 'Authorization: Bearer EAAJB...'
{ "success": true }