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:

Validasi Panggilan

EngageLab REST API menggunakan HTTP basic authentication sebagai metode verifikasi: tambahkan HTTP Header Authorization:

Authorization: Basic ${base64_auth_string}
              
              Authorization: Basic ${base64_auth_string}

            
Tampilkan blok kode ini di jendela mengambang

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:
  • APPROVED - disetujui
  • PENDING - sedang ditinjau
  • REJECTED - ditolak
  • PENDING_DELETION - sedang dihapus
  • DELETED - sudah dihapus
  • DISABLED - dinonaktifkan (diblokir)
  • IN_APPEAL - sedang dalam banding
  • PAUSED - dijeda
    Yang perlu diperhatikan developer terutama APPROVED/PENDING/REJECTED/DISABLED.
  • tag_id String Opsional ID tag, digunakan untuk memfilter template berdasarkan tag. Nilai yang diterima:
  • Tidak dikirim atau string kosong - tidak memfilter berdasarkan tag
  • ID tag - hanya mengembalikan template yang memiliki tag tersebut
  • 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
                  
                  GET https://wa.api.engagelab.cc/v1/templates?tag_id=101
    
                
    Tampilkan blok kode ini di jendela mengambang

    Memfilter template tanpa tag:

    GET https://wa.api.engagelab.cc/v1/templates?tag_id=ungrouped
                  
                  GET https://wa.api.engagelab.cc/v1/templates?tag_id=ungrouped
    
                
    Tampilkan blok kode ini di jendela mengambang

    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.
  • AUTHENTICATION
  • MARKETING
  • UTILITY
  • components Object Array Wajib Komponen konten template, lihat objek components pada Membuat Template.
    status String Wajib Status template:
  • APPROVED - disetujui
  • PENDING - sedang ditinjau
  • REJECTED - ditolak
  • PENDING_DELETION - sedang dihapus
  • DELETED - sudah dihapus
  • DISABLED - dinonaktifkan (diblokir)
  • IN_APPEAL - sedang dalam banding
  • PAUSED - dijeda
    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.
  • tags[].id - String, ID tag
  • tags[].name - String, nama 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" } ] }, ...... ]
                  
                  // 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"
                }
            ]
        },
        ......
    ]
    
                
    Tampilkan blok kode ini di jendela mengambang

    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
                  
                  GET https://wa.api.engagelab.cc/v1/templates/406979728071589
    
                
    Tampilkan blok kode ini di jendela mengambang

    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.
  • OTP: kata sandi sekali pakai
  • MARKETING: pemasaran
  • TRANSACTIONAL: transaksional
    Catatan: kategori template diperbarui paling lambat pada 1 Mei 2023 menjadi:
  • AUTHENTICATION
  • MARKETING
  • UTILITY
  • 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.
  • tags[].id - String, ID tag
  • tags[].name - String, nama 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" } ] }
                  
                  {
        "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"
            }
        ]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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"'
                  
                  POST '/v1/media/handles' 
    --header 'Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0' 
    --form 'file=@"/Users/demo/files/demopic.jpeg"'
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "handle_id": "4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlczcn4hxLC6tkwjasjD4WL6_i34tIisq0IdWNFFFj1KwJMRXPU4xwygHSJd4DHu1f19LcBBl2qeb8EuEcgnIUPYIQ:e:1682169041:4985146461608173:100084026087657:ARazr9kxfzKshJE4WpY"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 3002,
        "message": "whatsapp.template field must be set correctly when type is template"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" } ] } ] }
                  
                  {
        "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"
                    }
                ]
            }
        ]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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.
  • OTP: kata sandi sekali pakai
  • MARKETING: pemasaran
  • TRANSACTIONAL: transaksional
    Catatan: kategori template diperbarui paling lambat pada 1 Mei 2023 menjadi:
  • AUTHENTICATION
  • MARKETING
  • UTILITY
  • 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 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):

    1. Jangan menetapkan komponen HEADER di dalam Components.
    2. Teks konten template akan dilokalkan secara otomatis berdasarkan kolom language pada template.
    3. 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.
    4. 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 } ] } ] }
                  
                  {
        "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
                    }
                ]
            }
        ]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" ] }] } ] }
                  
                  {
        "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"
                  ]
              }]
            }
        ]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang
    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" } ] } ] }
                  
                  {
        "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"  
                    }
                ]
            }
        ]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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"] }] } ] }
                  
                  {
        "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"]
                }]
            }
        ]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    Parameter Respons

    Respons Berhasil

    Parameter Tipe Opsi Keterangan
    template_id String Wajib ID template, dikembalikan saat berhasil
    { "template_id": "1275172986566180" // ID template }
                  
                  {
        "template_id": "1275172986566180"		// ID template
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 5002,
        "message": "Invalid parameter. code:100:2388042"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }] }] }
                  
                  {
        "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"
            }]
        }]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 0,
        "message": "success"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 5002,
        "message": "Invalid parameter. code:100:2593002"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 0,
        "message": "success"
    }
    
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 2004,
        "message": "something error"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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
                  
                  GET https://wa.api.engagelab.cc/v1/template-tags
    
                
    Tampilkan blok kode ini di jendela mengambang

    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 } ]
                  
                  [
        {
            "id": "101",
            "name": "Notifikasi pengiriman",
            "template_count": 3
        },
        {
            "id": "102",
            "name": "Layanan purnajual",
            "template_count": 0
        }
    ]
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "name": "Notifikasi pengiriman"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "id": "101",
        "name": "Notifikasi pengiriman"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 3003,
        "message": "template tag name already exists"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "name": "Layanan purnajual"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "id": "101",
        "name": "Layanan purnajual"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 4001,
        "message": "template tag not found"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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
                  
                  DELETE https://wa.api.engagelab.cc/v1/template-tags/101
    
                
    Tampilkan blok kode ini di jendela mengambang

    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 }
                  
                  {
        "affected_template_count": 3
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 4001,
        "message": "template tag not found"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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"] }
                  
                  {
        "tag_ids": ["101", "102"]
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 0,
        "message": "success"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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" }
                  
                  {
        "code": 4001,
        "message": "template not found"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    Tag tidak ada atau bukan milik WABA saat ini:

    { "code": 4001, "message": "template tag not found" }
                  
                  {
        "code": 4001,
        "message": "template tag not found"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    tag_ids tidak dikirim atau bernilai null:

    { "code": 3002, "message": "template tag IDs must be provided as an array" }
                  
                  {
        "code": 3002,
        "message": "template tag IDs must be provided as an array"
    }
    
                
    Tampilkan blok kode ini di jendela mengambang

    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

    Icon Solid Transparent White Qiyu
    Hubungi Sales