Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 3 — Không có API? Kết nối qua Database và file trung gian

Đã đọc 0/10 mục · còn khoảng 4 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Rất nhiều ERP/CRM Việt Nam không có API cho khách hàng, nhưng dữ liệu vẫn nằm trong một SQL Server / Oracle / MySQL nào đó. Khi đó, truy cập database hoặc trao đổi qua file là hai con đường mạnh mẽ và ổn định — miễn là bạn làm đúng kỷ luật.

Đọc qua database: an toàn nếu chỉ đọc

Nguyên tắc sống còn: chỉ đọc, không ghi thẳng vào bảng nghiệp vụ. ERP có hàng trăm ràng buộc (trigger, tính tồn kho, sổ cái) mà bạn không thấy. Ghi tay sẽ phá vỡ chúng.

Cách làm an toàn để đọc:

  • Xin nhà cung cấp/DBA tạo một user chỉ có quyền SELECT.
  • Tốt hơn nữa: yêu cầu họ tạo view riêng cho bạn (ví dụ v_agent_tonkho), để nếu schema gốc đổi, view vẫn giữ giao diện ổn định.
  • Agent gọi wrapper, wrapper chạy query trên view.
import pyodbc

def ton_kho(ma_sp: str) -> dict:
    """Doc ton kho tu view read-only."""
    conn = pyodbc.connect(CONN_STR_READONLY, timeout=5)
    cur = conn.cursor()
    cur.execute(
        "SELECT ten, so_luong, kho FROM v_agent_tonkho WHERE ma_sp = ?",
        ma_sp)                       # luon dung parameter, khong noi chuoi
    row = cur.fetchone()
    conn.close()
    if not row:
        return {"found": False}
    return {"found": True, "ten": row.ten,
            "so_luong": int(row.so_luong), "kho": row.kho}

Lưu ý luôn dùng parameter (?) — không bao giờ nối chuỗi SQL, vì agent có thể đưa input độc hại (SQL injection).

Ghi qua bảng trung gian (staging table)

Khi cần ghi mà không có API, đừng ghi vào bảng nghiệp vụ. Thay vào đó:

  • Tạo một bảng trung gian agent_don_hang_cho do bạn sở hữu.
  • Agent chỉ INSERT vào bảng trung gian này.
  • Một job/stored procedure của ERP (do nhà cung cấp viết) sẽ đọc bảng đó và nhập chính thức theo đúng nghiệp vụ.
Cách này biến ERP thành người "nghiệm thu" dữ liệu, agent không bao giờ chạm trực tiếp vào sổ cái.

Trao đổi qua file (rất phổ biến với ERP cũ)

Nhiều hệ thống chỉ nhận dữ liệu qua file drop: bạn đặt file CSV/XML vào một thư mục SFTP, ERP tự import theo lịch. Ngược lại, ERP xuất báo cáo ra file để bạn đọc.

Agent tao don --> ghi don_2026_07_10.csv --> SFTP inbox
                                          --> ERP import luc 22h
ERP xuat ton_kho.csv --> SFTP outbox --> Agent doc buoi sang

Quy tắc file an toàn: ghi ra tên tạm .tmp rồi mới rename sang tên thật, để ERP không đọc nhầm file đang viết dở (atomic write).

Khung quyết định đọc/ghi

  • Cần đọc? → View read-only > query bảng trực tiếp > file export.
  • Cần ghi? → API wrapper > bảng staging + job ERP > file drop. Không bao giờ UPDATE/INSERT thẳng bảng nghiệp vụ.

Các bước triển khai

  • Xác định đọc hay ghi cho từng use case.
  • Xin quyền tối thiểu (SELECT-only cho đọc).
  • Yêu cầu view hoặc bảng staging thay vì đụng bảng gốc.
  • Dùng parameterized query, đặt timeout.
  • Với file: thống nhất định dạng, encoding (UTF-8/Windows-1258), và cơ chế atomic write.
  • Test trên staging, đối chiếu số liệu với ERP.

Sai lầm thường gặp

  • UPDATE/INSERT thẳng bảng nghiệp vụ → hỏng tồn kho, sổ cái, mất bảo hành.
  • Nối chuỗi SQL từ input agent → SQL injection.
  • Đọc file đang ghi dở vì không dùng atomic write → dữ liệu cụt.
  • Sai encoding với dữ liệu tiếng Việt → mất dấu, lỗi ký tự.
  • Cấp quyền db admin cho agent thay vì read-only tối thiểu → rủi ro thảm họa.

Đối chiếu dữ liệu: đừng tin mù kênh gián tiếp

Khi đọc qua view hay file thay vì API chính thức, luôn có rủi ro số liệu lệch so với màn hình ERP mà nhân viên nhìn thấy. Trước khi cho agent chạy thật, hãy làm một bước đối soát: lấy vài mã sản phẩm, so tồn kho agent đọc được với tồn kho hiển thị trên ERP. Nếu lệch, thường là do view tính thiếu một loại kho, hoặc file export bị trễ một chu kỳ. Bước đối chiếu nhỏ này giúp bạn phát hiện sai lệch nghiệp vụ trước khi nó thành đơn hàng sai.

Xử lý dữ liệu tiếng Việt trong file

File trao đổi với ERP cũ ở Việt Nam hay dính vấn đề mã hóa: ERP xuất ra Windows-1258 hoặc TCVN3 trong khi hệ thống của bạn mặc định UTF-8, dẫn tới mất dấu hoặc lỗi ký tự. Luôn thống nhất và ghi rõ encoding trong tài liệu tích hợp, kiểm tra một file mẫu có dấu tiếng Việt trước khi chạy hàng loạt. Ngoài ra, đồng bộ cả định dạng ngày (dd/MM/yyyy hay yyyy-MM-dd) và dấu phân cách số thập phân để tránh lệch số tiền.

Tổng kết

Không có API không phải ngõ cụt. Database read-only, bảng staging và file trung gian cho bạn kênh ổn định hơn cả RPA. Chìa khóa là kỷ luật: chỉ đọc thì đọc qua view, muốn ghi thì để ERP tự nghiệm thu, đối chiếu số liệu trước khi tin, và không bao giờ chạm thẳng vào bảng nghiệp vụ.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi