API Manajemen Template
Ikhtisar
Dengan API manajemen template, Anda dapat membuat, menghapus, mengubah, dan menampilkan template WABA, serta mengelompokkan template menggunakan tag kustom. Dokumen ini mencakup dua kelompok endpoint:
- Endpoint template: Mendapatkan Template, Menampilkan Informasi Template, Mengunggah File Media Contoh, Membuat Template, Memperbarui Template, Menghapus Template.
- Endpoint tag: Mendapatkan Daftar Tag, Membuat Tag, Mengubah Tag, Menghapus Tag, Menetapkan Tag pada Template. Tag berlaku di dalam WABA tempat API key saat ini berada. Tag hanya digunakan untuk manajemen template di sisi EngageLab: tag tidak mengubah konten template WhatsApp dan tidak memicu peninjauan ulang oleh Meta.
Validasi Panggilan
EngageLab REST API menggunakan HTTP basic authentication sebagai metode verifikasi: tambahkan HTTP Header Authorization:
Authorization: Basic ${base64_auth_string}
Algoritma pembuatan base64_auth_string: base64(dev_key:dev_secret)
- Nama Header adalah "Authorization" dan nilainya adalah pasangan "username:password" yang telah dikonversi ke base64 (dengan tanda titik dua di tengah).
- Untuk API WhatsApp, username adalah DevKey dan password adalah DevSecret. Dapatkan di konsol pada menu manajemen konfigurasi - API key.
Mendapatkan Template
Alamat Panggilan
GET https://wa.api.engagelab.cc/v1/templates
Parameter Permintaan
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| name | String | Opsional | Nama template. Perhatikan bahwa kolom ini menggunakan pencocokan sebagian. |
| language_code | String | Opsional | Bahasa template, lihat Kode Bahasa. |
| category | String | Opsional | Kategori template. ● AUTHENTICATION: kode verifikasi ● MARKETING: pemasaran ● UTILITY: notifikasi layanan |
| status | String | Opsional | Status template: Yang perlu diperhatikan developer terutama APPROVED/PENDING/REJECTED/DISABLED. |
| tag_id | String | Opsional | ID tag, digunakan untuk memfilter template berdasarkan tag. Nilai yang diterima:ungrouped - hanya mengembalikan template tanpa tag apa pun; tidak membedakan huruf besar/kecil |
tag_id memiliki relasi AND dengan kondisi pencarian lain seperti name, language_code, category, dan status. Saat ini mengirim beberapa tag sekaligus belum didukung. Jika format tag_id tidak valid, dikembalikan kode error 3002; jika tag tidak ada atau bukan milik WABA saat ini, dikembalikan kode error 4001.
Catatan: Jika di dalam WABA terdapat tag bernama "ungrouped" (atau padanan terjemahannya), untuk memfilter berdasarkan tag tersebut Anda harus mengirim ID tag numeriknya. Mengirim ungrouped secara langsung selalu diperlakukan sebagai "memfilter template tanpa tag".
Contoh Permintaan
Memfilter berdasarkan tag:
GET https://wa.api.engagelab.cc/v1/templates?tag_id=101
Memfilter template tanpa tag:
GET https://wa.api.engagelab.cc/v1/templates?tag_id=ungrouped
Parameter Respons
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| id | String | Wajib | ID template |
| name | String | Wajib | Nama template |
| language | String | Wajib | Bahasa template, lihat Kode Bahasa. |
| category | String | Wajib | Kategori template. |
| components | Object Array | Wajib | Komponen konten template, lihat objek components pada Membuat Template. |
| status | String | Wajib | Status template: Yang perlu diperhatikan developer terutama APPROVED/PENDING/REJECTED/DISABLED. |
| tags | Object Array | Wajib | Tag yang saat ini ditetapkan pada template. Mengembalikan array kosong jika tidak ada tag. |
Contoh Respons
// Sebuah array JSON, setiap objek di dalamnya berisi informasi satu template
[
{
"id": "406979728071589", // ID template
"name": "code", // nama template
"language": "zh_CN", // bahasa template
"status": "APPROVED", // status; APPROVED berarti disetujui dan dapat digunakan
"category": "OTP", // kategori; saat ini mendukung OTP/TRANSACTIONAL/MARKETING
"components": [ // konten template; dapat berisi HEADER/BODY/FOOTER/BUTTON
{
"type": "HEADER",
"format": "text", // format; mendukung text/image/location/video/document, default TEXT
"text": "Kode pendaftaran" // konten teks; wajib jika format bernilai text
},
{
"type": "BODY",
"text": "Kode verifikasi Anda adalah {{1}}. Silakan masukkan dalam 5 menit." // teks di dalam kurung kurawal ganda {{}} adalah variabel template
}
],
"tags": [ // tag yang ditetapkan pada template ini; array kosong jika tidak ada tag
{
"id": "101",
"name": "Notifikasi pengiriman"
}
]
},
......
]
Menampilkan Informasi Template
Alamat Panggilan
GET https://wa.api.engagelab.cc/v1/templates/{template_id}
{template_id} adalah ID template yang ingin ditampilkan.
Parameter Permintaan
NULL
Contoh Permintaan
GET https://wa.api.engagelab.cc/v1/templates/406979728071589
Parameter Respons
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| id | String | Wajib | ID template |
| name | String | Wajib | Nama template |
| language | String | Wajib | Bahasa template, lihat Kode Bahasa. |
| category | String | Wajib | Kategori template. Catatan: kategori template diperbarui paling lambat pada 1 Mei 2023 menjadi: |
| components | Object Array | Wajib | Komponen konten template, lihat objek components pada Membuat Template. |
| status | String | Wajib | Status template: APPROVED, IN_APPEAL, PENDING, REJECTED, PENDING_DELETION, DELETED, DISABLED, PAUSED, LIMIT_EXCEEDED |
| tags | Object Array | Wajib | Tag yang saat ini ditetapkan pada template. Mengembalikan array kosong jika tidak ada tag. |
Contoh Respons
{
"id": "406979728071589", // ID template
"name": "code", // nama template
"language": "zh_CN", // bahasa template
"status": "APPROVED", // status; APPROVED berarti disetujui dan dapat digunakan
"category": "OTP", // kategori; saat ini mendukung OTP/TRANSACTIONAL/MARKETING
"components": [ // konten template; dapat berisi HEADER/BODY/FOOTER/BUTTON
{
"type": "HEADER",
"format": "text", // format; mendukung text/image/location/video/document, default TEXT
"text": "Kode pendaftaran" // konten teks; wajib jika format bernilai text
},
{
"type": "BODY",
"text": "Kode verifikasi Anda adalah {{1}}. Silakan masukkan dalam 5 menit." // teks di dalam kurung kurawal ganda {{}} adalah variabel template
}
],
"tags": [ // tag yang ditetapkan pada template ini; array kosong jika tidak ada tag
{
"id": "101",
"name": "Notifikasi pengiriman"
}
]
}
Mengunggah File Media Contoh
Saat membuat atau mengedit template dengan header media (image, video, document), Meta mengharuskan file media diunggah terlebih dahulu ke server Meta. API ini mengunggah file contoh untuk template dan mengembalikan handle_id, yang kemudian Anda isikan pada kolom header_handle di endpoint pembuatan/pengeditan template.
Alamat Panggilan
POST https://wa.api.engagelab.cc/v1/media/handles
Parameter Permintaan
Content-Type: multipart/form-data
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| file | file | Wajib | File media contoh. Batas ukuran 20 MB. Untuk persyaratan format, lihat Persyaratan Format Pesan Media. |
Contoh Permintaan
POST '/v1/media/handles'
--header 'Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0'
--form 'file=@"/Users/demo/files/demopic.jpeg"'
Parameter Respons
Respons Berhasil
| Kolom | Tipe | Opsi | Keterangan |
|---|---|---|---|
| handle_id | String | Wajib | Identifikasi file yang dikembalikan Meta, untuk diisikan pada kolom example.header_handle saat membuat atau mengedit template. |
Contoh respons:
{
"handle_id": "4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlczcn4hxLC6tkwjasjD4WL6_i34tIisq0IdWNFFFj1KwJMRXPU4xwygHSJd4DHu1f19LcBBl2qeb8EuEcgnIUPYIQ:e:1682169041:4985146461608173:100084026087657:ARazr9kxfzKshJE4WpY"
}
Respons Gagal
Kode status HTTP adalah 4xx atau 5xx, dan body respons berisi kolom berikut:
| Kolom | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error |
| message | String | Wajib | Detail error |
Contoh respons:
{
"code": 3002,
"message": "whatsapp.template field must be set correctly when type is template"
}
Membuat Template
Alamat Panggilan
POST https://wa.api.engagelab.cc/v1/templates
Contoh Panggilan
{
"name": "template_name", // nama template; nama yang sama diperbolehkan; hanya mendukung huruf kecil, angka, dan garis bawah
"language": "zh_CN", // bahasa template; template dengan nama sama tidak boleh memakai bahasa yang sama
"category": "OTP", // kategori; saat ini mendukung OTP/TRANSACTIONAL/MARKETING
"components": [
{ // konten template
"type": "BODY", // blok konten; saat ini mendukung HEADER/BODY/FOOTER/BUTTONS
"text": "define var as {{1}}" // teksnya sendiri; kolom format tidak diperlukan jika body berupa teks
"example": {
"body_text": [
[
"var1"
]
]
}
},
{
"type": "HEADER",
"format": "image", // tipe konten; mendukung text/image/video/document/location
"example": {
"header_handle": [
"https://jiguang.cn/demopic.jpg"
]
}
},
{
"type": "FOOTER",
"text": "footer only support text without variable"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "PHONE_NUMBER", // tipe tombol; mendukung PHONE_NUMBER/URL/QUICK_REPLY
"text": "this is a phone number",
"phone_number": "8613800138000"
}
]
}
]
}
Parameter Permintaan
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| name | String | Wajib | Nama template. Hanya mendukung huruf kecil, angka, dan garis bawah, maksimal 512 karakter. |
| language | String | Wajib | Bahasa template, lihat Kode Bahasa. |
| category | String | Wajib | Kategori template. Catatan: kategori template diperbarui paling lambat pada 1 Mei 2023 menjadi: |
| components | Object Array | Wajib | Komponen yang mendeskripsikan konten template, lihat objek components. Perhatikan bahwa komponen dengan type=BODY wajib disertakan. |
Objek components
Objek ini mendeskripsikan konten template. Template terdiri atas komponen "header HEADER", "isi BODY", "footer FOOTER", dan "tombol BUTTONS" yang ditentukan melalui type. Setiap tipe komponen mendukung parameter yang berbeda:
Komponen header
Komponen header bersifat opsional secara keseluruhan. Jika Anda tidak memerlukan header, jangan sertakan komponen ini.
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| type | String | Wajib | Tipe komponen, bernilai HEADER |
| format | String | Wajib | Format header, nilai: text, image, video, document, yang berturut-turut berarti teks, gambar, video, dan berkas. |
| text | String | Opsional | Konten teks header. Isi kolom ini jika format=text. Teks header dapat memuat variabel, tetapi hanya 1 variabel yang didukung, dituliskan sebagai {{1}}. |
| example | JSON Object | Opsional | Contoh header. Wajib jika text memuat variabel atau format berupa tipe media. Lihat keterangan objek example. |
Keterangan objek example
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| header_handle | String Array | Opsional | Wajib jika format bernilai image, video, atau document. Kolom ini tidak lagi menerima URL media; Anda harus mengirimkan handle_id yang diperoleh melalui API Mengunggah File Media Contoh. |
| header_text | String Array | Opsional | Jika format bernilai text dan memuat variabel, kirimkan nilai pengganti variabel tersebut pada kolom ini. Contoh: "header_text": ["var1"] |
Komponen body
Komponen body bersifat wajib; konten isi harus ditetapkan.
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| type | String | Wajib | Tipe komponen, bernilai BODY |
| text | String | Wajib | Konten isi, maksimal 1024 karakter. Mendukung beberapa variabel. Variabel terdiri atas kurung kurawal ganda dan nomor variabel; penomoran harus dimulai dari 1 dan berurutan, misalnya {{1}} dan {{2}}. |
| example | JSON Object | Opsional | Contoh isi. Peninjau Meta menilai kepatuhan pesan Anda berdasarkan contoh ini. Lihat keterangan objek example. Wajib jika text memuat variabel. |
Keterangan objek example
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| body_text | String Array | Opsional | Jika text memuat variabel, kirimkan nilai pengganti semua variabel pada kolom ini, sesuai urutan nomor variabel. Contoh: "body_text": [["var1","var2","var3"]] |
Komponen footer
Komponen footer bersifat opsional secara keseluruhan. Jika Anda tidak memerlukan footer, jangan sertakan komponen ini.
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| type | String | Wajib | Tipe komponen, bernilai FOOTER |
| text | String | Wajib | Konten footer. Hanya teks biasa; variabel tidak boleh didefinisikan. |
Komponen buttons
Komponen buttons bersifat opsional secara keseluruhan. Jika Anda tidak memerlukan tombol, jangan sertakan komponen ini.
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| type | String | Wajib | Tipe komponen, bernilai BUTTONS |
| buttons | Object Array | Wajib | Informasi tombol, lihat keterangan objek buttons. |
Keterangan objek buttons
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| type | String | Wajib | Tipe tombol, nilai: QUICK_REPLY, URL, PHONE_NUMBER, yang berturut-turut berarti balasan cepat, membuka situs web, dan menelepon nomor telepon. |
| text | String | Wajib | Teks yang tampil pada tombol. Tidak boleh memuat variabel; hanya teks biasa, maksimal 25 karakter. |
| url | String | Opsional | Wajib jika type=URL. Anda dapat menempatkan variabel di akhir URL, tetapi hanya 1 variabel yang didukung, dituliskan sebagai {{1}}. |
| phone_number | String | Opsional | Wajib jika type=PHONE_NUMBER. Tidak boleh memuat variabel. Nilainya berupa nomor telepon lengkap dengan kode negara. |
| example | String Array | Opsional | Wajib jika type=QUICK_REPLY dan type=URL. Contoh: "example": [" https://www.website.com/dynamic-url-example"] |
Catatan Khusus Template Autentikasi
Hal yang perlu diperhatikan
Untuk template berkategori autentikasi (yaitu AUTHENTICATION):
- Jangan menetapkan komponen HEADER di dalam Components.
- Teks konten template akan dilokalkan secara otomatis berdasarkan kolom language pada template.
- Untuk mode ONE_TAP yang membuka aplikasi, saat ini hanya aplikasi Android yang didukung, dan Anda harus menerapkan proses handshake terkait di aplikasi Anda. Untuk panduan lengkap, bacadokumentasi resmi - Template autentikasi.
- Kolom parameter yang dikirim saat membuat template tidak sama dengan kolom template yang tercatat di sisi WhatsApp setelah pembuatan berhasil; pada dasarnya WhatsApp mengganti BODY, FOOTER, dan BUTTONS pada template kategori ini. Karena itu, berhati-hatilah saat mengirim pesan template: Anda perlu menambahkan variabel tombol. Untuk detailnya, lihat dokumentasi API Pengiriman Pesan.
Contoh COPY_CODE
Data yang dikirim:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
// body bersifat wajib
"type": "BODY",
"add_security_recommendation": true // apakah menambahkan keterangan saran keamanan
},
{
// footer bersifat opsional
"type": "FOOTER",
"code_expiration_minutes": 2 // menambahkan tampilan waktu kedaluwarsa, rentang [1,90]; jangan kirim kolom ini jika tidak diperlukan
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "OTP",
"otp_type": "copy_code",
"text": "copy it" // batas 25 karakter
}
]
}
]
}
Konten template yang sebenarnya tersimpan di sisi WhatsApp setelah pembuatan berhasil:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
"type": "BODY",
"text": "*{{1}}* adalah kode verifikasi Anda. Demi keamanan, jangan bagikan kode ini.",
"example": {
"body_text": [
["123456"]
]
}
},
{
"type": "FOOTER",
"text": "Kode ini kedaluwarsa dalam 2 menit."
},
{
"type": "BUTTONS",
"buttons": [{
"type": "URL",
"text": "Copy code",
"url": "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp{{1}}",
"example": [
"https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp123456"
]
}]
}
]
}
Contoh ONE_TAP
Data yang dikirim:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
// body bersifat wajib
"type": "BODY",
"add_security_recommendation": true // apakah menambahkan keterangan saran keamanan
},
{
// footer bersifat opsional
"type": "FOOTER",
"code_expiration_minutes": 2 // menambahkan tampilan waktu kedaluwarsa, rentang [1,90]; jangan kirim kolom ini jika tidak diperlukan
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "OTP",
"otp_type": "one_tap",
"text": "auto1", // batas 25 karakter
"autofill_text": "auto1", // batas 25 karakter
"package_name": "ppssd",
"signature_hash": "asds"
}
]
}
]
}
Konten template yang sebenarnya tersimpan di sisi WhatsApp setelah pembuatan berhasil:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
"type": "BODY",
"text": "*{{1}}* adalah kode verifikasi Anda. Demi keamanan, jangan bagikan kode ini.",
"example": {
"body_text": [
["123456"]
]
}
},
{
"type": "FOOTER",
"text": "Kode ini kedaluwarsa dalam 2 menit."
},
{
"type": "BUTTONS",
"buttons": [{
"type": "URL",
"text": "copy1",
"url": "https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp{{1}}",
"example": ["https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp123456"]
}]
}
]
}
Parameter Respons
Respons Berhasil
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| template_id | String | Wajib | ID template, dikembalikan saat berhasil |
{
"template_id": "1275172986566180" // ID template
}
Respons Gagal
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error, dikembalikan saat gagal |
| message | String | Wajib | Pesan error, dikembalikan saat gagal |
{
"code": 5002,
"message": "Invalid parameter. code:100:2388042"
}
Memperbarui Template
Alamat Panggilan
PUT https://wa.api.engagelab.cc/v1/templates/{templateId}
Contoh Panggilan
{
"components": [{ // konten template
"type": "BODY", // blok konten
"text": "define var as {{1}}",
"example": {
"body_text": [["var1"]]
}
},{
"type": "HEADER",
"format": "image", // tipe konten: image/video/document
"example": {
// Catatan: di sini Anda harus mengisi handle_id yang dikembalikan endpoint unggah; URL gambar tidak lagi didukung
"header_handle": ["4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlcz..."]
}
},{
"type": "FOOTER",
"text": "footer only support text without variable"
},{
"type": "BUTTONS",
"buttons": [{
"type": "PHONE_NUMBER",
"text": "this is a phone number",
"phone_number": "8613800138000"
}]
}]
}
Parameter Permintaan
Sama dengan Parameter Permintaan pada endpoint pembuatan template.
Parameter Respons
Respons Berhasil
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode respons, selalu 0 |
| message | String | Wajib | Pesan respons, selalu success |
{
"code": 0,
"message": "success"
}
Respons Gagal
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error, dikembalikan saat gagal |
| message | String | Wajib | Pesan error, dikembalikan saat gagal |
{
"code": 5002,
"message": "Invalid parameter. code:100:2593002"
}
Menghapus Template
Alamat Panggilan
DELETE https://wa.api.engagelab.cc/v1/templates/{template_name}
Catatan: yang dikirim di sini adalah nama template, bukan ID template. Semua versi bahasa dari template dengan nama tersebut akan dihapus.
Parameter Respons
Respons Berhasil
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode respons, selalu 0 |
| message | String | Wajib | Pesan respons, selalu success |
{
"code": 0,
"message": "success"
}
Respons Gagal
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error, dikembalikan saat gagal |
| message | String | Wajib | Pesan error, dikembalikan saat gagal |
{
"code": 2004,
"message": "something error"
}
Mendapatkan Daftar Tag
Mengembalikan seluruh tag pada WABA tempat API key saat ini berada, tanpa penomoran halaman.
Alamat Panggilan
GET https://wa.api.engagelab.cc/v1/template-tags
Parameter Permintaan
NULL
Contoh Permintaan
GET https://wa.api.engagelab.cc/v1/template-tags
Parameter Respons
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| id | String | Wajib | ID tag |
| name | String | Wajib | Nama tag |
| template_count | Integer | Wajib | Jumlah template pada WABA saat ini yang memiliki tag tersebut. Template dengan nama sama dalam bahasa berbeda dihitung terpisah berdasarkan ID template. |
Contoh Respons
[
{
"id": "101",
"name": "Notifikasi pengiriman",
"template_count": 3
},
{
"id": "102",
"name": "Layanan purnajual",
"template_count": 0
}
]
Jika WABA tidak memiliki tag, dikembalikan array kosong [].
Membuat Tag
Alamat Panggilan
POST https://wa.api.engagelab.cc/v1/template-tags
Parameter Permintaan
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| name | String | Wajib | Nama tag, panjang 1–64 karakter. Untuk ketentuan penamaan, lihat Aturan Penamaan Tag. |
Contoh Permintaan
{
"name": "Notifikasi pengiriman"
}
Parameter Respons
Respons Berhasil
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| id | String | Wajib | ID tag |
| name | String | Wajib | Nama tag setelah dinormalisasi |
{
"id": "101",
"name": "Notifikasi pengiriman"
}
Respons Gagal
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error, dikembalikan saat gagal |
| message | String | Wajib | Pesan error, dikembalikan saat gagal |
{
"code": 3003,
"message": "template tag name already exists"
}
Mengubah Tag
Alamat Panggilan
PUT https://wa.api.engagelab.cc/v1/template-tags/{tag_id}
{tag_id} adalah ID tag yang ingin diubah.
Parameter Permintaan
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| name | String | Wajib | Nama tag yang baru, panjang 1–64 karakter. Untuk ketentuan penamaan, lihat Aturan Penamaan Tag. |
Contoh Permintaan
{
"name": "Layanan purnajual"
}
Parameter Respons
Respons Berhasil
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| id | String | Wajib | ID tag |
| name | String | Wajib | Nama tag setelah diubah |
{
"id": "101",
"name": "Layanan purnajual"
}
Respons Gagal
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error, dikembalikan saat gagal |
| message | String | Wajib | Pesan error, dikembalikan saat gagal |
{
"code": 4001,
"message": "template tag not found"
}
Menghapus Tag
Alamat Panggilan
DELETE https://wa.api.engagelab.cc/v1/template-tags/{tag_id}
Catatan: menghapus tag hanya memutus keterkaitan antara template dan tag tersebut. Template tidak dihapus dan pengiriman tidak terpengaruh.
{tag_id} adalah ID tag yang ingin dihapus.
Parameter Permintaan
NULL
Contoh Permintaan
DELETE https://wa.api.engagelab.cc/v1/template-tags/101
Parameter Respons
Respons Berhasil
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| affected_template_count | Integer | Wajib | Jumlah template yang keterkaitannya diputus pada operasi ini. Template dengan nama sama dalam bahasa berbeda dihitung terpisah berdasarkan ID template. |
{
"affected_template_count": 3
}
Respons Gagal
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error, dikembalikan saat gagal |
| message | String | Wajib | Pesan error, dikembalikan saat gagal |
{
"code": 4001,
"message": "template tag not found"
}
Menetapkan Tag pada Template
Alamat Panggilan
PUT https://wa.api.engagelab.cc/v1/templates/{template_id}/tags
Catatan: endpoint ini menimpa secara penuh. tag_ids adalah kumpulan tag lengkap yang dimiliki template setelah disimpan; tag lama yang tidak disertakan akan diputus keterkaitannya.
{template_id} adalah ID template yang ingin diberi tag.
Parameter Permintaan
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| tag_ids | String Array | Wajib | Kumpulan ID tag lengkap yang dimiliki template setelah disimpan. Harus dikirim secara eksplisit dan tidak boleh null. Semua ID harus milik WABA saat ini; ID yang duplikat otomatis dihapus. |
Keterangan nilai tag_ids:
- Mengirim
[]berarti mengosongkan seluruh tag pada template tersebut. - Jika tag_ids tidak dikirim atau bernilai
null, permintaan gagal dan tag yang ada tidak dikosongkan. - Jika permintaan gagal, kumpulan tag pada template tetap tidak berubah sehingga Anda dapat langsung mencoba lagi.
- Jumlah tag per template tidak dibatasi; Anda dapat mengirim seluruh tag pada WABA saat ini.
Contoh Permintaan
{
"tag_ids": ["101", "102"]
}
Parameter Respons
Respons Berhasil
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode respons, selalu 0 |
| message | String | Wajib | Pesan respons, selalu success |
{
"code": 0,
"message": "success"
}
Respons Gagal
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| code | int | Wajib | Kode error, dikembalikan saat gagal |
| message | String | Wajib | Pesan error, dikembalikan saat gagal |
Template tidak ada atau bukan milik WABA saat ini:
{
"code": 4001,
"message": "template not found"
}
Tag tidak ada atau bukan milik WABA saat ini:
{
"code": 4001,
"message": "template tag not found"
}
tag_ids tidak dikirim atau bernilai null:
{
"code": 3002,
"message": "template tag IDs must be provided as an array"
}
Kode Error
"Endpoint tag" pada tabel di bawah mengacu pada lima endpoint tag yang tercantum di Ikhtisar, termasuk juga skenario memfilter dengan tag_id pada Mendapatkan Template.
| Kode error | Kode HTTP | Endpoint terkait | Keterangan |
|---|---|---|---|
| 1000 | 500 | Semua endpoint | Error internal |
| 2001 | 401 | Semua endpoint | Autentikasi di sisi EngageLab gagal: tidak menyertakan token dengan format data yang valid |
| 2002 | 401 | Semua endpoint | Autentikasi di sisi EngageLab gagal: token sudah kedaluwarsa atau dinonaktifkan |
| 2003 | 400 | Semua endpoint | Autentikasi di sisi WhatsApp gagal. Silakan hubungi layanan pelanggan EngageLab. |
| 2004 | 403 | Semua endpoint | Tidak memiliki izin memanggil API ini, atau akun maupun WABA terkait telah dinonaktifkan |
| 3001 | 400 | Semua endpoint | Format parameter permintaan tidak valid. Periksa apakah menggunakan format JSON dan tipe kolomnya sesuai ketentuan. |
| 3002 | 400 | Semua endpoint | Parameter permintaan salah. Periksa apakah parameter permintaan sudah sesuai ketentuan. |
| 3002 | 400 | Endpoint tag | Nama tag kosong |
| 3002 | 400 | Endpoint tag | Nama tag melebihi 64 karakter, lihat Aturan Penamaan Tag |
| 3002 | 400 | Endpoint tag | Nama tag mengandung karakter yang tidak diizinkan, lihat Aturan Penamaan Tag |
| 3002 | 400 | Endpoint tag | Format ID tag tidak valid; harus berupa string bilangan bulat positif |
| 3002 | 400 | Endpoint tag | tag_ids tidak dikirim saat menetapkan tag template, atau nilainya null |
| 3003 | 400 | Semua endpoint | Parameter permintaan salah: validasi bisnis terkait gagal |
| 3003 | 400 | Endpoint tag | Nama tag yang sama sudah ada dalam WABA tersebut. Pemeriksaan duplikasi tidak membedakan huruf besar/kecil maupun tanda aksen. |
| 3003 | 400 | Endpoint tag | Jumlah tag pada satu WABA sudah mencapai batas 20 |
| 3003 | 400 | Endpoint tag | Operasi tag sedang sibuk. Coba lagi nanti; percobaan ulang tidak menghasilkan data duplikat. |
| 4001 | 400 | Semua endpoint | Template tidak ada atau bukan milik WABA saat ini |
| 4001 | 400 | Endpoint tag | Tag tidak ada atau bukan milik WABA saat ini |
| 5002 | 400 | Semua endpoint | Permintaan template gagal diproses di sisi Meta. Lihat keterangan error pada kolom message untuk detailnya. |
Catatan
Persyaratan Format Pesan Media
| Tipe media | Content-Type yang didukung | Batas ukuran |
|---|---|---|
| image | image/jpeg, image/png; latar transparan tidak didukung | 5 MB |
| video | video/mp4 | 16MB |
| document | Hanya format PDF | 100 MB |
Aturan Penamaan Tag
Saat membuat dan mengubah tag, server terlebih dahulu menormalisasi nama, lalu memvalidasi panjang dan duplikasinya.
Normalisasi: spasi di awal dan akhir dihapus, dan spasi berurutan di dalam nama digabung menjadi satu spasi. Misalnya, jika Anda mengirim " Notifikasi pengiriman ", nama yang benar-benar tersimpan dan dikembalikan adalah "Notifikasi pengiriman".
Batasan karakter: spasi, garis bawah, tanda hubung, karakter tampak dari berbagai bahasa, dan emoji diizinkan; baris baru, tab, karakter kontrol, dan karakter format tak tampak tidak diizinkan.
Panjang: setelah dinormalisasi, nama harus terdiri atas 1–64 karakter. Panjang dihitung berdasarkan titik kode Unicode, dan satu emoji dapat menempati beberapa titik kode.
Pemeriksaan duplikasi: nama tidak boleh sama dalam satu WABA. Pemeriksaan tidak membedakan huruf besar/kecil maupun tanda aksen, misalnya Logistics, logistics, dan Logístics dianggap nama yang sama. Tidak ada batasan kata khusus.
Batasan Penggunaan Tag
- Satu WABA dapat membuat maksimal 20 tag.
- Jumlah tag per template tidak dibatasi; Anda dapat menetapkan seluruh tag yang ada pada WABA saat ini, sehingga batas efektifnya adalah 20.
- ID tag berupa string baik pada permintaan maupun respons (misalnya
"101"). Jangan menguraikannya sebagai tipe angka. - Template dengan nama sama dalam bahasa berbeda ditetapkan tagnya secara terpisah berdasarkan ID template masing-masing. Misalnya, versi bahasa Indonesia dan bahasa Inggris dari template yang sama harus ditetapkan secara terpisah.
- Tag tidak ditulis ke Meta, tidak mengubah status maupun skor kualitas template, dan tidak memicu peninjauan ulang.
Kode Bahasa
| Bahasa | Code |
|---|---|
| Afrikaans | af |
| Albania | sq |
| Arab | ar |
| Azerbaijan | az |
| Bengali | bn |
| Bulgaria | bg |
| Katalan | ca |
| Tionghoa (Tiongkok Daratan) | zh_CN |
| Tionghoa (Hong Kong) | zh_HK |
| Tionghoa (Taiwan) | zh_TW |
| Kroasia | hr |
| Ceko | cs |
| Denmark | da |
| Belanda | nl |
| Inggris | en |
| Inggris (Britania Raya) | en_GB |
| Inggris (Amerika Serikat) | en_US |
| Estonia | et |
| Filipino | fil |
| Finlandia | fi |
| Prancis | fr |
| Georgia | ka |
| Jerman | de |
| Yunani | el |
| Gujarat | gu |
| Hausa | ha |
| Ibrani | he |
| Hindi | hi |
| Hungaria | hu |
| Indonesia | id |
| Irlandia | ga |
| Italia | it |
| Jepang | ja |
| Kannada | kn |
| Kazakh | kk |
| Kinyarwanda | rw_RW |
| Korea | ko |
| Kirgiz | ky_KG |
| Lao | lo |
| Latvia | lv |
| Lituania | lt |
| Makedonia | mk |
| Melayu | ms |
| Malayalam | ml |
| Marathi | mr |
| Norwegia | nb |
| Persia | fa |
| Polandia | pl |
| Portugis (Brasil) | pt_BR |
| Portugis (Portugal) | pt_PT |
| Punjabi | pa |
| Rumania | ro |
| Rusia | ru |
| Serbia | sr |
| Slovakia | sk |
| Slovenia | sl |
| Spanyol | es |
| Spanyol (Argentina) | es_AR |
| Spanyol (Spanyol) | es_ES |
| Spanyol (Meksiko) | es_MX |
| Swahili | sw |
| Swedia | sv |
| Tamil | ta |
| Telugu | te |
| Thai | th |
| Turki | tr |
| Ukraina | uk |
| Urdu | ur |
| Uzbek | uz |
| Vietnam | vi |
| Zulu | zu |
Anda juga dapat mengunduh berkas berikut untuk melihat korelasi antara bahasa dan kodenya:
Kode bahasa template.xlsx










