Telegram Bot API
🌐 Tiếng Việt

Cách tạo bot Telegram từ A đến Z: BotFather, token và tin nhắn đầu tiên

· 7 phút đọc

Muốn tạo bot Telegram, bạn chỉ cần mở @BotFather, gửi lệnh /newbot, đặt tên và username kết thúc bằng bot. Khoảng hai phút sau bạn đã có token để gọi Bot API. Bài này hướng dẫn từng bước: tạo bot, kiểm tra token bằng getMe, lấy chat id và gửi tin nhắn đầu tiên bằng curl và Python.

Bot Telegram là gì và cần chuẩn bị gì?

Bot Telegram là tài khoản đặc biệt do chương trình của bạn điều khiển và không cần số điện thoại. Người dùng nhắn tin, gõ lệnh hoặc bấm nút; server của bạn nhận các update và trả lời qua Bot API — một giao diện HTTPS đơn giản. Bot không thể chủ động nhắn trước: người dùng phải bấm Start hoặc thêm bot vào nhóm.

Bạn cần chuẩn bị:

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

  1. Mở @BotFather — bot chính thức của Telegram, có dấu tích xanh. Cẩn thận với các tài khoản giả mạo có tên na ná.
  2. Bấm Start, sau đó gửi lệnh /newbot.
  3. Nhập tên hiển thị, ví dụ Shop Thông Báo. Tên này viết được tiếng Việt có dấu và đổi lại sau bằng /setname.
  4. Nhập username: 5–32 ký tự, chỉ gồm chữ Latin, chữ số, dấu gạch dưới và phải kết thúc bằng bot, ví dụ shop_thongbao_bot hoặc ShopThongBaoBot. Nếu username đã có người dùng, BotFather sẽ yêu cầu chọn tên khác.
  5. BotFather gửi tin nhắn chúc mừng kèm link t.me/shop_thongbao_bot và token của bot.

Hãy chọn username thật kỹ: khác với tên hiển thị, username không đổi được sau khi tạo.

Bước 2: Sao chép và giữ bí mật token

Token có dạng 123456789:AAEexampleTokenReplaceWithYours: phần số trước dấu hai chấm là ID của bot, phần sau là khóa bí mật. Ai có token đều toàn quyền điều khiển bot, vì vậy:

Cách tìm lại, kiểm tra và thu hồi token được trình bày chi tiết trong bài cách lấy token bot Telegram.

Bước 3: Kiểm tra token bằng getMe

Method getMe không cần tham số và trả về thông tin của bot — cách nhanh nhất để biết token có dùng được không:

export TOKEN="123456789:AAEexampleTokenReplaceWithYours"
curl "https://api.telegram.org/bot$TOKEN/getMe"

Token đúng sẽ cho kết quả tương tự:

{
  "ok": true,
  "result": {
    "id": 123456789,
    "is_bot": true,
    "first_name": "Shop Thông Báo",
    "username": "shop_thongbao_bot",
    "can_join_groups": true,
    "can_read_all_group_messages": false
  }
}

Nhận về 401 Unauthorized nghĩa là token sai, thiếu ký tự hoặc đã bị thu hồi. Chữ bot phải đứng ngay trước token trong URL; thiếu nó, server trả về 404 Not Found. Ngại dùng terminal? Mở getMe trong Bot API Tester, dán token rồi bấm chạy.

Bước 4: Nhắn /start cho bot và lấy chat id

Để bot gửi được tin cho bạn, cần biết chat_id. Mở link t.me/shop_thongbao_bot, bấm Start (Telegram sẽ gửi lệnh /start tới bot), sau đó gọi getUpdates:

curl "https://api.telegram.org/bot$TOKEN/getUpdates"

Trong phản hồi (đã rút gọn), giá trị cần lấy là message.chat.id:

{
  "ok": true,
  "result": [{
    "update_id": 815000001,
    "message": {
      "message_id": 1,
      "from": {"id": 123456789, "is_bot": false, "first_name": "Minh"},
      "chat": {"id": 123456789, "first_name": "Minh", "type": "private"},
      "date": 1793260800,
      "text": "/start"
    }
  }]
}

Với chat riêng, chat.id là số dương và trùng với ID của bạn. Nếu result rỗng, hãy nhắn thêm một tin cho bot rồi gọi lại. Chat id của nhóm, kênh và topic lấy hơi khác — xem bài chat id Telegram lấy ở đâu.

Bước 5: Gửi tin nhắn đầu tiên bằng sendMessage

Có chat_id rồi, thử gửi tin bằng curl:

curl -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{"chat_id": 123456789, "text": "Xin chào! Bot đã hoạt động."}'

Hoặc bằng Python với thư viện requests:

import os
import requests

API = f"https://api.telegram.org/bot{os.environ['TOKEN']}"

