Dự án này là một bot Telegram viết bằng Google Apps Script để ghi chép thu nhập, chi tiêu, quản lý ngân sách tháng, xem báo cáo và tạo biểu đồ thống kê từ dữ liệu lưu trong Google Sheets.
- Ghi chi tiêu nhanh qua Telegram.
- Ghi thu nhập nhanh qua Telegram.
- Tự lưu dữ liệu vào Google Sheets.
- Tự tạo 2 sheet dữ liệu:
ChiTieu: lưu các khoản chi.ThuNhap: lưu các khoản thu.
- Hỗ trợ phân loại giao dịch bằng hashtag.
- Xem 5 giao dịch gần nhất.
- Sửa giao dịch cuối cùng.
- Xóa giao dịch cuối cùng hoặc xóa theo dòng.
- Đặt ngân sách tháng bằng
/budget. - Tự cảnh báo khi chi tiêu tháng vượt ngân sách.
- Xem báo cáo theo ngày, tháng, năm.
- Với báo cáo ngày, bot hiển thị chi tiết từng khoản thu/chi đã dùng.
- Tạo biểu đồ thu/chi và biểu đồ chi tiêu theo danh mục bằng QuickChart.
- Google Apps Script.
- Google Sheets.
- Telegram Bot API.
- QuickChart API.
Bot tự tạo sheet nếu chưa có.
| Cột | Nội dung |
|---|---|
| A | Thời gian |
| B | Tên Khoản Chi |
| C | Số tiền (VND) |
| D | Phân loại |
| Cột | Nội dung |
|---|---|
| A | Thời gian |
| B | Tên Khoản Thu |
| C | Số tiền (VND) |
| D | Phân loại |
Trong file sothuchi.js, kiểm tra các hằng số đầu file:
const TOKEN = `TELEGRAM_BOT_TOKEN`;
const CHAT_ID = 'TELEGRAM_CHAT_ID';
const DEPLOYED_URL = 'GOOGLE_APPS_SCRIPT_WEB_APP_URL';Ý nghĩa:
TOKEN: token bot lấy từ BotFather.CHAT_ID: ID Telegram nhận thông báo.DEPLOYED_URL: URL Web App sau khi deploy Google Apps Script.
Khuyến nghị: không public file có chứa
TOKEN, vì ai có token có thể điều khiển bot của bạn.
- Tạo một Google Sheet mới.
- Vào
Extensions→Apps Script. - Xóa nội dung mặc định trong file script.
- Copy toàn bộ nội dung
sothuchi.jsvào Apps Script. - Sửa
TOKEN,CHAT_ID,DEPLOYED_URL. - Bấm
Deploy→New deployment. - Chọn loại deploy là
Web app. - Thiết lập:
Execute as:Me.Who has access:Anyone.
- Bấm
Deployvà cấp quyền. - Copy URL Web App vừa tạo và dán lại vào
DEPLOYED_URL. - Chạy thủ công hàm
setWebhook()một lần trong Apps Script. - Mở Telegram và nhắn
/helpcho bot để kiểm tra.
Mặc định, tin nhắn không có dấu + sẽ được hiểu là khoản chi.
Cà phê 30k #anuong
Đổ xăng 50k #dilai
Ăn tối 5tr5 #anuong
Mua đồ 550k #muasam
Kết quả ví dụ:
✅ Đã lưu:
🔴 Chi [Ăn uống] Cà phê: 30.000 ₫
Tin nhắn bắt đầu bằng dấu + sẽ được hiểu là khoản thu.
+ Lương 10m #luong
+ Thưởng 2tr5 #khac
+ Bán đồ cũ 500k #khac
Kết quả ví dụ:
✅ Đã lưu:
🟢 Thu [Tiền lương] Lương: 10.000.000 ₫
Bot hỗ trợ nhiều kiểu viết số tiền.
| Cách nhập | Giá trị hiểu được |
|---|---|
30k |
30.000đ |
500k |
500.000đ |
5tr |
5.000.000đ |
5m |
5.000.000đ |
5tr5 |
5.500.000đ |
5M5 |
5.500.000đ |
5.5m |
5.500.000đ |
5500k |
5.500.000đ |
5tr500 |
5.500.000đ |
1000000 |
1.000.000đ |
Ghi chú:
k,nghìn,ngàn: nhân 1.000.tr,m,triệu,củ: nhân 1.000.000.l,lít: nhân 100.000.
Bạn có thể thêm hashtag ở cuối tin nhắn để phân loại giao dịch.
| Hashtag | Hiển thị |
|---|---|
#anuong |
Ăn uống |
#dilai |
Đi lại |
#nhacua |
Nhà cửa |
#diennuoc |
Điện nước |
#giaitri |
Giải trí |
#muasam |
Mua sắm |
#suckhoe |
Sức khỏe |
#hochanh |
Học hành |
#luong |
Tiền lương |
#khac |
Khác |
Nếu không nhập hashtag, bot mặc định phân loại là Khác.
Hiển thị hướng dẫn sử dụng bot.
/help
/start
Xem 5 giao dịch gần nhất.
/recent
Ví dụ kết quả:
🕒 5 GIAO DỊCH GẦN NHẤT:
19/05/2026 08:10:00 🔴 Chi [Ăn uống] Cà phê: 30.000 ₫
19/05/2026 12:30:00 🔴 Chi [Đi lại] Đổ xăng: 50.000 ₫
19/05/2026 18:00:00 🟢 Thu [Tiền lương] Lương: 10.000.000 ₫
/budget
Ví dụ:
💡 Ngân sách tháng hiện tại: 5.500.000 ₫
/budget 5tr5
/budget 5M5
/budget 5.5m
/budget 5500k
Ví dụ kết quả:
✅ Ngân sách tháng đã đặt: 5.500.000 ₫
Nếu tổng chi tháng hiện tại vượt ngân sách, bot sẽ cảnh báo:
🚨 VƯỢT NGÂN SÁCH THÁNG: Đã tiêu quá 250.000 ₫!
Khi bạn thêm một khoản chi mới, bot cũng tự kiểm tra tổng chi trong tháng. Nếu vượt ngân sách, bot sẽ gửi cảnh báo ngay sau khi lưu giao dịch.
/report
/baocao
Bot mặc định báo cáo ngày hôm nay.
Ví dụ kết quả:
📅 BÁO CÁO HÔM NAY - 19/05/2026
──────────────
🟢 Thu hôm nay: 10.000.000 ₫
🔴 Chi hôm nay: 580.000 ₫
🏦 Số dư ví: 9.420.000 ₫
──────────────
🔴 PHÂN LOẠI CHI:
🔴 Ăn uống: 530.000 ₫
🔴 Đi lại: 50.000 ₫
──────────────
🟢 CHI TIẾT KHOẢN THU:
18:00 🟢 [Tiền lương] Lương: 10.000.000 ₫
──────────────
🔴 CHI TIẾT KHOẢN CHI:
08:10 🔴 [Ăn uống] Cà phê: 30.000 ₫
12:30 🔴 [Đi lại] Đổ xăng: 50.000 ₫
19:20 🔴 [Ăn uống] Ăn tối: 500.000 ₫
/report 19/05/2026
/baocao 19/05/2026
Báo cáo theo ngày cũng hiển thị chi tiết từng khoản thu/chi giống /report.
/report 05/2026
/baocao 05/2026
Ví dụ:
📊 BÁO CÁO THÁNG 05/2026
──────────────
🟢 Thu tháng 05/2026: 15.000.000 ₫
🔴 Chi tháng 05/2026: 6.200.000 ₫
🏦 Số dư tháng 05/2026: 8.800.000 ₫
──────────────
🟢 PHÂN LOẠI THU:
🟢 Tiền lương: 15.000.000 ₫
──────────────
🔴 PHÂN LOẠI CHI:
🔴 Ăn uống: 2.500.000 ₫
🔴 Đi lại: 800.000 ₫
🔴 Mua sắm: 2.900.000 ₫
Lưu ý: báo cáo tháng chỉ hiển thị tổng và phân loại, không liệt kê chi tiết từng giao dịch để tránh tin nhắn quá dài.
/report 2026
/baocao 2026
Báo cáo năm hiển thị tổng thu, tổng chi, số dư và phân loại thu/chi trong năm.
Bot dùng QuickChart để tạo ảnh biểu đồ và gửi lại Telegram.
/chart
/bieudo
Bot sẽ gửi 2 ảnh nếu có đủ dữ liệu:
- Biểu đồ cột so sánh tổng thu và tổng chi.
- Biểu đồ tròn phân bổ chi tiêu theo danh mục.
Ví dụ caption biểu đồ cột:
📊 THU / CHI HÔM NAY - 19/05/2026
🟢 Thu hôm nay: 10.000.000 ₫
🔴 Chi hôm nay: 580.000 ₫
🏦 Số dư ví: 9.420.000 ₫
Ví dụ caption biểu đồ tròn:
🥧 CHI TIÊU THEO DANH MỤC HÔM NAY - 19/05/2026
🔴 Chi hôm nay: 580.000 ₫
🏦 Số dư ví: 9.420.000 ₫
Nhập /report 19/05/2026 để xem chi tiết.
🔎 ĐÃ CHI THEO DANH MỤC:
🔴 Ăn uống: 530.000 ₫ (91.4%)
🔴 Đi lại: 50.000 ₫ (8.6%)
/chart 19/05/2026
/bieudo 19/05/2026
Dùng để xem biểu đồ thu/chi và biểu đồ danh mục chi trong một ngày cụ thể.
/chart 05/2026
/bieudo 05/2026
Ví dụ caption:
📊 THU / CHI THÁNG 05/2026
🟢 Thu tháng 05/2026: 15.000.000 ₫
🔴 Chi tháng 05/2026: 6.200.000 ₫
🏦 Số dư tháng 05/2026: 8.800.000 ₫
Ví dụ biểu đồ tròn theo tháng:
🥧 CHI TIÊU THEO DANH MỤC THÁNG 05/2026
🔴 Chi tháng 05/2026: 6.200.000 ₫
🏦 Số dư tháng 05/2026: 8.800.000 ₫
Nhập /report 05/2026 để xem chi tiết.
🔎 ĐÃ CHI THEO DANH MỤC:
🔴 Mua sắm: 2.900.000 ₫ (46.8%)
🔴 Ăn uống: 2.500.000 ₫ (40.3%)
🔴 Đi lại: 800.000 ₫ (12.9%)
/chart 2026
/bieudo 2026
Hiển thị biểu đồ thu/chi và biểu đồ phân bổ chi tiêu theo danh mục trong năm.
/edit Nội dung mới
Ví dụ:
/edit Cà phê 35k #anuong
/edit + Lương 12m #luong
Bot sẽ sửa dòng cuối cùng trong sheet tương ứng với loại giao dịch.
Ví dụ kết quả:
✏️ Đã sửa thành:
🔴 Chi [Ăn uống] Cà phê: 35.000 ₫
/delete
/delete thu
/delete 5
Lệnh này xóa dòng số 5 trong sheet ChiTieu.
/delete thu 5
Lệnh này xóa dòng số 5 trong sheet ThuNhap.
Bot hỗ trợ các định dạng sau:
| Mục đích | Định dạng | Ví dụ |
|---|---|---|
| Theo ngày | dd/MM/yyyy |
19/05/2026 |
| Theo tháng | MM/yyyy |
05/2026 |
| Theo năm | yyyy |
2026 |
Ví dụ:
/report 19/05/2026
/report 05/2026
/report 2026
/chart 19/05/2026
/chart 05/2026
/chart 2026
Một luồng sử dụng thường ngày:
/budget 5tr5
Cà phê 30k #anuong
Đổ xăng 50k #dilai
Ăn tối 5tr5 #anuong
+ Lương 10m #luong
/report
/chart
/recent
Kết quả mong đợi:
- Bot lưu từng giao dịch vào Google Sheets.
- Bot cảnh báo nếu tổng chi tháng vượt 5.500.000đ.
/reporthiển thị tổng thu, tổng chi, số dư, phân loại và chi tiết giao dịch hôm nay./chartgửi biểu đồ cột thu/chi và biểu đồ tròn chi theo danh mục./recenthiển thị 5 giao dịch gần nhất.
Kiểm tra các mục sau:
- Đã deploy Web App chưa.
DEPLOYED_URLcó đúng URL Web App mới nhất không.- Đã chạy
setWebhook()sau khi cập nhậtDEPLOYED_URLchưa. TOKENcó đúng token BotFather không.CHAT_IDcó đúng chat ID không.- Web App có quyền
Anyonekhông. - Vào Apps Script →
Executionsđể xem lỗi chi tiết.
Lỗi này xảy ra khi gửi tin nhắn Telegram bằng GET và nội dung quá dài. Code hiện đã dùng POST cho sendMessage, nên nếu gặp lỗi này hãy chắc chắn bạn đã deploy bản code mới nhất.
Kiểm tra:
- Giao dịch có đúng ngày hôm nay không.
- Thời gian trong sheet có định dạng
dd/MM/yyyy HH:mm:sskhông. - Bạn đang dùng
/reporthoặc/report dd/MM/yyyy; báo cáo tháng/năm không liệt kê chi tiết từng giao dịch.
Nếu Apps Script hiển thị lỗi font:
- Mở file
sothuchi.jsbằng editor hỗ trợ UTF-8. - Copy toàn bộ nội dung.
- Tạo file mới trong Apps Script.
- Paste lại code vào file mới.
- Lưu và deploy lại.
- Không chia sẻ công khai
TOKENTelegram bot. - Không public Google Sheet nếu có dữ liệu cá nhân.
- Nếu token bị lộ, vào BotFather tạo token mới.
- Nên cân nhắc chuyển
TOKEN,CHAT_ID,DEPLOYED_URLsangPropertiesServicethay vì hard-code trong file.
sothuchi.js: toàn bộ mã nguồn bot.README.md: hướng dẫn sử dụng và deploy.