Lịch sử ra đời và đặc điểm của ngôn ngữ lập trình Java
1. Lịch sử ra đời của Java Cuối năm 1990, James Gosling được công ty Sun...
Kết quả sẽ mở trong tab mới, giới hạn trong website này.
Truy cập nhanh
Tìm kiếm gần đây
Tạo bot Telegram, lấy chat_id và viết vài dòng Python để điện thoại tự nhận tin nhắc việc mỗi sáng.
Muốn gửi thông báo qua Telegram từ code của mình? Chỉ cần tạo một bot và gọi đúng một đường dẫn API. Đọc xong bài này, điện thoại của bạn sẽ tự nhận tin nhắc việc mỗi sáng, ở bất cứ đâu.
Mục tiêu bài học:
Email thì dễ trôi vào thư rác. SMS thì tốn tiền. Telegram giải quyết cả hai chuyện đó:
Bạn có thể dùng nó để nhắc lịch họp, báo website bị sập, báo đơn hàng mới… Nói chung, việc gì máy làm xong cũng có thể “nhắn” cho bạn.
BotFather là bot chính chủ của Telegram, chuyên dùng để tạo bot khác. Các bước như sau:
@BotFather (có dấu tích xanh)./newbot.Trợ lý nhắc việc.bot, ví dụ nhacviec_cua_vinh_bot.123456789:ABCdef.... Lưu lại chuỗi này.Lưu ý: Token giống như mật khẩu của bot. Ai có token là điều khiển được bot. Đừng đưa token lên GitHub hay chụp màn hình gửi người khác. Lỡ lộ thì vào BotFather, gõ /revoke để đổi token mới.
Mỗi cuộc trò chuyện có một mã số riêng gọi là chat_id. Bot cần mã này để biết gửi tin vào đâu.
Trước tiên, tìm bot vừa tạo và bấm Start (hoặc gõ /start). Bước này bắt buộc. Bot không được phép nhắn trước cho người chưa từng chat với nó.
Sau đó mở trình duyệt, dán đường dẫn sau (thay <TOKEN> bằng token thật):
https://api.telegram.org/bot<TOKEN>/getUpdatesKết quả trả về là JSON. Bạn tìm đến phần "chat", con số ở "id" chính là chat_id:
{
"ok": true,
"result": [{
"update_id": 100000001,
"message": {
"chat": { "id": 987654321, "first_name": "Vinh", "type": "private" },
"text": "/start"
}
}]
}Muốn gửi vào nhóm thì thêm bot vào nhóm, nhắn một tin trong nhóm rồi gọi lại getUpdates. Chat_id của nhóm là số âm, ví dụ -1001234567890.
Mọi lời gọi API đều có dạng https://api.telegram.org/bot<TOKEN>/<tên phương thức>. Để gửi tin, ta dùng phương thức sendMessage với hai tham số bắt buộc:
chat_id: gửi cho ai.text: nội dung, tối đa 4096 ký tự.Muốn thử nhanh trước khi viết code? Dán đường dẫn sau vào trình duyệt, thay token và chat_id của bạn vào. Nếu điện thoại nhận được chữ “Xin chao” thì bot đã chạy đúng.
https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Xin%20chaoCode Python dùng thư viện requests. Chưa có thì cài bằng lệnh pip install requests. Nếu máy chưa có Python, xem lại bài cài đặt Python và Visual Studio Code.
import requests
TOKEN = "123456789:ABCdefGhIJKlmNoPQRstuVWxyZ" # token lấy từ BotFather
CHAT_ID = "987654321" # chat_id lấy ở bước 3
def gui_thong_bao(noi_dung):
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
du_lieu = {"chat_id": CHAT_ID, "text": noi_dung, "parse_mode": "HTML"}
phan_hoi = requests.post(url, data=du_lieu, timeout=10)
ket_qua = phan_hoi.json()
if not ket_qua["ok"]:
print("Gửi thất bại:", ket_qua["description"])
return ket_qua["ok"]
gui_thong_bao("<b>Nhắc việc:</b> Nộp điểm giữa kỳ trước 17h nhé!")Vài điểm cần để ý trong đoạn code:
parse_mode: "HTML" cho phép định dạng tin bằng thẻ HTML như <b>, <i>, <a href="...">.timeout=10 giúp chương trình không bị treo khi mạng chập chờn.ok. Nếu ok là false, lý do nằm ở description.Chạy file, vài giây sau điện thoại “ting” một tiếng. Quá dễ luôn!
Gửi tay thì chưa “đã”. Giờ mình cho máy tự xem hôm nay là thứ mấy rồi nhắc đúng việc của ngày đó. Tạo file nhac_viec.py, giữ nguyên hàm gui_thong_bao ở trên, thay dòng gọi hàm cuối cùng bằng đoạn sau:
from datetime import date
# Danh sách việc theo thứ trong tuần: 0 = thứ Hai, 6 = Chủ nhật
VIEC_TRONG_TUAN = {
0: ["Họp bộ môn lúc 8h", "Nộp kế hoạch giảng dạy"],
2: ["Chấm bài thực hành lớp CĐ24"],
4: ["Sao lưu dữ liệu website"],
}
thu = date.today().weekday()
viec_hom_nay = VIEC_TRONG_TUAN.get(thu, [])
if viec_hom_nay:
noi_dung = "<b>Việc hôm nay:</b>\n" + "\n".join("• " + v for v in viec_hom_nay)
gui_thong_bao(noi_dung)
else:
print("Hôm nay không có việc cần nhắc.")Hàm weekday() trả về số từ 0 đến 6. Phương thức get(thu, []) lấy danh sách việc của ngày đó, không có thì trả về danh sách rỗng. Bạn chỉ cần sửa từ điển VIEC_TRONG_TUAN là đổi được lịch nhắc, không phải đụng vào phần code còn lại.
Bước cuối là hẹn giờ cho file tự chạy. Trên Linux, gõ crontab -e rồi thêm dòng sau để chạy lúc 6h30 mỗi sáng:
30 6 * * * /usr/bin/python3 /home/ban/nhac_viec.pyTrên Windows, mở Task Scheduler và chọn Create Basic Task. Đặt lịch Daily, chọn hành động Start a program. Ô Program trỏ tới python.exe, ô Arguments điền đường dẫn file nhac_viec.py.
Mẹo: Máy tính cá nhân tắt thì lịch cũng không chạy. Muốn nhắc đều đặn, hãy đặt script lên VPS hoặc hosting có hỗ trợ cron.
| Lỗi trả về | Nguyên nhân | Cách sửa |
|---|---|---|
401 Unauthorized | Sai token hoặc token đã bị đổi | Copy lại token từ BotFather |
400 Bad Request: chat not found | Sai chat_id hoặc chưa bấm Start với bot | Bấm Start rồi lấy lại chat_id |
getUpdates trả về "result": [] | Chưa nhắn tin nào cho bot, hoặc tin đã quá 24 giờ | Nhắn một tin mới rồi gọi lại |
400 Bad Request: can't parse entities | Nội dung có ký tự <, >, & khi dùng chế độ HTML | Đổi chúng thành <, >, & bằng hàm html.escape() |
429 Too Many Requests | Gửi quá dồn dập | Mỗi chat chỉ nên gửi khoảng 1 tin/giây |
Lỗi cuối hay gặp khi gửi trong vòng lặp. Thêm time.sleep(1) giữa các lần gửi là ngon lành.
os.getenv() thay vì ghi thẳng vào code.sendPhoto để gửi kèm một ảnh biểu đồ.Tóm lại: tạo bot, lấy token và chat_id, gọi sendMessage, đặt lịch là xong.
Tài liệu tham khảo: