Skip to content

Tích hợp API bên thứ 3 — GPS, Cảng, ePort

Kết nối hệ thống với VietMap GPS, ePort và ADA để tự động nhận vị trí xe và sự kiện container — không cần nhập tay. Route: /settings/integrations.

Tổng quan

Mỗi connector hoạt động như một emitter sự kiện mới — downstream (Fleet, Container, SLA) không thay đổi logic, chỉ nhận thêm nguồn event từ bên ngoài.

ConnectorEmitterDownstream nhận
VietMap GPSVị trí xe real-time + gate timestampFleet Trip, Container state
ePortContainer events từ cảng Hải Phòng, Cát LáiContainer lifecycle, SLA, alert
ADAThông tin tàu, cảng, lịch trình ETAShipment ETA, SLA deadline

Connector = add-on

Mỗi connector là tính năng add-on — chỉ bật được khi có tài khoản thật của nhà cung cấp (VietMap, ePort). Không có mock data. Xem gói dịch vụ để biết connector nào được bao gồm.

Idempotent dedup

Mọi event nhận từ bên ngoài được dedup bằng externalEventId — gửi lại nhiều lần không tạo duplicate trong hệ thống.

VietMap GPS

Kết nối VietMap Fleet API để nhận vị trí xe real-time và phát hiện tự động khi xe vào/ra khu vực cảng (geofence).

Tính năng sau khi kết nối:

Tính năngMô tả
Vị trí real-timeTọa độ GPS cập nhật mỗi 30–60 giây từ thiết bị trên xe
Gate timestamp (geofence)Tự nhận biết xe vào/ra cổng cảng — thay nhập tay gate time
Trip IN_PROGRESS tự cập nhậtKhi xe bắt đầu di chuyển, Trip tự chuyển sang IN_PROGRESS
DELIVERED auto-detectKhi xe dừng tại địa chỉ đích > 10 phút, đề xuất mark DELIVERED

Các bước kết nối:

  1. Lấy VietMap API key — Đăng nhập tài khoản VietMap Fleet → API Management → tạo API key với quyền read vehicle location.

  2. Kết nối trong TKHQ — Vào /settings/integrationsVietMap GPS → nhập API key → nhấn Kết nối. Credentials được mã hóa AES-256 trước khi lưu.

  3. Map biển số xe — Trong danh sách xe Fleet → mỗi xe có trường vietmapDeviceId. Nhập ID thiết bị GPS tương ứng để liên kết.

  4. Cấu hình geofence cảng — Vào /settings/geofences → thêm khu vực cổng cảng (polygon trên bản đồ). Hệ thống tự phát hiện xe vào/ra và ghi gate timestamp.

ePort / ADA

ePort (Tân Cảng) và ADA (cảng Hải Phòng) cung cấp API theo dõi container real-time. Kết nối để TKHQ tự nhận sự kiện thay vì nhập tay từ email/zalo.

Sự kiện nhận từ cảng và tác động:

Sự kiện nhận từ cảngTác động trong TKHQ
DISCHARGED (tàu dỡ hàng)Container → DISCHARGED, SLA bắt đầu tính DEM
GATE_OUT (container ra cảng)Container → GATE_OUT, SLA DEM kết thúc, DET bắt đầu
GATE_IN (container vào cảng)Container → GATE_IN, tự update seal number
VESSEL_DEPARTED (tàu rời cảng)Booking → ON_VESSEL, ETA cập nhật
EMPTY_RETURNEDContainer → RETURNED, DET kết thúc, tính phí nếu có

SLA và Alert tự chạy

Sau khi kết nối ePort/ADA, SLA Engine nhận event tự động — không cần nhập thủ công. Alert DEM/DET sẽ đúng thời gian thực thay vì phụ thuộc người cập nhật.

