Tạo Telegram bot đầu tiên bằng Python: từ BotFather đến chạy được

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Telegram cho phép bạn tạo bot hoàn toàn miễn phí, và với Python bạn có thể có một con bot trả lời tin nhắn chỉ sau vài chục phút. Bài này hướng dẫn từ việc xin token đến viết các lệnh cơ bản và phản hồi tin nhắn thường.

Bước 1: Tạo bot với BotFather

Trong Telegram, tìm tài khoản có tên BotFather (có dấu tích xác minh) rồi thực hiện:

  1. Gửi lệnh /newbot.
  2. Nhập tên hiển thị của bot, ví dụ "Bot Học Code".
  3. Nhập username, bắt buộc kết thúc bằng bot, ví dụ hoccode_demo_bot.
  4. BotFather trả về một chuỗi token. Hãy coi nó như mật khẩu: không đăng lên mạng, không commit lên GitHub.

Bước 2: Chuẩn bị môi trường Python

Bạn cần Python 3.9 trở lên. Nên dùng môi trường ảo để tránh lẫn thư viện giữa các dự án:

python -m venv venv
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate

pip install python-telegram-bot

Thư viện python-telegram-bot phiên bản 20 trở lên dùng cú pháp bất đồng bộ (async/await). Đoạn code dưới đây viết theo cú pháp đó.

Bước 3: Viết bot

Tạo file bot.py. Token được đọc từ biến môi trường để không nằm cứng trong code.

import os
from telegram import Update
from telegram.ext import (
    ApplicationBuilder, CommandHandler, MessageHandler,
    ContextTypes, filters,
)

TOKEN = os.environ["BOT_TOKEN"]

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Xin chào! Gõ /help để xem các lệnh.")

async def help_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text(
        "Các lệnh:\n/start - bắt đầu\n/help - trợ giúp\n/echo <nội dung> - lặp lại"
    )

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
    text = " ".join(context.args)
    if not text:
        text = "Bạn chưa nhập nội dung."
    await update.message.reply_text(text)

async def reply_text(update: Update, context: ContextTypes.DEFAULT_TYPE):
    msg = update.message.text.lower()
    if "chào" in msg:
        await update.message.reply_text("Chào bạn, chúc một ngày tốt lành!")
    else:
        await update.message.reply_text("Mình chưa hiểu, thử gõ /help nhé.")

def main():
    app = ApplicationBuilder().token(TOKEN).build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("help", help_cmd))
    app.add_handler(CommandHandler("echo", echo))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, reply_text))
    app.run_polling()

if __name__ == "__main__":
    main()

Bước 4: Chạy và thử

Đặt biến môi trường rồi chạy:

# Windows PowerShell
$env:BOT_TOKEN = "dán_token_của_bạn"
python bot.py

# macOS/Linux
export BOT_TOKEN="dán_token_của_bạn"
python bot.py

Mở cuộc trò chuyện với bot trong Telegram, bấm Start và thử các lệnh. Chừng nào cửa sổ terminal còn chạy, bot còn hoạt động. Dùng Ctrl + C để dừng.

Giải thích cách hoạt động

  • Handler: mỗi handler "bắt" một loại cập nhật. CommandHandler bắt lệnh bắt đầu bằng dấu /, MessageHandler bắt tin nhắn theo bộ lọc.
  • Polling: bot liên tục hỏi máy chủ Telegram xem có tin mới không. Cách này dễ nhất khi phát triển vì không cần tên miền hay HTTPS.
  • Async: các hàm xử lý khai báo bằng async def và gọi hành động mạng bằng await.

Bước 5: Cho bot chạy lâu dài

Muốn bot chạy 24/7 bạn cần một máy chủ hoặc VPS. Cách phổ biến là chạy bằng systemd hoặc bọc trong Docker, và khai báo token qua biến môi trường của dịch vụ. Với bot nhỏ, nhiều người dùng các nền tảng chạy ứng dụng miễn phí hoặc giá rẻ, nhưng hãy đọc kỹ giới hạn của từng nơi.

Ý tưởng mở rộng

  • Bot nhắc việc theo giờ bằng job queue của thư viện.
  • Bot tra cứu thời tiết hoặc tỷ giá qua API công khai.
  • Bot lưu ghi chú của từng người dùng vào SQLite.
  • Thêm nút bấm (inline keyboard) thay vì bắt người dùng gõ lệnh.

Kết luận

Bạn vừa có một bot Telegram với lệnh và phản hồi tin nhắn thường. Điểm quan trọng nhất là bảo vệ token và tách nó khỏi mã nguồn. Từ nền này, bạn có thể biến bot thành trợ lý cá nhân, công cụ thông báo cho nhóm hoặc bot hỗ trợ khách hàng nhỏ.

Nếu muốn học Python bài bản trước khi làm các dự án lớn hơn, bạn có thể xem các khóa học tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment