Skip to content

Quick Start ​

Di sini kita bakal kirim pesan Telegram pertama kamu lewat Zate, dari nol. Kira-kira 5 menit, satu porsi sate juga belum sempat dingin.

Yang Kamu Butuhin ​

  • HP dengan akun Telegram yang aktif. Kalau akunnya pakai verifikasi dua langkah, siapin password-nya juga.
  • 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-zate.azickri.com

Buat Sesi ​

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

bash
curl -X POST "https://api-zate.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 ZATE_ID="68b3f0a2c1d4e5f6a7b8c9d0"
export ZATE_SESSION_ID="0b2f7059-8a90-4f6d-8684-b0e1ce6f0310"

Jangan kelamaan

Kamu punya waktu 3 menit buat scan QR-nya. Kalau lewat, 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-zate.azickri.com/session" \
  -H "id: $ZATE_ID" \
  -H "session-id: $ZATE_SESSION_ID"
json
{
  "id": "68b3f0a2c1d4e5f6a7b8c9d0",
  "generatedId": "",
  "name": "",
  "username": "",
  "phone": "",
  "sessionId": "0b2f7059-8a90-4f6d-8684-b0e1ce6f0310",
  "isConnected": false,
  "qrcode": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAAB...",
  "isPasswordRequired": false,
  "passwordHint": "",
  "picture": "",
  "webhook": { "url": "", "token": "" }
}

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

bash
curl -s "https://api-zate.azickri.com/session" \
  -H "id: $ZATE_ID" \
  -H "session-id: $ZATE_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..." />

QR-nya ganti tiap 30 detik

Telegram cuma ngasih token login yang berlaku sebentar, jadi Zate bikin QR baru kira-kira tiap 30 detik. Kalau qrcode masih kosong, tunggu sebentar terus panggil lagi. Selalu pakai QR yang paling baru.

Scan dari Telegram ​

  1. Buka Telegram di HP kamu.
  2. Masuk ke Settings (Pengaturan) → Devices (Perangkat).
  3. Ketuk Link Desktop Device (Tautkan Perangkat Desktop), lalu scan QR code tadi.

Telegram bakal ngirim notifikasi "login baru" ke akun kamu. Itu wajar, soalnya Zate barusan login sebagai perangkat baru.

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

json
{
  "id": "68b3f0a2c1d4e5f6a7b8c9d0",
  "generatedId": "123456789",
  "name": "Cak Zate",
  "username": "cakzate",
  "phone": "6281234567890",
  "sessionId": "0b2f7059-8a90-4f6d-8684-b0e1ce6f0310",
  "isConnected": true,
  "qrcode": "",
  "isPasswordRequired": false,
  "passwordHint": "",
  "picture": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...",
  "webhook": { "url": "", "token": "" }
}

Akunmu pakai verifikasi dua langkah?

Habis di-scan, qrcode jadi kosong dan isPasswordRequired jadi true (petunjuk password-nya ada di passwordHint). Kirim password-nya lewat Kirim Password:

bash
curl -X POST "https://api-zate.azickri.com/session/password" \
  -H "id: $ZATE_ID" \
  -H "session-id: $ZATE_SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"password":"password-cloud-kamu"}'

Kalau benar, isConnected langsung jadi true.

Kirim Pesan Pertama ​

Momen yang ditunggu-tunggu. Ganti @username_tujuan sama username Telegram tujuan, terus panggil Kirim Pesan:

bash
curl -X POST "https://api-zate.azickri.com/message" \
  -H "id: $ZATE_ID" \
  -H "session-id: $ZATE_SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"username":"@username_tujuan","type":"text","text":"Halo dari Zate! 🍢"}'
json
{
  "messageId": "1024"
}

Belum ada temen buat dites?

Pakai username kamu sendiri. Pesannya bakal masuk ke Saved Messages, aman dan nggak ganggu siapa-siapa.

Cek Telegram-nya. Kalau pesannya udah nongol, selamat, kamu resmi jadi pelanggan tetap Zate! 🎉

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, nanya password kalau akunnya pakai verifikasi dua langkah, nunggu sampai nyambung, terus ngirim pesan.

js
// quick-start.mjs
// Jalankan: node quick-start.mjs @username_tujuan
import { writeFile } from 'node:fs/promises';
import { createInterface } from 'node:readline/promises';

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

async function zate(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 zate('POST', '/session');
const auth = { 'id': id, 'session-id': sessionId };
console.log('Sesi dibuat:', auth);

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

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

  if (session.isPasswordRequired) {
    const rl = createInterface({ input: process.stdin, output: process.stdout });
    const hint = session.passwordHint ? ` (petunjuk: ${session.passwordHint})` : '';
    const password = await rl.question(`Password verifikasi dua langkah${hint}: `);
    rl.close();

    try {
      await zate('POST', '/session/password', { headers: auth, body: { password } });
    } catch (error) {
      console.log(error.message); // 400: invalid password, coba lagi
    }
    continue;
  }

  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 Telegram ya!');
  }

  await sleep(3000);
}

// 4. Kirim pesan pertama
const { messageId } = await zate('POST', '/message', {
  headers: auth,
  body: { username, type: 'text', text: 'Halo dari Zate! 🍢' },
});

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? ​