Hướng dẫn kết nối

Thiết lập Google Drive và Gmail để hệ thống hoạt động tự động

Tổng quan

Hệ thống cần 2 kết nối để hoạt động tự động:

  • Gmail OAuth — đọc email từ ShopeeFood / GrabFood của từng chi nhánh
  • Google Drive — lưu file XLSX lên folder tháng tự động
  • Telegram Bot — nhận cảnh báo scan, lỗi parse, email bất thường theo từng chi nhánh
1

Chia sẻ thư mục Google Drive cho hệ thống

Hệ thống dùng Service Account (tài khoản robot của Google) để tự động tải file lên Drive — không cần đăng nhập thủ công. Bạn chỉ cần chia sẻ thư mục Drive cho email robot một lần duy nhất.

  1. 1
    Truy cập Google Drive
    Mở drive.google.com bằng tài khoản Google của công ty (hoặc tài khoản cá nhân bạn muốn lưu file).
  2. 2
    Tạo thư mục gốc (nếu chưa có)

    Nhấn + MớiThư mục → đặt tên, ví dụ: SFGF - Chè Liên

    Mỗi chi nhánh có thể dùng thư mục riêng hoặc chung 1 thư mục.

  3. 3
    Lấy Folder ID từ URL

    Mở thư mục vừa tạo. Nhìn URL trên trình duyệt:

    https://drive.google.com/drive/folders/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms

    Phần được tô vàng chính là Folder ID. Copy lại.

  4. 4
    Chia sẻ thư mục cho Service Account

    Nhấn chuột phải vào thư mục → Chia sẻChia sẻ

    Nhập email Service Account vào ô "Thêm người":

    Email Service Account của hệ thống:
    invoice-agent@che-lien-agents.iam.gserviceaccount.com

    Quyền truy cập: chọn Người chỉnh sửa (Editor).

    Bỏ tick "Thông báo cho mọi người" → nhấn Chia sẻ.

  5. 5
    Điền Folder ID vào Setup

    Vào trang Setup → tìm chi nhánh tương ứng → dán Folder ID vào ô Google Drive Folder ID → nhấn Lưu.

    Mỗi chi nhánh (HP, ĐBP) có thể điền folder riêng. Để trống → dùng folder mặc định cấu hình bởi admin.

Cấu trúc thư mục sau khi kết nối
📁 SFGF - Chè Liên                    ← Thư mục gốc (bạn tạo)
   📁 File Dữ Liệu                     ← Tự động tạo
      📁 Dữ Liệu GF T3/2026            ← Tự động tạo theo tháng
         📄 HP_19032026_dulieu_GF.xlsx
         📄 DBP_19032026_dulieu_GF.xlsx
      📁 Dữ Liệu SF T3/2026
         📄 HP_19032026_dulieu_SF.xlsx
         📄 DBP_19032026_dulieu_SF.xlsx
   📁 File ASP                         ← Tự động tạo
      📁 ASP GF T3/2026
         📄 HP_19032026_ASP_GF.xlsx
         📄 DBP_19032026_ASP_GF.xlsx
      📁 ASP SF T3/2026
         📄 HP_19032026_ASP_SF.xlsx
         📄 DBP_19032026_ASP_SF.xlsx

Mỗi kênh (SF/GF) tạo 2 file riêng để đối soát độc lập.

2

Kết nối Gmail của từng chi nhánh

Hệ thống cần quyền đọc Gmail để tự động tải file báo cáo từ ShopeeFood và GrabFood. Mỗi chi nhánh kết nối một lần — hệ thống sẽ tự gia hạn token mà không cần làm lại.

  1. 1
    Vào trang Setup
    Truy cập Setup → chọn chi nhánh cần kết nối.
  2. 2
    Nhấn Kết nối Gmail
    Nhấn nút Kết nối Gmail màu xanh. Trình duyệt sẽ chuyển sang trang đăng nhập Google.
  3. 3
    Đăng nhập đúng tài khoản Gmail

    Đăng nhập bằng Gmail của chi nhánh đó (email nhận báo cáo từ ShopeeFood/GrabFood).

    Lưu ý: Nếu bạn đang đăng nhập nhiều tài khoản Google, hãy chọn đúng tài khoản của chi nhánh. Nhầm tài khoản sẽ không scan được email.
  4. 4
    Cấp quyền
    Google sẽ hiển thị màn hình yêu cầu quyền. Nhấn Tiếp tục / Allow để đồng ý. Hệ thống chỉ đọc email — không gửi, không xóa.
  5. 5
    Hoàn tất
    Sau khi cấp quyền, trang sẽ tự chuyển về Setup và hiện thông báo Kết nối thành công kèm email vừa kết nối.
