Pendahuluan
Bot Telegram dengan Python umumnya dibuat memakai library resmi python-telegram-bot (PTB). Ada dua cara menerima pesan: webhook (Telegram mengirim ke URL Anda) dan polling (bot menarik pesan lewat getUpdates). Artikel ini membahas polling.
Polling sangat mudah dipasang: tanpa domain, tanpa HTTPS, langsung berjalan di laptop maupun VPS. Kelemahannya, bot terus menarik server tiap detik sehingga kurang efisien untuk traffic tinggi. Jika ingin webhook, baca Membuat Bot Telegram dengan Python (Webhook).
Prasyarat
- Python 3.10+ terpasang. Sangat disarankan virtual environment, ikuti Membuat Virtual Environment untuk Layanan Python di Debian 13.
- Token bot dari @BotFather: kirim
/newbot, lalu salin token seperti123456789:ABCdef....
Polling tidak butuh URL publik, sehingga langsung bisa dijalankan di komputer lokal.
Struktur Folder
bot-telegram-python-polling/
├── main.py
├── requirements.txt
├── .env (opsional: BOT_TOKEN)
└── venv/ (opsional, virtual environment)Langkah 1: Siapkan Virtual Environment
mkdir bot-telegram-python-polling
cd bot-telegram-python-polling
python3 -m venv venv
source venv/bin/activateLangkah 2: Pasang Dependensi
Buat requirements.txt:
python-telegram-bot==20.7Pasang:
pip install -r requirements.txtLangkah 3: Tulis Kode
Buat berkas main.py:
# main.py
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
TOKEN = os.environ.get("BOT_TOKEN")
async def start(update: Update, context):
await update.message.reply_text("Halo! Saya bot Python dengan polling.")
async def echo(update: Update, context):
await update.message.reply_text(f"Anda mengetik: {update.message.text}")
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
app.run_polling()
if __name__ == "__main__":
main()Langkah 4: Siapkan Environment
export BOT_TOKEN="TOKEN_DARI_BOTFATHER"Atau simpan di .env dan muat manual (load_dotenv dari paket python-dotenv).
Langkah 5: Jalankan
python main.pyBuka chat bot, tekan /start, lalu kirim pesan apa saja. PTB otomatis melakukan polling, sehingga bot langsung membalas.
Penjelasan Singkat
Application.builder().token(TOKEN)membuat objek aplikasi bot.add_handlermendaftarkan fungsi untuk perintah dan pesan teks.run_polling()memulai penarikan pesan berkala dari server Telegram.
Kelebihan dan Kekurangan (Polling)
Kelebihan:
- Paling mudah: tanpa domain, tanpa HTTPS, tanpa reverse proxy.
- Cocok untuk belajar, prototipe, dan bot pribadi skala kecil.
- Berjalan di laptop, VPS, maupun di balik NAT.
Kekurangan:
- Boros resource: terus menarik server tiap detik.
- Latensi sedikit lebih tinggi dari webhook.
- Tidak ideal untuk traffic tinggi atau banyak bot sekaligus.
- Rentan bentrok (
409) bila dua instance berjalan bersamaan.
Webhook vs Polling: polling lebih sederhana; webhook lebih efisien dan responsif. Bandingkan di Membuat Bot Telegram dengan Python (Webhook).
Troubleshooting
1. Conflict: terminated by other getUpdates / 409 Ada instance bot lain (polling atau webhook) yang masih berjalan. Hentikan yang lain, lalu hapus webhook bila pernah disetel:
import asyncio
from telegram import Bot
async def clear():
bot = Bot(os.environ.get("BOT_TOKEN"))
await bot.delete_webhook()
asyncio.run(clear())Setelah itu jalankan kembali python main.py.
2. NetworkError / Timed out Masalah koneksi internet atau proxy. Pastikan server bisa menjangkau api.telegram.org.
3. Event loop is closed saat dihentikan Tekan Ctrl+C dengan bersih. Jika masih muncul, jalankan dengan app.run_polling(close_loop=False).
4. Token is invalid Token salah atau terpotong. Salin ulang dari BotFather dan periksa BOT_TOKEN.
5. Bot membalas pesan lama saat dinyalakan Gunakan app.run_polling(drop_pending_updates=True) agar pesan tertunda saat bot mati tidak ikut diproses.
Kesimpulan
Polling adalah cara termudah memulai bot Telegram dengan Python — cukup token dan beberapa baris kode. Untuk menjalankannya terus-menerus di server, jadikan layanan systemd dan gabungkan dengan virtual environment agar dependensi tetap terisolasi.