Skip to content

Ambil Pesan Channel ​

GET /channel/message

Ambil histori pesan dari satu channel (newsletter) WhatsApp, mulai dari yang paling baru. Tiap halaman isinya sampai 100 pesan. Buat halaman berikutnya, tinggal oper nilai before dari response sebelumnya.

Detail Endpoint ​

  • Base URL: https://api-zawa.azickri.com
  • Header: id dan session-id
  • Syarat: sesi harus lagi nyambung (isConnected: true)

Parameter ​

ParameterLokasiTipeWajibKeterangan
idheaderstringYaid dari Buat Session.
session-idheaderstringYasessionId dari Buat Session.
channelIdquerystringYaID channel, contohnya 120363000000000000@newsletter.
beforequerystringTidakNilai before dari response sebelumnya. Kosongin buat ambil pesan terbaru.

Contoh Request ​

bash
curl "https://api-zawa.azickri.com/channel/message?channelId=120363000000000000@newsletter" \
  -H "id: YOUR_ID" \
  -H "session-id: YOUR_SESSION_ID"
javascript
import axios from 'axios';

const response = await axios.get('https://api-zawa.azickri.com/channel/message', {
  params: {
    channelId: '120363000000000000@newsletter',
  },
  headers: {
    'id': 'YOUR_ID',
    'session-id': 'YOUR_SESSION_ID',
  },
});

console.log(response.data);
javascript
const params = new URLSearchParams({
  channelId: '120363000000000000@newsletter',
});

const response = await fetch(`https://api-zawa.azickri.com/channel/message?${params}`, {
  headers: {
    'id': 'YOUR_ID',
    'session-id': 'YOUR_SESSION_ID',
  },
});

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

Response ​

json
{
  "docs": [
    {
      "id": "A5F44C62B3E3772251002D42C45ACC87",
      "serverId": 182,
      "url": "https://whatsapp.com/channel/0029VaXXXXXXXXXXXXXXXX/182",
      "type": "text",
      "text": "Zawa versi baru udah rilis! 🎉",
      "created": "2025-06-07T15:15:51.000Z"
    },
    {
      "id": "B7C1D9E2F3A4B5C6D7E8F9A0B1C2D3E4",
      "serverId": 181,
      "url": "https://whatsapp.com/channel/0029VaXXXXXXXXXXXXXXXX/181",
      "type": "image",
      "text": "Caption gambarnya",
      "image": {
        "url": "https://mmg.whatsapp.net/...",
        "thumbnail": "https://mmg.whatsapp.net/...",
        "mimetype": "image/jpeg"
      },
      "created": "2025-06-06T10:02:11.000Z"
    },
    {
      "id": "C9D8E7F6A5B4C3D2E1F0A9B8C7D6E5F4",
      "serverId": 180,
      "url": "https://whatsapp.com/channel/0029VaXXXXXXXXXXXXXXXX/180",
      "type": "poll",
      "text": "",
      "polling": {
        "name": "Fitur apa yang paling kamu tunggu?",
        "options": ["Webhook", "Kirim polling", "Semuanya"]
      },
      "created": "2025-06-05T08:30:00.000Z"
    }
  ],
  "before": 0
}
json
// channelId nggak dikirim
{
  "statusCode": 400,
  "message": "channelId should not be empty\nchannelId must be a string"
}

// Header kurang
{
  "statusCode": 400,
  "message": "invalid header"
}
json
{
  "statusCode": 404,
  "message": "session not found"
}
json
// Channel nggak ketemu
{
  "statusCode": 500,
  "message": "channel not found"
}

// Sesi lagi nggak nyambung
{
  "statusCode": 500,
  "message": "session not connected"
}
KolomTipeKeterangan
docsarrayDaftar pesan, dari yang paling baru.
docs[].idstringID pesan.
docs[].serverIdnumberNomor urut pesan di channel. Makin besar, makin baru.
docs[].urlstringLink publik ke pesan itu di WhatsApp.
docs[].typestringTipe pesan: text, image, video, poll, atau sticker.
docs[].textstringIsi pesan teks, atau caption buat gambar dan video.
docs[].imageobjectAda kalau type = image: url, thumbnail, mimetype.
docs[].videoobjectAda kalau type = video: url, thumbnail, duration (detik), mimetype.
docs[].stickerobjectAda kalau type = sticker: url, mimetype.
docs[].pollingobjectAda kalau type = poll: name (pertanyaan) dan options (daftar pilihan).
docs[].createdstringWaktu pesan dikirim (ISO 8601).
beforenumberKirim nilai ini sebagai query before buat ambil halaman berikutnya. 0 artinya udah nggak ada halaman lagi.

Tipe lain

Pesan dengan tipe yang belum didukung tetap muncul, tapi dengan type: "text" dan text: "UNSUPPORTED TYPE".

Paginasi ​

Cara kerjanya simpel: panggil tanpa before buat halaman pertama, terus oper before dari response ke request berikutnya. Berhenti kalau before udah 0.

javascript
const BASE_URL = 'https://api-zawa.azickri.com';
const headers = {
  'id': 'YOUR_ID',
  'session-id': 'YOUR_SESSION_ID',
};

async function getAllChannelMessages(channelId) {
  const messages = [];
  let before = '';

  do {
    const params = new URLSearchParams({ channelId });
    if (before) params.set('before', before);

    const response = await fetch(`${BASE_URL}/channel/message?${params}`, { headers });
    const data = await response.json();
    if (!response.ok) throw new Error(data.message);

    messages.push(...data.docs);
    before = String(data.before);
  } while (before !== '0');

  return messages;
}

const messages = await getAllChannelMessages('120363000000000000@newsletter');
console.log(`Total ${messages.length} pesan`);

Nggak perlu ambil semuanya

Channel yang udah lama bisa punya ribuan pesan. Kalau cuma butuh yang terbaru, cukup ambil halaman pertama aja.