Hết hạn / lỗi kết nối? Nhấn Kết nối lại để làm lại bước này. Token cũ sẽ được thay thế tự động.
3

Thiết lập Telegram nhận cảnh báo

Hệ thống gửi thông báo Telegram khi scan xong, có lỗi parse, email bất thường hoặc dữ liệu không khớp kế toán. Mỗi chi nhánh có thể nhận cảnh báo vào group/chat riêng.

Lưu ý phân quyền: TELEGRAM_BOT_TOKEN do admin cấu hình trong .env (1 lần duy nhất). Chat ID từng chi nhánh điền tại trang Setup (không cần admin).
Bước A — Tạo Telegram Bot (Admin thực hiện 1 lần)
  1. 1
    Mở BotFather
    Mở Telegram → tìm kiếm @BotFather → nhấn Start.
  2. 2
    Tạo bot mới

    Gửi lệnh /newbot → BotFather hỏi tên bot → nhập tên hiển thị, ví dụ: Chè Liên SFGF

    Tiếp theo nhập username (phải kết thúc bằng bot), ví dụ: chelien_sfgf_bot

  3. 3
    Lưu Bot Token

    BotFather trả về token dạng:

    7123456789:AAGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Admin điền vào .env trên VPS:

    TELEGRAM_BOT_TOKEN=7123456789:AAGxxx...
Bước B — Lấy Chat ID (mỗi chi nhánh tự làm)
Chat cá nhân
  1. Tìm bot vừa tạo trên Telegram
  2. Nhấn Start (bắt buộc để bot nhận được tin)
  3. Mở trình duyệt, truy cập:
api.telegram.org/bot{TOKEN}/getUpdates

