API Kirim Pesan
Gunakan Messaging API untuk mengintegrasikan fitur pesan WhatsApp ke sistem bisnis Anda.
Sebelum menggunakan API, silakan masuk ke konsol Kunci API dan buat kunci di halaman tersebut.
Alamat Endpoint
POST https://wa.api.engagelab.cc/v1/messages
Validasi Panggilan
EngageLab REST API menggunakan HTTP Basic Authentication. Tambahkan Authorization di Header HTTP:
Authorization: Basic ${base64_auth_string}
Algoritma pembuatan base64_auth_string: base64(dev_key:dev_secret)
- Nama Header: "Authorization", nilainya pasangan "username:password" yang sudah di-base64 (dipisahkan titik dua).
- Pada API WhatsApp, username adalah DevKey dan password adalah DevSecret. Dapatkan di konsol pada menu manajemen konfigurasi - Kunci API.
Contoh Permintaan
Header Permintaan
POST /v1/messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Body Permintaan
{
"from": "+8613800138000",
"to": [
"00447911123456"
],
"body": {
"type": "template",
"template": {
"name": "code",
"language": "zh_CN",
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "12345"
}
]
}
]
}
},
"request_id": "123asdbbqwe9faweg",
"custom_args": {
"arg1": "string val",
"arg2": 123
}
}
Parameter Permintaan
Objek permintaan harus dalam format JSON, dengan header Content-Type: application/json.
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| from | String | opsional | Nomor pengirim |
| to | Array String | wajib | Nomor WhatsApp tujuan |
| body | Objek JSON | wajib | Isi pesan |
| request_id | String | opsional | ID permintaan kustom |
| custom_args | Objek JSON | opsional | Informasi kustom yang akan dikembalikan pada callback status pesan |
from
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| from | String | opsional | Nomor pengirim (nomor perusahaan yang digunakan untuk mengirim pesan). Wajib pakai kode negara. Jika kosong, gunakan nomor pengirim default (wajib dikonfigurasi di konsol). |
to
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| to | Array String | wajib | Nomor WhatsApp tujuan, wajib pakai kode negara. |
body
Isi pesan dengan field berikut:
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| type | string | wajib | Tipe pesan: template, text, image, audio, video, document, sticker. Hanya pesan template yang bisa dikirim ke pengguna. Tipe lain hanya bisa dikirim jika pengguna membalas dalam 24 jam terakhir. |
| template | objek | opsional | Wajib jika type = template. Lihat deskripsi objek template |
| text | objek | opsional | Wajib jika type = text. Lihat deskripsi objek text |
| image | objek | opsional | Wajib jika type = image. Lihat deskripsi objek image |
| audio | objek | opsional | Wajib jika type = audio. Lihat deskripsi objek audio |
| video | objek | opsional | Wajib jika type = video. Lihat deskripsi objek video |
| document | objek | opsional | Wajib jika type = document. Lihat deskripsi objek document |
| sticker | objek | opsional | Wajib jika type = sticker. Lihat deskripsi objek sticker |
deskripsi objek text
Pesan teks
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| body | String | wajib | Isi teks, maksimal 4096 karakter. |
Contoh
{
"from": "8613800138000",
"to": "8613800138000",
"body": {
"type": "text",
"text": {
"body": "isi-pesan-teks-anda"
}
}
}
deskripsi objek image
Pesan gambar
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| id | String | opsional | ID media WhatsApp, harus ada nilai id atau link. |
| link | String | opsional | Link gambar (http/https), ikuti Persyaratan Format Pesan Media |
| caption | String | opsional | Deskripsi gambar, maksimal 1024 karakter. |
Contoh
{
"from": "8613800138000",
"to": "8613800138000",
"body": {
"type": "image",
"image": {
"link": "https://img.jiguang.cn/jiguang/public/img/c866bd2.png",
"caption": "info caption"
}
}
}
deskripsi objek video
Pesan video
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| id | String | opsional | ID media WhatsApp, harus ada nilai id atau link. |
| link | String | opsional | Link video (http/https), ikuti Persyaratan Format Pesan Media |
| caption | String | opsional | Deskripsi video, maksimal 1024 karakter. |
Contoh
{
"from": "8613800138000",
"to": "8613800138001",
"body": {
"type": "video",
"video": {
"link": "https://img.jiguang.cn/jiguang/public/videos/432acc5.mp4",
"caption": "info caption"
}
}
}
deskripsi objek audio
Pesan audio
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| id | String | opsional | ID media WhatsApp, harus ada nilai id atau link. |
| link | String | opsional | Link audio (http/https), ikuti Persyaratan Format Pesan Media |
Contoh
{
"from": "8613800138000",
"to": "8613800138001",
"body": {
"type": "audio",
"audio": {
"link": "https://file-examples.com/storage/fe5947fd2362fc197a3c2df/2017/11/file_example_MP3_700KB.mp3"
}
}
}
deskripsi objek document
Pesan file
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| id | String | opsional | ID media WhatsApp, harus ada nilai id atau link. |
| link | String | opsional | Link dokumen (http/https), ikuti Persyaratan Format Pesan Media |
| caption | String | opsional | Deskripsi file, maksimal 1024 karakter. |
| filename | String | opsional | Nama file. Jika tidak diisi, caption akan digunakan sebagai nama file. |
Contoh
{
"from": "8613800138000",
"to": "8613800138001",
"body": {
"type": "document",
"document": {
"link": "https://img.jiguang.cn/jiguang/public/videos/432acc5.mp4",
"caption": "info caption",
"filename": "nama file dokumen"
}
}
}
deskripsi objek sticker
Pesan stiker
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| id | String | opsional | ID media WhatsApp, harus ada nilai id atau link. |
| link | String | opsional | Link stiker (http/https), ikuti Persyaratan Format Pesan Media |
Contoh
{
"from": "8613800138000",
"to": "8613800138001",
"body": {
"type": "sticker",
"sticker": {
"link": "http://sample-file.bazadanni.com/download/images/webp/sample.webp"
}
}
}
deskripsi objek template
Pesan template, Anda harus membuat template terlebih dahulu, baik melalui konsol atau API.
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| name | String | wajib | Nama template, bisa dilihat di halaman template pesan di konsol. Hanya huruf kecil, angka, dan garis bawah. |
| language | String | wajib | Kode bahasa template. |
| components | array | opsional | Jika template memiliki variabel, isi field ini. Hanya satu elemen objek components dalam array. |
deskripsi objek template.components
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| type | String | wajib | Komponen template yang memuat variabel. Nilai: header, body, footer, button |
| parameters | objek | wajib | Isi variabel |
deskripsi objek template.components.parameters
| Parameter | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| type | string | wajib | Tipe variabel: text, currency, date_time, image, video, document. Media (image, video, document) hanya di header. |
| text | string | opsional | Isi variabel jika type = text. |
| date_time | objek | opsional | Untuk type = date_time, dapat dilokalkan dan diatur tampilannya. |
| currency | objek | opsional | Untuk type = currency, dapat dilokalkan dan diatur tampilannya. |
| image | objek | opsional | Untuk type = image, format sama dengan objek image. |
| video | objek | opsional | Untuk type = video, format sama dengan objek video. |
| document | objek | opsional | Untuk type = document, format sama dengan objek document. |
Contoh
{
"from": "+8613800138000",
"to": [
"00447911123456"
],
"body": {
"type": "template",
"template": {
"name": "your-template-name",
"language": "zh_CN",
"components": [
{
"type" : "header",
"parameters": [{
"type": "document",
"document": {
"link": "http(s)://the-url",
"filename": "nama-file-dokumen-anda"
}
}]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "isi-teks-anda"
},
{
"type": "currency",
"currency": {
"fallback_value": "$100.99",
"code": "USD",
"amount_1000": 100990
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "25 Februari 1977",
"day_of_week": 5,
"day_of_month": 25,
"year": 1977,
"month": 2,
"hour": 15,
"minute": 33
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "25 Februari 1977",
"timestamp": 1485470276
}
}
]
}
]
}
}
}
Parameter Respons
Respons Sukses
| Field | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| message_id | String | wajib | ID pesan WhatsApp EngageLab yang unik |
| request_id | String | opsional | ID kustom yang dikirim saat permintaan, dikembalikan apa adanya |
{
"message_id": "cbggf4if6o9ukqaalfug",
"request_id": "your-sendno-string"
}
Respons Gagal
Kode status http 4xx atau 5xx. Isi respons:
| Field | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| code | int | wajib | Kode error, lihat deskripsi Kode Error |
| message | String | wajib | Detail error |
{
"code": 3002,
"message": "whatsapp.template field must be set correctly when type is template"
}
Kode Error
| Kode Error | Http Code | Deskripsi |
|---|---|---|
| 1000 | 500 | Kesalahan internal |
| 2001 | 401 | Otentikasi EngageLab gagal tanpa token yang valid |
| 2002 | 401 | Otentikasi di sisi EngageLab gagal. Token telah kedaluwarsa atau dinonaktifkan |
| 2003 | 400 | Otentikasi WhatsApp gagal, silakan hubungi layanan pelanggan EngageLab |
| 2004 | 403 | Anda tidak memiliki izin untuk memanggil API ini. Periksa izin pengiriman pada kunci API |
| 3001 | 400 | Format parameter permintaan tidak valid. Periksa format JSON |
| 3002 | 400 | Parameter permintaan salah. Periksa parameter permintaan |
| 3003 | 400 | Error karena parameter permintaan tidak valid. Lihat detail pada field message |
| 4001 | 400 | Resource terkait tidak ada, misal template tidak ditemukan saat mengirim pesan template |
Komentar
Persyaratan Format Pesan Media
| Tipe Media | Content-Type yang Didukung | Batas Ukuran |
|---|---|---|
| image | image/jpeg, image/png (tanpa latar belakang transparan) | 5MB |
| video | video/mp4, video/3gpp (hanya encoding H.264 & audio AAC) | 16MB |
| audio | audio/aac, audio/mp4, audio/amr, audio/mpeg, audio/ogg; codecs=opus | 16MB |
| document | Semua MIME-type didukung untuk pesan file. Header template hanya PDF | 100MB |
| sticker | image/webp | Statis: 100KB, Animasi: 500KB |
Kode Bahasa
Untuk info lengkap hubungan bahasa dan kode, unduh file berikut:
Template language code.xlsx










