Skip to content

Kirim Pesan ​

POST /message

Endpoint andalan Zawa. Kirim pesan ke nomor, grup, atau channel, dan udah ngedukung tujuh tipe: teks, gambar, video, audio, dokumen, lokasi, dan kontak. Tiap tipe butuh kolom yang beda, jadi cek tabelnya di bawah ya.

Detail Endpoint ​

  • Base URL: https://api-zawa.azickri.com
  • Header: id, session-id, dan Content-Type: application/json
  • Syarat: sesi harus lagi nyambung (isConnected: true)
HeaderTipeWajibKeterangan
idstringYaid dari Buat Session.
session-idstringYasessionId dari Buat Session.

Request Body ​

KolomTipeWajibKeterangan
phonestringSalah satu*Nomor tujuan format internasional, contohnya 6281234567890.
groupstringSalah satu*ID grup, contohnya 120363000000000000@g.us.
newsletterstringSalah satu*ID channel, contohnya 120363000000000000@newsletter.
typestringYaTipe pesan: text, image, video, audio, document, location, atau contact.
textstringUntuk textIsi pesan. Di tipe image, video, dan document, kolom ini jadi caption (opsional).
imageobjectUntuk imageLihat objek image.
videoobjectUntuk videoLihat objek video.
audioobjectUntuk audioLihat objek audio.
documentobjectUntuk documentLihat objek document.
locationobjectUntuk locationLihat objek location.
contactobjectUntuk contactLihat objek contact.

* Isi salah satu dari phone, group, atau newsletter. Kalau lebih dari satu yang diisi, yang dipakai urutannya group, newsletter, lalu phone. Aturan format nomornya ada di Konsep Dasar.

Objek Media ​

Media dikirim lewat URL. Zawa yang download file-nya, jadi URL-nya harus publik dan langsung ke file. Baca juga Kirim Media dari URL.

ObjekKolomTipeWajibKeterangan
imageurlstringYaURL gambar. Paling aman pakai JPG.
mimetypestringYaContohnya image/jpeg.
thumbnailstringTidakURL gambar thumbnail. Kalau kosong, pakai thumbnail bawaan.
videourlstringYaURL video. Paling aman pakai MP4.
mimetypestringYaContohnya video/mp4.
durationnumberYaDurasi video dalam detik, harus lebih dari 0.
thumbnailstringTidakURL gambar thumbnail. Kalau kosong, pakai thumbnail bawaan.
audiourlstringYaURL audio. Paling aman pakai MP3.
mimetypestringYaContohnya audio/mpeg.
durationnumberYaDurasi audio dalam detik, harus lebih dari 0.
documenturlstringYaURL dokumen.
namestringYaNama file yang tampil di chat, contohnya invoice.pdf.
sizenumberYaUkuran file dalam byte, harus lebih dari 0.
mimetypestringYaContohnya application/pdf.

Audio bukan voice note

Audio dikirim sebagai file audio biasa, bukan voice note (pesan suara bergelombang hijau).

Objek Lokasi dan Kontak ​

ObjekKolomTipeWajibKeterangan
locationlatitudenumberYaKoordinat lintang, nggak boleh 0.
longitudenumberYaKoordinat bujur, nggak boleh 0.
namestringTidakNama tempat, contohnya Monas.
addressstringTidakAlamat tempat.
contactnamestringYaNama kontak yang dibagikan.
phonestringYaNomor kontak format internasional, contohnya 6281234567890.

Contoh Request ​

Contoh paling simpel: kirim pesan teks ke satu nomor.

bash
curl -X POST "https://api-zawa.azickri.com/message" \
  -H "id: YOUR_ID" \
  -H "session-id: YOUR_SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"phone":"6281234567890","type":"text","text":"Halo dari Zawa! 👋"}'
javascript
import axios from 'axios';

const response = await axios.post(
  'https://api-zawa.azickri.com/message',
  {
    phone: '6281234567890',
    type: 'text',
    text: 'Halo dari Zawa! 👋',
  },
  {
    headers: {
      'id': 'YOUR_ID',
      'session-id': 'YOUR_SESSION_ID',
    },
  },
);

console.log(response.data);
javascript
const response = await fetch('https://api-zawa.azickri.com/message', {
  method: 'POST',
  headers: {
    'id': 'YOUR_ID',
    'session-id': 'YOUR_SESSION_ID',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    phone: '6281234567890',
    type: 'text',
    text: 'Halo dari Zawa! 👋',
  }),
});

const data = await response.json();
console.log(data);

Contoh Body per Tipe ​

Ganti body di contoh request di atas sama salah satu dari ini.

json
{
  "phone": "6281234567890",
  "type": "text",
  "text": "Halo dari Zawa! 👋"
}
json
{
  "phone": "6281234567890",
  "type": "image",
  "text": "Ini caption-nya, opsional",
  "image": {
    "url": "https://example.com/image.jpg",
    "mimetype": "image/jpeg"
  }
}
json
{
  "phone": "6281234567890",
  "type": "video",
  "text": "Caption video",
  "video": {
    "url": "https://example.com/video.mp4",
    "mimetype": "video/mp4",
    "duration": 30,
    "thumbnail": "https://example.com/video-thumbnail.jpg"
  }
}
json
{
  "phone": "6281234567890",
  "type": "audio",
  "audio": {
    "url": "https://example.com/audio.mp3",
    "mimetype": "audio/mpeg",
    "duration": 30
  }
}
json
{
  "phone": "6281234567890",
  "type": "document",
  "text": "Invoice bulan ini ya",
  "document": {
    "url": "https://example.com/invoice.pdf",
    "name": "invoice.pdf",
    "size": 102400,
    "mimetype": "application/pdf"
  }
}
json
{
  "phone": "6281234567890",
  "type": "location",
  "location": {
    "name": "Monas",
    "address": "Gambir, Jakarta Pusat",
    "latitude": -6.175392,
    "longitude": 106.827153
  }
}
json
{
  "phone": "6281234567890",
  "type": "contact",
  "contact": {
    "name": "Azickri",
    "phone": "6281234567890"
  }
}
json
{
  "group": "120363000000000000@g.us",
  "type": "text",
  "text": "Halo semuanya! 👋"
}
json
{
  "newsletter": "120363000000000000@newsletter",
  "type": "text",
  "text": "Ada update terbaru nih!"
}

Response ​

json
{
  "messageId": "3EB0C4A8F1D2B3E4A5F6"
}
json
// Tujuan nggak diisi
{
  "statusCode": 400,
  "message": "invalid phone, group or newsletter"
}

// Kolom wajib buat tipe itu kosong
{
  "statusCode": 400,
  "message": "image should not be empty"
}

// Header kurang
{
  "statusCode": 400,
  "message": "invalid header"
}
json
{
  "statusCode": 404,
  "message": "session not found"
}
json
// Sesi lagi nggak nyambung
{
  "statusCode": 500,
  "message": "session not connected"
}

// Media gagal diunduh
{
  "statusCode": 500,
  "message": "error parser file from url 404 Not Found"
}
KolomTipeKeterangan
messageIdstringID pesan dari WhatsApp.

Dapet messageId belum tentu nyampe

messageId artinya pesan udah diterima server WhatsApp. Zawa nggak ngecek apakah nomor tujuan terdaftar di WhatsApp, jadi pastikan nomornya bener ya.