Skip to content

Quick Start ​

Di sini kita bakal kirim pesan WhatsApp pertama kamu lewat Zawa, dari nol. Kira-kira 5 menit, dan kopinya belum sempat dingin.

Yang Kamu Butuhin ​

  • HP dengan WhatsApp yang aktif.
  • Terminal dengan curl. Kalau ada jq, lebih enak lagi.
  • Atau Node.js 18+, kalau kamu lebih suka langsung pakai skrip lengkap di bawah.

Semua request di halaman ini dikirim ke base URL:

text
https://api-zawa.azickri.com

Buat Sesi ​

Panggil Buat Session. Nggak perlu header atau body apa pun.

bash
curl -X POST "https://api-zawa.azickri.com/session"

Response-nya bakal kayak gini:

json
{
  "id": "68b3f0a2c1d4e5f6a7b8c9d0",
  "sessionId": "0b2f7059-8a90-4f6d-8684-b0e1ce6f0310"
}

Simpan dua nilai itu, soalnya bakal dipakai sebagai header id dan session-id di semua request berikutnya. Biar gampang, taruh di variabel terminal:

bash
export ZAWA_ID="68b3f0a2c1d4e5f6a7b8c9d0"
export ZAWA_SESSION_ID="0b2f7059-8a90-4f6d-8684-b0e1ce6f0310"

Jangan kelamaan

QR code-nya cuma berlaku sekitar 3 menit. Kalau nggak di-scan sampai waktunya habis, sesi otomatis dihapus dan kamu perlu bikin sesi baru. Jadi siapin HP-nya dari sekarang ya.

Ambil QR Code ​

QR code dibikin di belakang layar, jadi tunggu 2–3 detik, terus panggil Ambil Session:

bash
curl "https://api-zawa.azickri.com/session" \
  -H "id: $ZAWA_ID" \
  -H "session-id: $ZAWA_SESSION_ID"
json
{
  "id": "68b3f0a2c1d4e5f6a7b8c9d0",
  "generatedId": "",
  "name": "",
  "sessionId": "0b2f7059-8a90-4f6d-8684-b0e1ce6f0310",
  "isConnected": false,
  "qrcode": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAAB...",
  "picture": ""
}

Kolom qrcode itu gambar PNG dalam bentuk base64 (tanpa awalan data:). Cara paling gampang buat ngelihatnya:

bash
curl -s "https://api-zawa.azickri.com/session" \
  -H "id: $ZAWA_ID" \
  -H "session-id: $ZAWA_SESSION_ID" \
  | jq -r '.qrcode' | base64 -d > qr.png

# Buka qr.png pakai image viewer favorit kamu
html
<!-- Tambahin awalan data URL, terus tampilin sebagai gambar -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAAB..." />

qrcode masih kosong?

Wajar di beberapa detik pertama. Tunggu sebentar, terus panggil lagi. QR-nya juga bisa ganti beberapa kali selama nunggu di-scan, jadi selalu pakai yang paling baru.

Scan dari HP ​

  1. Buka WhatsApp di HP kamu.
  2. Masuk ke Setelan (iPhone) atau menu ⋮ (Android), terus pilih Perangkat tertaut.
  3. Ketuk Tautkan perangkat, lalu scan QR code tadi.

Habis itu, panggil Ambil Session lagi. Kalau udah nyambung, isConnected jadi true, dan name serta picture ikut terisi:

json
{
  "id": "68b3f0a2c1d4e5f6a7b8c9d0",
  "generatedId": "6281234567890:[email protected]",
  "name": "Zawa Bot",
  "sessionId": "0b2f7059-8a90-4f6d-8684-b0e1ce6f0310",
  "isConnected": true,
  "qrcode": "",
  "picture": "https://pps.whatsapp.net/v/t61.24694-24/..."
}

Kirim Pesan Pertama ​

Momen yang ditunggu-tunggu. Ganti 6281234567890 sama nomor tujuan (format internasional, contohnya nomor kamu sendiri), terus panggil Kirim Pesan:

bash
curl -X POST "https://api-zawa.azickri.com/message" \
  -H "id: $ZAWA_ID" \
  -H "session-id: $ZAWA_SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"phone":"6281234567890","type":"text","text":"Halo dari Zawa! 👑"}'
json
{
  "messageId": "3EB0C4A8F1D2B3E4A5F6"
}

Cek HP-nya. Kalau pesannya udah nongol, selamat, kamu resmi jadi pengguna Zawa! 🎉

Versi Lengkap Pakai Node.js ​

Males copas satu-satu? Skrip ini ngejalanin semua langkah di atas sekaligus: bikin sesi, nyimpen QR ke qr.png tiap kali QR-nya berubah, nunggu sampai kamu scan, terus ngirim pesan.

js
// quick-start.mjs
// Jalankan: node quick-start.mjs 6281234567890
import { writeFile } from 'node:fs/promises';

const BASE_URL = 'https://api-zawa.azickri.com';
const phone = process.argv[2];
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function zawa(method, path, { headers = {}, body } = {}) {
  const response = await fetch(BASE_URL + path, {
    method,
    headers: { 'Content-Type': 'application/json', ...headers },
    body: body ? JSON.stringify(body) : undefined,
  });

  const data = await response.json();
  if (!response.ok) throw new Error(`${data.statusCode}: ${data.message}`);
  return data;
}

// 1. Buat sesi
const { id, sessionId } = await zawa('POST', '/session');
const auth = { 'id': id, 'session-id': sessionId };
console.log('Sesi dibuat:', auth);

// 2 & 3. Simpan QR ke qr.png, terus tunggu sampai di-scan
let lastQrcode = '';
while (true) {
  const session = await zawa('GET', '/session', { headers: auth });

  if (session.isConnected) {
    console.log(`Nyambung sebagai ${session.name}!`);
    break;
  }

  if (session.qrcode && session.qrcode !== lastQrcode) {
    lastQrcode = session.qrcode;
    await writeFile('qr.png', Buffer.from(session.qrcode, 'base64'));
    console.log('QR baru disimpan ke qr.png, scan dari HP ya!');
  }

  await sleep(3000);
}

// 4. Kirim pesan pertama
const { messageId } = await zawa('POST', '/message', {
  headers: auth,
  body: { phone, type: 'text', text: 'Halo dari Zawa! 👑' },
});

console.log('Pesan terkirim:', messageId);

Kalau skripnya berhenti dengan 404: session not found pas lagi nunggu, berarti QR-nya keburu kedaluwarsa. Jalankan ulang aja, terus scan lebih cepat. 😄

Selanjutnya Apa? ​