Membuat Bot Telegram dengan Python (Polling)

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

Polling tidak butuh URL publik, sehingga langsung bisa dijalankan di komputer lokal.

Struktur Folder

text
bot-telegram-python-polling/
├── main.py
├── requirements.txt
├── .env          (opsional: BOT_TOKEN)
└── venv/         (opsional, virtual environment)

Langkah 1: Siapkan Virtual Environment

bash
mkdir bot-telegram-python-polling
cd bot-telegram-python-polling
python3 -m venv venv
source venv/bin/activate

Langkah 2: Pasang Dependensi

Buat requirements.txt:

text
python-telegram-bot==20.7

Pasang:

bash
pip install -r requirements.txt

Langkah 3: Tulis Kode

Buat berkas main.py:

python
# 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

bash
export BOT_TOKEN="TOKEN_DARI_BOTFATHER"

Atau simpan di .env dan muat manual (load_dotenv dari paket python-dotenv).

Langkah 5: Jalankan

bash
python main.py

Buka 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_handler mendaftarkan 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:

python
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.

Artikel Terkait