Pembuatan Bot Telegram
Apa saja fitur yang diperlukan untuk membuat bot pengingat otomatis di Telegram?
1 Oktober 2026 · Telegram Tim Resmi

Dari Pengingat Manual ke Otomatis: Fitur yang Wajib Dimiliki Bot Telegram Anda
Membangun bot pengingat otomatis di Telegram bukan sekadar menulis kode—ini soal merancang sistem yang andal, efisien, dan mudah dikelola. Sebelum otomatisasi, banyak pengguna mengandalkan pengingat manual: mencatat di notes, alarm ponsel, atau bahkan bergantung pada bot pihak ketiga yang tidak selalu tersedia. Dengan bot kustom, Anda bisa mengubah jadwal, mengirim pesan terjadwal, dan merespons perintah secara real-time—semuanya dalam satu platform. Artikel ini menguraikan fitur-fitur esensial, mulai dari pendaftaran bot, integrasi API, sampai logika penjadwalan, dengan pendekatan yang bisa langsung Anda praktikkan.
Sejak awal 2026, ekosistem bot Telegram telah matang. BotFather masih menjadi pintu gerbang utama, namun ada beberapa keputusan arsitektur yang perlu dipertimbangkan: apakah bot akan berjalan di VPS sederhana, menggunakan layanan serverless, atau bahkan di perangkat lokal? Setiap pilihan memiliki trade-off. Tulisan ini akan memandu Anda melalui pohon keputusan, langkah implementasi, dan batasan yang perlu diwaspadai.
Pohon Keputusan: Pendekatan Mana yang Tepat?
Sebelum menulis satu baris kode, putuskan bagaimana bot Anda akan berjalan. Tiga jalur utama tersedia, masing-masing dengan kelebihan dan tantangannya:
- Hosting Sendiri (VPS/Dedicated): Kontrol penuh, tetapi harus mengelola server dan uptime.
- Serverless (AWS Lambda / Cloud Functions): Skalabel otomatis, cocok untuk beban rendah-menengah, namun ada batas waktu eksekusi.
- Lingkungan Lokal / Raspberry Pi: Biaya minimal, tetapi bergantung pada koneksi internet dan listrik.
Untuk tutorial ini, kita akan fokus pada hosting VPS dengan Ubuntu karena paling umum dan mudah diikuti. Namun, kode yang dibahas dapat diadaptasi ke platform lain dengan sedikit penyesuaian.
Fitur Inti yang Diperlukan
1. BotFather dan Token API
Langkah pertama adalah membuat bot baru melalui @BotFather. Kirim perintah /newbot, ikuti petunjuk, dan dapatkan token API. Token ini adalah kunci autentikasi—jangan pernah membagikannya secara publik. Simpan di environment variable atau file konfigurasi yang di-gitignore.
Setelah token didapat, Anda bisa mengatur nama, deskripsi, dan perintah bot. BotFather juga memungkinkan Anda menambahkan foto profil dan daftar perintah singkat (misalnya /start, /setreminder). Semua ini memudahkan pengguna memahami fungsi bot Anda.
2. Library Python untuk Telegram Bot
Setelah token siap, pilih library Python yang akan mengelola interaksi dengan API Telegram. Dua library paling populer adalah python-telegram-bot (versi 20.x, asinkronus) dan aiogram (versi 3.x, juga asinkronus). Keduanya mendukung webhook dan polling. Pilih python-telegram-bot jika Anda menginginkan dokumentasi yang lebih ekstensif; pilih aiogram untuk proyek yang membutuhkan fleksibilitas tinggi. Untuk pengingat, saya sarankan python-telegram-bot karena ekosistemnya matang dan banyak contoh tersedia.
Instal dengan pip install python-telegram-bot. Versi terbaru per 2026 sudah mendukung Python 3.11+ dan fitur async penuh, sehingga Anda dapat menangani banyak pengguna secara efisien.
3. Scheduler dan Job Queue
Ini adalah jantung bot pengingat. Anda perlu menjadwalkan pesan pada waktu tertentu. Dua pendekatan utama yang bisa digunakan:
- APScheduler: Library Python terpisah yang dapat menjalankan job pada interval atau cron. Cocok untuk pengingat berbasis jadwal tetap dan mendukung penyimpanan persisten.
- JobQueue bawaan python-telegram-bot: Terintegrasi langsung dengan dispatcher, mendukung job sekali jalan dan berulang. Lebih sederhana untuk kasus penggunaan dasar, tetapi job akan hilang saat bot restart.
Untuk pengingat yang lebih kompleks (misalnya, pengguna dapat membuat pengingat sendiri dengan waktu relatif), job queue bawaan sudah memadai. Contoh: saat pengguna mengirim /remind 30m "Meeting", bot menjadwalkan job untuk mengirim pesan 30 menit kemudian. Kode dasarnya seperti ini:
from telegram.ext import Application, CommandHandler, JobQueue
async def remind(update, context):
chat_id = update.effective_chat.id
# asumsikan parsing waktu sudah dilakukan
context.job_queue.run_once(callback, when, chat_id=chat_id, name=str(chat_id))
app = Application.builder().token("TOKEN").build()
app.add_handler(CommandHandler("remind", remind))
app.run_polling()Jika Anda membutuhkan jadwal yang lebih stabil dan tahan restart, pertimbangkan APScheduler dengan penyimpanan database, seperti yang akan dibahas di bagian integrasi.
4. Penyimpanan Data (Persistensi)
Bot pengingat perlu menyimpan pengaturan pengguna, daftar pengingat, dan riwayat. Opsi paling sederhana adalah file JSON atau SQLite. Untuk produksi dengan banyak pengguna, gunakan PostgreSQL atau Redis sebagai penyimpanan sementara.
Pertimbangan: JSON mudah tetapi tidak cocok untuk banyak akses bersamaan. SQLite cukup untuk skala kecil hingga menengah (ribuan pengguna). Redis ideal untuk state sementara dan antrean job. Pilih sesuai perkiraan beban Anda. Contoh struktur data untuk pengingat dalam JSON:
{
"user_id": 123456,
"reminders": [
{"id": "uuid", "time": "2026-10-02T15:30:00", "message": "Rapat", "recurring": "daily"}
]
}Dengan struktur seperti ini, Anda dapat dengan mudah menambahkan, memperbarui, atau menghapus pengingat berdasarkan ID unik.
5. Menangani Zona Waktu
Pengingat yang hanya berdasarkan UTC akan membingungkan pengguna di zona waktu berbeda. Simpan preferensi zona waktu per pengguna (misalnya, “Asia/Jakarta”). Library pytz atau zoneinfo (Python 3.9+) diperlukan untuk konversi.
Saat menjadwalkan job, konversi waktu lokal pengguna ke UTC, lalu jadwalkan. Atau, gunakan APScheduler dengan timezone support yang lebih bawaan. Pastikan untuk selalu menyimpan waktu dalam UTC di database untuk menghindari kebingungan saat daylight saving time.
Langkah Operasi Lengkap
Persiapan Lingkungan (VPS Ubuntu 22.04)
Setelah memahami fitur inti, mari kita mulai implementasi. Pertama, siapkan lingkungan di VPS Ubuntu 22.04 dengan langkah-langkah berikut:
- Update sistem:
sudo apt update && sudo apt upgrade -y - Instal Python 3.11:
sudo apt install python3 python3-pip -y - Buat direktori bot:
mkdir ~/reminderbot && cd ~/reminderbot - Buat virtual environment:
python3 -m venv venv && source venv/bin/activate - Instal dependensi:
pip install python-telegram-bot apscheduler pytz
Kode Dasar Bot dengan JobQueue
Buat file bot.py dengan isi sebagai berikut (contoh minimalis yang sudah mencakup perintah /start dan /remind):
import logging
from datetime import datetime, timedelta
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
TOKEN = "YOUR_TOKEN_HERE"
logging.basicConfig(level=logging.INFO)
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Gunakan /remind ")
async def remind(update: Update, context: ContextTypes.DEFAULT_TYPE):
try:
args = context.args
if len(args) < 2:
await update.message.reply_text("Format: /remind ")
return
minutes = int(args[0])
message = " ".join(args[1:])
chat_id = update.effective_chat.id
when = datetime.now() + timedelta(minutes=minutes)
context.job_queue.run_once(send_reminder, when, chat_id=chat_id, data=message)
await update.message.reply_text(f"Pengingat disetel dalam {minutes} menit.")
except ValueError:
await update.message.reply_text("Menit harus angka.")
async def send_reminder(context: ContextTypes.DEFAULT_TYPE):
job = context.job
await context.bot.send_message(chat_id=job.chat_id, text=f"⏰ {job.data}")
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("remind", remind))
app.run_polling() Jalankan dengan python3 bot.py. Bot akan berjalan menggunakan polling—cocok untuk pengujian lokal. Setelah berhasil, Anda bisa beralih ke webhook untuk produksi.
Menambahkan Webhook untuk Produksi
Polling tidak efisien untuk produksi karena terus-menerus memeriksa pesan baru. Sebaiknya gunakan webhook di VPS dengan domain dan sertifikat SSL. Setelah token didapat, set webhook dengan perintah curl:
# Di terminal curl -F "url=https://domainanda.com/webhook" https://api.telegram.org/bot/setWebhook
Modifikasi kode untuk menggunakan webhook dengan server asinkronus seperti aiohttp atau FastAPI. Contoh dengan FastAPI:
from fastapi import FastAPI, Request
from telegram import Update
from telegram.ext import Application
app_fast = FastAPI()
app_tg = Application.builder().token(TOKEN).build()
@app_fast.post("/webhook")
async def webhook(request: Request):
data = await request.json()
update = Update.de_json(data, app_tg.bot)
await app_tg.process_update(update)
return {"ok": True}Jalankan dengan uvicorn. Pastikan firewall hanya mengizinkan port 443 dan sertifikat SSL valid.
Pengecualian dan Trade-off
Kapan Jadwal Bawaan Tidak Cukup?
JobQueue python-telegram-bot hanya berjalan selama proses bot hidup. Jika bot restart, semua job yang belum dijalankan akan hilang. Untuk aplikasi serius, Anda perlu menyimpan jadwal ke database dan memulihkannya saat startup. Gunakan APScheduler dengan persistent store (SQLAlchemy) agar job tetap ada setelah restart. Ini sangat penting jika Anda menangani pengingat yang harus dikirim meskipun bot mengalami pemadaman.
Selain itu, jobQueue bawaan tidak mendukung jadwal kompleks seperti “setiap hari kerja jam 8 pagi di zona waktu tertentu”. APScheduler dengan cron trigger adalah solusinya, karena dapat menangani ekspresi cron dan timezone secara native.
Rate Limiting Telegram
Telegram membatasi pengiriman pesan: sekitar 30 pesan per detik per chat. Jika bot Anda perlu mengirim pengingat massal ke ribuan pengguna pada saat yang sama, gunakan antrean dan backoff. Implementasi sederhana: gunakan asyncio.sleep di antara pengiriman atau manfaatkan fitur send_message dengan rate_limit dari library.
Observasi empiris: mengirim 100 pesan secara berurutan tanpa jeda bisa menyebabkan pesan gagal atau diblokir sementara. Sebaiknya batasi 20-25 pesan per detik dan pantau retry_after pada error response. Jika Anda menerima error 429, tunggu sesuai instruksi sebelum mencoba lagi.
Integrasi dengan Database
Agar pengingat bertahan saat bot dimatikan, simpan data di database. Berikut contoh menggunakan SQLite dengan modul sqlite3 bawaan Python. Database ini akan menyimpan setiap pengingat beserta zona waktu pengguna:
import sqlite3
conn = sqlite3.connect("reminders.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS reminders
(id TEXT PRIMARY KEY, chat_id INTEGER, remind_time TEXT, message TEXT, timezone TEXT)''')
conn.commit()
def add_reminder(id, chat_id, remind_time, message, timezone):
c.execute("INSERT INTO reminders VALUES (?,?,?,?,?)", (id, chat_id, remind_time, message, timezone))
conn.commit()Saat bot mulai, muat semua pengingat yang belum lewat dan jadwalkan ulang. Hindari duplikasi dengan mengecek ID unik. Dengan pendekatan ini, bot Anda akan tetap andal meskipun harus restart.
Pemecahan Masalah Umum
Bot tidak merespon perintah
Kemungkinan penyebab: token salah, bot tidak dijalankan, atau webhook tidak terdaftar. Verifikasi token dengan curl https://api.telegram.org/bot. Jika webhook digunakan, pastikan URL dapat diakses dari luar (port terbuka, SSL valid). Gunakan /setWebhook dengan parameter ?drop_pending_updates=true jika ada update yang macet. Periksa juga log aplikasi untuk melihat apakah ada error saat menerima update.
Pengingat tidak terkirim sesuai waktu
Periksa zona waktu: pastikan waktu yang digunakan dalam kode sudah UTC. Periksa juga log untuk error. Jika menggunakan JobQueue, job mungkin hilang saat restart. Solusinya gunakan database persistensi seperti dijelaskan sebelumnya. Pastikan juga bahwa waktu server Anda sinkron dengan NTP untuk menghindari pergeseran waktu.
Daftar Periksa Praktik Terbaik
- Simpan token di environment variable atau file .env, bukan hardcode.
- Gunakan logging yang memadai untuk memonitor error dan job.
- Terapkan retry logic untuk pengiriman pesan yang gagal.
- Buat perintah
/myremindersagar pengguna bisa melihat dan menghapus pengingat mereka. - Batasi frekuensi eksekusi job: jangan izinkan pengguna membuat pengingat setiap detik.
- Dokumentasikan kode dan gunakan type hints.
- Uji coba dengan pengguna terbatas sebelum deploy ke publik.
Mengikuti praktik terbaik ini akan membantu Anda menghindari masalah umum dan memastikan bot berjalan stabil. Misalnya, dengan menyimpan token di environment variable, Anda mengurangi risiko kebocoran kredensial saat berbagi kode.
Skenario yang Berlaku dan Tidak Berlaku
| Skenario | Cocok? | Alasan |
|---|---|---|
| Pengingat pribadi untuk diri sendiri | Ya | Bot sederhana, beban rendah |
| Pengingat grup untuk pengingat meeting mingguan | Ya | Jadwal tetap, bisa diatur |
| Pengingat massal ke ribuan pengguna pada jam yang sama | Hati-hati | Rate limiting, perlu antrean dan load balancing |
| Pengingat dengan waktu akurat hingga detik | Tidak | Bot tidak real-time, ada delay jaringan |
Kesimpulan dan Langkah Selanjutnya
Membangun bot pengingat otomatis di Telegram memerlukan kombinasi fitur: token dari BotFather, library Python yang sesuai, sistem penjadwalan, penyimpanan data, dan penanganan zona waktu. Dengan mengikuti pohon keputusan dan langkah operasi di atas, Anda dapat membuat bot yang handal untuk penggunaan pribadi maupun kelompok kecil. Untuk produksi skala besar, perluas dengan database persistensi, webhook, dan strategi rate limiting.
Langkah selanjutnya yang bisa Anda lakukan: mulai dengan kode dasar di atas, uji coba dengan teman, lalu tambahkan fitur seperti pengingat berulang, dukungan perintah /cancel, atau integrasi dengan API kalender. Pastikan selalu merujuk ke dokumentasi resmi Telegram Bot API untuk informasi terbaru.
Pertanyaan yang Sering Diajukan
Apakah saya harus menggunakan database untuk bot pengingat?
Tidak wajib, tetapi sangat disarankan. Tanpa database, pengingat akan hilang saat bot restart. Untuk penggunaan pribadi dengan uptime tinggi, penyimpanan file JSON bisa cukup. Untuk keandalan, gunakan SQLite atau PostgreSQL.
Bagaimana cara mengatasi rate limiting Telegram?
Terapkan backoff eksponensial dan batasi pengiriman maksimal 20-25 pesan per detik per chat. Gunakan queue dan sleep. Jika error 429 terjadi, baca header retry_after dan tunggu sesuai instruksi.
Bisakah bot pengingat berjalan di smartphone?
Secara teknis bisa menggunakan Termux di Android, tetapi tidak disarankan untuk produksi karena keterbatasan background proses dan konsumsi baterai. Lebih baik gunakan VPS atau layanan cloud gratis seperti PythonAnywhere.
Apa perbedaan JobQueue bawaan dengan APScheduler?
JobQueue bawaan terintegrasi dengan bot, sederhana, tetapi job hilang saat restart. APScheduler mendukung berbagai trigger dan penyimpanan persisten, cocok untuk jadwal kompleks dan kebutuhan produksi.