Tìm "chat":{"id": → số dương là Chat ID cá nhân.

Group / Kênh
  1. Thêm bot vào group với quyền thành viên
  2. Gửi 1 tin nhắn bất kỳ trong group
  3. Mở getUpdates tương tự bên trái

Chat ID group là số âm, dạng -1001234567890.

Group cần cấp quyền bot là Admin để gửi được tin.
Ví dụ kết quả getUpdates
{
  "result": [{
    "message": {
      "chat": {
        "id": -1009876543210,    ← Chat ID (copy số này)
        "title": "Chè Liên HP - Báo cáo",
        "type": "group"
      }
    }
  }]
}
Bước C — Điền Chat ID vào Setup
  1. 1
    Vào trang Setup
    Truy cập Setup → tìm card chi nhánh tương ứng.
  2. 2
    Điền Telegram Chat ID
    Dán Chat ID vào ô Telegram Chat ID → nhấn Lưu. Mỗi chi nhánh (HP, ĐBP) có thể điền chat ID khác nhau.
  3. 3
    Kiểm tra
    Chạy 1 lần scan tại Auto Scan → sau khi xong sẽ nhận được tin nhắn tóm tắt kết quả.
Các loại cảnh báo sẽ nhận được
Scan hoàn tất — tóm tắt số email, số ngày, tổng thực nhận, link Drive
⚠️Classify Conflict — AI và rule pattern không đồng ý về loại email → vẫn xử lý nhưng cần kiểm tra
🚨Zero Reports — scan xong mà 0 báo cáo nào được xử lý → có thể SF/GF đổi sender
🚨GF PDF Sanity Fail — thực nhận ≠ giá trị - CK - thuế (lỗi nghiêm trọng, cần kiểm tra thủ công)
Nếu để trống Chat ID → hệ thống dùng TELEGRAM_CHAT_ID mặc định từ env (nếu admin đã cấu hình).
4

Kiểm tra kết nối hoạt động

  1. 1
    Kiểm tra Gmail
    Vào Auto Scan → nhấn Scan ngay cho chi nhánh vừa kết nối. Nếu có email chưa xử lý, hệ thống sẽ liệt kê file và trạng thái bên dưới.
  2. 2
    Kiểm tra Drive
    Sau khi scan thành công, vào thư mục Drive đã chia sẻ — kiểm tra có thư mục tháng và 2 file XLSX được tạo không.
  3. 3
    Kiểm tra lịch sử
    Vào Lịch sử — bản ghi mới nhất sẽ hiện link Drive trực tiếp.
5

Sử dụng hàng ngày

Tự động (khuyến nghị)

Cron job tự chạy 7:00 AM mỗi ngày. Hệ thống scan email, parse file, tạo XLSX và upload Drive mà không cần thao tác.

Bật/tắt tại trang Cấu hình.

Upload thủ công

Khi không nhận được email hoặc cần xử lý lại: vào Convert, tải file CSV/PDF lên, hệ thống xử lý và cho download ngay.

Quy trình mỗi tháng
  1. Cuối tháng: vào Lịch sử lọc theo tháng → tải file ASP MISA về
  2. Import file XLSX vào phần mềm MISA theo hướng dẫn của MISA
  3. File Dữ Liệu dùng để đối soát với ShopeeFood/GrabFood
6

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

File không xuất hiện trên Drive sau khi scan?
Kiểm tra: (1) Đã chia sẻ folder cho email Service Account với quyền Editor chưa, (2) Folder ID đã điền đúng trong Setup chưa, (3) Admin đã cấu hình GOOGLE_SERVICE_ACCOUNT_JSON trong hệ thống chưa.
Scan báo lỗi 'No Gmail token'?
Kết nối Gmail chưa được thực hiện hoặc đã hết hạn. Vào Setup → Kết nối lại Gmail cho chi nhánh đó.
Email đã có nhưng scan không thấy?
Kiểm tra Gmail: email có bị lọc vào spam hoặc đã có label 'SFGF_Processed' chưa. Nếu nhầm label, vào Gmail xóa label đó rồi scan lại.
Muốn xử lý lại file đã convert?
Dùng tính năng Upload thủ công tại trang Convert — tải file gốc lên, hệ thống sẽ overwrite dữ liệu cũ theo ngày.
Cần xử lý nhiều ngày trước đó?
Upload thủ công từng file CSV/PDF của các ngày đó tại trang Convert. Hoặc nhờ admin mở rộng khoảng thời gian scan email.
Nút 'Xóa dữ liệu test' (Reset) dùng để làm gì?
Xem Phần 6 bên dưới để biết chi tiết.
7

Nút "Xóa dữ liệu test" — dùng khi nào và lưu ý gì?

Nút Xóa dữ liệu test nằm ở trang Setup. Mục đích: xóa sạch toàn bộ dữ liệu thử nghiệm trước khi đưa hệ thống vào sử dụng thật, đảm bảo không có dữ liệu rác lẫn vào báo cáo chính thức.

Sẽ bị xóa
  • • Toàn bộ lịch sử convert (ConvertHistory)
  • • Dữ liệu tổng hợp theo ngày (DailyData)
  • • Số chứng từ reset về NVK00001
Không bị ảnh hưởng
  • • Kết nối Gmail của từng chi nhánh
  • • Cấu hình tài khoản kế toán (TK mapping)
  • • Tên chi nhánh và cấu hình khác
  • • File XLSX đã upload lên Google Drive
  • • Label email trong Gmail (SFGF_Processed)
Quy trình chuẩn khi bắt đầu dùng thật
  1. Test hệ thống với dữ liệu thật của 1–2 ngày để kiểm tra file xuất đúng
  2. Trao đổi với kế toán xác nhận số chứng từ bắt đầu (ví dụ: NVK00123 nếu đã dùng đến NVK00122 trong MISA)
  3. Nhấn Xóa dữ liệu test để xóa sạch dữ liệu thử nghiệm
  4. Vào Cấu hình → cập nhật Số chứng từ bắt đầu đúng với số kế toán cung cấp
  5. Từ nay hệ thống sẽ đánh số chứng từ liên tục không trùng
Không thể hoàn tác. Sau khi nhấn Reset, toàn bộ lịch sử trong hệ thống sẽ bị xóa vĩnh viễn. File trên Google Drive vẫn còn nhưng không truy cập được qua UI nữa. Chỉ thực hiện khi chắc chắn đã hoàn tất giai đoạn test.