resp = requests.post(f"{API}/sendMessage", json={
    "chat_id": 123456789,
    "text": "Xin chào! Đây là tin nhắn đầu tiên từ bot.",
}, timeout=10)
print(resp.json())

Thấy "ok": true là tin nhắn đã tới. Lỗi 400 Bad Request: chat not found thường do sai chat_id hoặc bạn chưa bấm Start. Định dạng chữ đậm, nút bấm inline và cách gửi vào nhóm, kênh có trong bài API gửi tin nhắn Telegram; muốn thử nhanh thì dùng sendMessage trong Bot API Tester.

Tùy chọn: mô tả, ảnh đại diện và danh sách lệnh

Cũng có thể đặt lệnh từ code bằng setMyCommands. Tên lệnh dài 1–32 ký tự, chỉ gồm chữ thường Latin, chữ số và dấu gạch dưới:

curl -X POST "https://api.telegram.org/bot$TOKEN/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{"commands": [{"command": "start", "description": "Bắt đầu"}, {"command": "help", "description": "Hướng dẫn sử dụng"}]}'

Bước tiếp theo: polling hay webhook, chọn thư viện nào?

Để bot tự trả lời, chương trình phải liên tục nhận update theo một trong hai cách:

Ví dụ bot "nhại lời" tối giản bằng long polling:

import os
import requests

API = f"https://api.telegram.org/bot{os.environ['TOKEN']}"
offset = 0

while True:
    r = requests.get(f"{API}/getUpdates",
                     params={"offset": offset, "timeout": 30}, timeout=40)
    for upd in r.json()["result"]:
        offset = upd["update_id"] + 1
        msg = upd.get("message")
        if msg and "text" in msg:
            requests.post(f"{API}/sendMessage", json={
                "chat_id": msg["chat"]["id"],
                "text": "Bạn vừa gửi: " + msg["text"],
            }, timeout=10)

Khi bot phức tạp hơn, hãy dùng thư viện: Python có python-telegram-bot, aiogram, pyTelegramBotAPI; Node.js có grammY, Telegraf; Go có telebot và go-telegram-bot-api. Cần giao diện web ngay trong Telegram thì tìm hiểu Mini Apps và thử JS API bằng Mini App Tester. Các bài về webhook và những chủ đề khác nằm trong mục hướng dẫn.

Câu hỏi thường gặp

Tạo bot Telegram có mất phí không?

Không. Tạo bot qua @BotFather và gọi Bot API đều miễn phí. Bạn chỉ tốn tiền cho server hoặc hosting nếu muốn bot chạy liên tục 24/7.

Bot Telegram là gì?

Bot là tài khoản Telegram đặc biệt, không cần số điện thoại, do chương trình của bạn điều khiển qua Bot API (giao diện HTTPS). Bot nhận tin nhắn, lệnh, thao tác bấm nút và trả lời tự động.

Có đổi được username của bot sau khi tạo không?

Không. Tên hiển thị đổi được bất cứ lúc nào bằng /setname, còn username thì không đổi được sau khi tạo, vì vậy hãy chọn kỹ ngay từ đầu.

Vì sao bot vừa tạo không trả lời tin nhắn?

BotFather chỉ tạo tài khoản bot. Muốn bot trả lời, bạn phải chạy một chương trình nhận update (qua getUpdates hoặc webhook) và gọi sendMessage. Khi chương trình không chạy, bot sẽ im lặng.

Không biết lập trình có tạo được bot Telegram không?

Tạo tài khoản bot với @BotFather thì ai cũng làm được trong vài phút. Nhưng để bot xử lý tin nhắn, bạn cần viết code hoặc dùng công cụ tự động hóa như n8n, kết nối bằng token của bot.

API gửi tin nhắn Telegram: hướng dẫn sendMessage với curl, Python và JavaScript

Dùng API gửi tin nhắn Telegram qua sendMessage: ví dụ curl, Python requests, JavaScript fetch, định dạng HTML, MarkdownV2, nút inline và lỗi 400, 403, 429.

Cách lấy token bot Telegram: tìm lại, kiểm tra bằng getMe và thu hồi khi bị lộ

Cách lấy token bot Telegram từ @BotFather, xem lại token của bot cũ, kiểm tra bằng getMe, sửa lỗi 401 Unauthorized và thu hồi token khi bị lộ.

Webhook Telegram bot: cài setWebhook, bảo mật bằng secret_token và dùng với n8n

Cài webhook Telegram bot từng bước: yêu cầu HTTPS và cổng, setWebhook với secret_token, kiểm tra getWebhookInfo, sửa lỗi 409 Conflict và webhook n8n.

Chat id Telegram lấy ở đâu? Cách lấy chat id cho người dùng, group, kênh và topic

Chat id Telegram lấy ở đâu: cách lấy chat id bot cho chat riêng, group, supergroup, kênh và topic bằng getUpdates, kèm cách sửa lỗi result rỗng, 409.