Bahasa Indonesia
Ambil Pesan Channel
GET/channel/messageAmbil histori pesan dari satu channel Telegram, mulai dari yang paling baru. Tiap halaman ngambil sampai 100 pesan. Buat halaman berikutnya, tinggal oper nilai before dari response sebelumnya.
Media di pesan channel (gambar, video, stiker, dokumen) dikasih dalam bentuk link media publik, jadi bisa langsung dipasang di <img> atau <video>.
Detail Endpoint
- Base URL:
https://api-zate.azickri.com - Header:
iddansession-id - Syarat: sesi harus lagi nyambung (
isConnected: true), dan akun kamu udah gabung ke channel-nya
Parameter
| Parameter | Lokasi | Tipe | Wajib | Keterangan |
|---|---|---|---|---|
id | header | string | Ya | id dari Buat Session. |
session-id | header | string | Ya | sessionId dari Buat Session. |
channelId | query | string | Ya | ID channel, contohnya -1001234567890, atau username channel publik. |
before | query | string | Tidak | Nilai before dari response sebelumnya. Kosongin buat ambil pesan terbaru. |
Contoh Request
bash
curl "https://api-zate.azickri.com/channel/message?channelId=-1001234567890" \
-H "id: YOUR_ID" \
-H "session-id: YOUR_SESSION_ID"javascript
import axios from 'axios';
const response = await axios.get('https://api-zate.azickri.com/channel/message', {
params: {
channelId: '-1001234567890',
},
headers: {
'id': 'YOUR_ID',
'session-id': 'YOUR_SESSION_ID',
},
});
console.log(response.data);javascript
const params = new URLSearchParams({
channelId: '-1001234567890',
});
const response = await fetch(`https://api-zate.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": "182",
"serverId": 182,
"url": "https://t.me/infosatecakzate/182",
"type": "text",
"text": "Malam ini buka sampai jam 12! 🍢",
"created": "2026-10-11T15:15:51.000Z"
},
{
"id": "181",
"serverId": 181,
"url": "https://t.me/infosatecakzate/181",
"type": "image",
"text": "Menu baru: sate kambing bumbu kacang",
"image": {
"url": "https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/181/photo/Xk3d9QmPz0aB1cD2eF3gH4.jpg",
"thumbnail": "https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/181/thumb/Lm2pQr7sTu8vWx9yZa0bCd.jpg",
"mimetype": "image/jpeg"
},
"created": "2026-10-10T10:02:11.000Z"
},
{
"id": "180",
"serverId": 180,
"url": "https://t.me/infosatecakzate/180",
"type": "video",
"text": "Behind the scene bakar sate",
"video": {
"url": "https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/180/file/Pq4rSt5uVw6xYz7aBc8dEf.mp4",
"thumbnail": "https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/180/thumb/Gh9iJk0lMn1oPq2rSt3uVw.jpg",
"duration": 15,
"mimetype": "video/mp4"
},
"created": "2026-10-09T19:30:00.000Z"
},
{
"id": "179",
"serverId": 179,
"url": "https://t.me/infosatecakzate/179",
"type": "poll",
"text": "",
"polling": {
"name": "Sate apa yang paling kamu suka?",
"options": ["Ayam", "Kambing", "Dua-duanya"]
},
"created": "2026-10-08T08:30:00.000Z"
}
],
"before": 0
}json
// channelId nggak dikirim
{
"statusCode": 400,
"message": "channelId must be a string\nchannelId should not be empty"
}
// Bukan channel, atau belum kamu ikuti
{
"statusCode": 400,
"message": "channel not found"
}json
{
"statusCode": 404,
"message": "session not found"
}json
{
"statusCode": 500,
"message": "session not connected"
}| Kolom | Tipe | Keterangan |
|---|---|---|
docs | array | Daftar pesan, dari yang paling baru. |
docs[].id | string | ID pesan. |
docs[].serverId | number | ID pesan dalam bentuk angka. Makin besar, makin baru. |
docs[].url | string | Link ke pesan di Telegram: t.me/<username>/<id> buat channel publik, atau t.me/c/<id>/<id> buat channel privat (cuma bisa dibuka anggotanya). |
docs[].type | string | Tipe pesan: text, image, video, sticker, document, atau poll. |
docs[].text | string | Isi pesan teks, atau caption buat media. |
docs[].image | object | Ada kalau type = image: url (ukuran terbesar, sampai 2560 piksel), thumbnail (sekitar 800 piksel), mimetype. |
docs[].video | object | Ada kalau type = video: url, thumbnail (320 piksel), duration (detik), mimetype. |
docs[].sticker | object | Ada kalau type = sticker: url, mimetype (image/webp). Stiker animasi pakai gambar thumbnail-nya. |
docs[].document | object | Ada kalau type = document: url, name, size (byte), mimetype. |
docs[].polling | object | Ada kalau type = poll: name (pertanyaan) dan options (daftar pilihan). |
docs[].created | string | Waktu pesan dikirim (ISO 8601). |
before | number | Kirim nilai ini sebagai query before buat ambil halaman berikutnya. 0 artinya udah nggak ada halaman lagi. |
Yang nggak ikut
- Pesan layanan (misalnya "pesan disematkan" atau "foto channel diganti") dilewatin, jadi satu halaman bisa berisi kurang dari 100 pesan walaupun
beforebelum0. - Media yang belum didukung dan nggak punya caption tetap muncul, tapi dengan
type: "text"dantext: "UNSUPPORTED TYPE". thumbnailbisa kosong kalau Telegram emang nggak nyimpen thumbnail buat file itu.
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-zate.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('-1001234567890');
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.