Các bước kết nối:

  1. Đăng ký API tại cảng — Liên hệ ePort (Tân Cảng Sài Gòn) hoặc ADA (cảng Hải Phòng) để đăng ký tài khoản API doanh nghiệp. Nhận username/password hoặc API key.

  2. Nhập credentials vào TKHQ — Vào /settings/integrations → chọn ePort hoặc ADA → nhập credentials → test kết nối.

  3. Map container với account cảng — Hệ thống tự lắng nghe event cho tất cả container trong workspace. Chỉ nhận event cho container có số container khớp trong danh sách.

Bảo mật & add-on

Bảo mật credentials:

Biện phápChi tiết
Mã hóa at-restAES-256-GCM — credentials không lưu plaintext
Không log credentialsAPI key không xuất hiện trong access log hay error log
Revoke bất kỳ lúcNhấn Ngắt kết nối → credentials xóa khỏi hệ thống ngay
Per-workspace isolationCredentials của workspace A không dùng được ở workspace B

Add-on activation:

Add-onYêu cầu gói
VietMap GPS connectorPro trở lên + tài khoản VietMap thật
ePort connectorPro trở lên + tài khoản ePort doanh nghiệp
ADA connectorPro trở lên + tài khoản ADA

External API = emitter mới, downstream không đổi

Khi bật connector, chỉ có nguồn event thay đổi (từ nhập tay sang tự động). Toàn bộ logic downstream (SLA, alert, container state machine) hoạt động y hệt — không cần cấu hình lại.

SePay — Thanh toán VietQR

SePay là cổng thanh toán chính cho subscription và top-up token. Hệ thống nhận xác nhận tự động qua webhook HMAC-SHA256.

Luồng thanh toán đầy đủ:

Người dùng chọn gói
    → Hệ thống tạo order + QR code SePay
    → Người dùng quét QR + chuyển khoản
    → SePay nhận tiền → gọi webhook đến TKHQ
    → TKHQ xác thực HMAC-SHA256
    → Cập nhật subscription / token wallet
    → Emit payment.succeeded → Outbox → downstream

Nội dung chuyển khoản: Format TKHQ-{orderCode} được sinh tự động — không sửa. Webhook match theo nội dung này.

Idempotency: Nếu SePay gửi webhook 2 lần (retry), hệ thống chỉ xử lý lần đầu nhờ idempotencyKey = orderCode.

Webhook xác thực HMAC

TKHQ từ chối mọi webhook không có chữ ký HMAC-SHA256 hợp lệ từ SePay — bảo vệ chống fake payment notification.

Telegram Notifier

Gửi alert đến team nội bộ qua Telegram Bot. Hỗ trợ Message Thread ID để phân loại alert vào từng topic riêng trong supergroup.

Các loại alert gửi qua Telegram:

Loại alertKênh khuyến nghị
DEM/DET sắp hết#logistics-alerts
Lead mới từ website#sales
SLA breach#ops-urgent
Thanh toán thành công#finance
Xe sắp hết đăng kiểm#fleet

Cấu hình nhiều topic → mỗi loại alert đi đúng thread, tránh noise.

Xem hướng dẫn cài đặt chi tiết → Thông báo Telegram & Zalo.

Chế độ sandbox (môi trường phát triển)

VietMap GPS và ePort hoạt động ở chế độ sandbox trên môi trường dev/staging:

  • Không có dữ liệu thật từ xe/cảng
  • Dữ liệu được giả lập từ fixture
  • Cần tài khoản thật của VietMap / ePort để dùng trên production

Gated integrations

Các connector GPS và ePort chỉ hoạt động với tài khoản API thật. Không có chế độ demo trên production. Đây là chính sách đã thay đổi từ 2026-06-09 — các claim "live GPS tracking" trên marketing đã được cập nhật để phản ánh đúng thực tế.

Retry và error recovery

Tất cả event nhận từ bên ngoài (ePort, SePay webhook) đều đi qua queue BullMQ với 3 lần retry + exponential backoff:

Lần thửDelayHành động nếu vẫn fail
1Ngay lập tức
230 giây
35 phútMove vào dead-letter queue
Sau dead-letterAlert admin, cần xử lý thủ công

Dead-letter queue được xem tại Bull Board UI — admin có thể retry thủ công sau khi fix nguyên nhân gốc.