Pendahuluan
Bot Telegram menerima pesan dengan dua cara: webhook (Telegram mengirim pesan ke URL Anda) dan polling (bot Anda yang menarik pesan baru lewat getUpdates). Artikel ini membahas polling dengan Node.js menggunakan library telegraf.
Polling cocok untuk belajar, prototipe, dan bot skala kecil karena tidak butuh domain atau HTTPS publik. Kelemahannya, bot terus menarik server tiap detik sehingga kurang efisien untuk traffic tinggi. Jika ingin metode webhook, baca Membuat Bot Telegram dengan Node.js (Webhook).
Prasyarat
- Node.js terpasang. Bila perlu, ikuti Memasang NodeJS di Debian 13.
- Token bot dari @BotFather: kirim
/newbot, lalu salin token seperti123456789:ABCdef....
Polling tidak membutuhkan URL publik, sehingga bisa dijalankan langsung di laptop atau VPS tanpa domain.
Struktur Folder
bot-telegram-node-polling/
├── index.js
├── package.json
├── .env (opsional: BOT_TOKEN)
└── node_modules/ (otomatis setelah npm install)Langkah 1: Inisialisasi Proyek
mkdir bot-telegram-node-polling
cd bot-telegram-node-polling
npm init -y
npm install telegrafLangkah 2: Tulis Kode
Buat berkas index.js:
// index.js
const { Telegraf } = require('telegraf');
const bot = new Telegraf(process.env.BOT_TOKEN);
bot.start((ctx) => ctx.reply('Halo! Saya bot Node.js dengan polling.'));
bot.on('text', (ctx) => ctx.reply('Anda mengetik: ' + ctx.message.text));
bot.launch({ dropPendingUpdates: true });
// Hentikan dengan bersih saat proses di-terminate
process.once('SIGINT', () => bot.stop('SIGINT'));
process.once('SIGTERM', () => bot.stop('SIGTERM'));Isi berkas package.json:
{
"name": "bot-telegram-node-polling",
"version": "1.0.0",
"description": "Bot Telegram Node.js dengan polling",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"telegraf": "^4.16.3"
}
}Langkah 3: Siapkan Environment
export BOT_TOKEN="TOKEN_DARI_BOTFATHER"Atau buat .env dan muat dengan dotenv (require('dotenv').config(); di atas index.js).
Langkah 4: Jalankan
node index.jsBuka chat bot di Telegram, tekan /start, lalu kirim pesan apa saja. Bot langsung membalas karena telegraf otomatis melakukan polling ke server Telegram.
Penjelasan Singkat
bot.launch()memulai polling (jika webhook belum disetel).dropPendingUpdates: truemembuang pesan yang masuk saat bot mati, sehingga tidak membalas pesan lama.process.once('SIGINT'/'SIGTERM', ...)menghentikan polling dengan rapi saat Anda menekanCtrl+C.
Kelebihan dan Kekurangan (Polling)
Kelebihan:
- Sangat mudah: tanpa domain, tanpa HTTPS, tanpa reverse proxy.
- Cocok untuk belajar, uji coba, dan bot pribadi skala kecil.
- Berjalan di laptop, VPS, bahkan di balik NAT.
Kekurangan:
- Boros resource: terus menarik server tiap detik.
- Latensi sedikit lebih tinggi (tergantung interval polling).
- Tidak ideal untuk traffic tinggi atau banyak bot sekaligus.
- Rentan bentrok (
409) bila dua instance berjalan bersamaan.
Webhook vs Polling: polling lebih sederhana dipasang; webhook lebih efisien dan responsif. Bandingkan di Membuat Bot Telegram dengan Node.js (Webhook).
Troubleshooting
1. 409 Conflict: terminated by other getUpdates Ada instance bot lain (polling atau webhook) yang masih berjalan. Hentikan yang lain, lalu hapus webhook bila pernah disetel:
await bot.telegram.deleteWebhook();
bot.launch({ dropPendingUpdates: true });2. Error 401 Unauthorized Token salah. Salin ulang dari BotFather dan periksa BOT_TOKEN.
3. NetworkError / getUpdates failed Masalah koneksi internet atau proxy. Pastikan server bisa menjangkau api.telegram.org.
4. Bot membalas pesan lama saat dinyalakan Gunakan bot.launch({ dropPendingUpdates: true }) agar pesan tertunda tidak ikut diproses.
5. CPU/request tinggi Polling menarik tiap detik. Untuk skala besar, beralih ke webhook agar server hanya bekerja saat ada pesan.
Kesimpulan
Polling adalah cara termudah memulai bot Telegram dengan Node.js — cukup token dan beberapa baris kode. Untuk fitur lebih lanjut, baca Membangun Bot Telegram CRUD dengan Node.js dan Telegraf atau Membuat Bot Telegram Pengingat dengan Node.js.