Skip to content

Ambil Media ​

GET /media/{telegramId}/{chatId}/{messageId}/{variant}/{signature}.{ext}

Media di Telegram nggak punya URL publik. Jadi tiap kali Zate ngasih kamu gambar, video, stiker, dokumen, atau foto profil, entah dari Ambil Pesan Channel atau dari webhook, bentuknya berupa link ke endpoint ini.

Kamu nggak perlu nyusun link-nya sendiri. Cukup pakai url atau thumbnail yang dikasih Zate apa adanya.

Detail Endpoint ​

  • Base URL: https://api-zate.azickri.com
  • Header: nggak perlu, link-nya udah ditandatangani
  • Streaming: ngedukung header Range, jadi video bisa langsung diputar dan dilompat-lompatin

Parameter ​

Semua bagian path udah diisi Zate. Tabel ini cuma buat kamu yang penasaran.

ParameterLokasiKeterangan
telegramIdpathid sesi Zate yang punya akses ke media itu.
chatIdpathID chat tempat media itu berada, misalnya -1001234567890.
messageIdpathID pesan. Buat foto profil, isinya ID foto.
variantpathphoto (gambar ukuran terbesar), thumb (thumbnail), file (video, stiker, atau dokumen), atau profile (foto profil kecil).
signaturepathTanda tangan yang bikin link nggak bisa ditebak atau diubah.
extpathEkstensi file, misalnya jpg, mp4, atau webp.
RangeheaderOpsional. Contohnya bytes=0-1048575 buat ambil 1 MB pertama.

Contoh Pemakaian ​

html
<!-- Gambar dan thumbnail -->
<img src="https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/181/photo/Xk3d9QmPz0aB1cD2eF3gH4.jpg" alt="" />

<!-- Video, langsung bisa di-seek -->
<video
  controls
  poster="https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/180/thumb/Gh9iJk0lMn1oPq2rSt3uVw.jpg"
  src="https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/180/file/Pq4rSt5uVw6xYz7aBc8dEf.mp4"
></video>
bash
# Download utuh
curl -o gambar.jpg "https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/181/photo/Xk3d9QmPz0aB1cD2eF3gH4.jpg"

# Ambil 1 MB pertama aja
curl -r 0-1048575 -o potongan.mp4 "https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/180/file/Pq4rSt5uVw6xYz7aBc8dEf.mp4"
javascript
const url = 'https://api-zate.azickri.com/media/68b3f0a2c1d4e5f6a7b8c9d0/-1001234567890/181/photo/Xk3d9QmPz0aB1cD2eF3gH4.jpg';

const response = await fetch(url);
if (response.status === 503) {
  const wait = Number(response.headers.get('Retry-After'));
  console.log(`Telegram minta nunggu ${wait} detik`);
}

const buffer = Buffer.from(await response.arrayBuffer());

Response ​

Kalau berhasil, isinya file-nya langsung, bukan JSON:

StatusKapan
200File utuh, request tanpa Range.
206Sebagian file, sesuai Range yang kamu minta. Ada header Content-Range.
Header responseKeterangan
Content-TypeJenis file, misalnya image/jpeg atau video/mp4.
Content-LengthUkuran bagian yang dikirim, dalam byte.
Accept-RangesSelalu bytes.
Cache-Controlpublic, max-age=86400, jadi browser boleh nyimpen sampai sehari.

Kalau gagal, bentuk error-nya sama kayak endpoint lain:

json
// Link-nya diubah-ubah
{
  "statusCode": 400,
  "message": "telegramId must be a mongodb id"
}
json
// Tanda tangan nggak cocok, atau pesannya udah dihapus
{
  "statusCode": 404,
  "message": "media not found"
}
json
// Range di luar ukuran file
{
  "statusCode": 416,
  "message": "range not satisfiable"
}
json
// Sesi pemilik link lagi nggak nyambung
{
  "statusCode": 500,
  "message": "session not connected"
}
json
// Disertai header Retry-After
{
  "statusCode": 503,
  "message": "telegram asked to wait 120s"
}

Cara Kerjanya ​

  • Nggak pernah didownload utuh. Zate ngambil file dari Telegram per potongan 512 KB, cuma pas penontonnya udah sampai di bagian itu. Video 2 GB cuma "makan" bagian yang ditonton, dan nutup atau lompatin video langsung ngehentiin pengambilannya.
  • Potongan yang udah diambil disimpan sementara selama 1 jam sejak terakhir dibuka. Muter ulang atau mundurin video nggak perlu ke Telegram lagi.
  • Sesi harus nyambung, kecuali semua potongan yang diminta masih ada di simpanan sementara.
  • Ukuran gambar: photo itu ukuran terbesar (sampai 2560 piksel), thumb gambar sekitar 800 piksel, dan thumb video 320 piksel, ukuran yang memang disimpan Telegram.
  • Foto profil baru = link baru, jadi browser nggak bakal nampilin foto lama dari cache.

Link ini publik

Siapa pun yang pegang link-nya bisa buka media itu tanpa header, termasuk media dari channel privat. Perlakukan link media dari channel privat kayak data rahasia, jangan dipajang di halaman publik.