Tìm kiếm tài liệu...
Mẹo tìm kiếm
Hỏi bằng tiếng Việt. AI sẽ tìm đúng nội dung trong docs cho bạn.

API Push thông tin trường học (DTI)

Hướng dẫn API đẩy thông tin sử dụng LMS và chia sẻ học liệu của từng trường lên hệ thống DTI.


API đẩy thông tin trạng thái sử dụng LMSchia sẻ học liệu cho từng trường lên hệ thống DTI. Xem Tổng quan tích hợp DTI để biết thông tin kết nối và cấu hình push.

1. Endpoint

  • Method: POST
  • Path: /api/v1/lms/hub/push/schools
  • Batch: Tối đa 500 trường trong 1 request
  • Tần suất: Khuyến nghị 1 lần/ngày

2. Phân biệt với push metrics

Push Metrics (/hub/push)Push Schools (/hub/push/schools)
Mục đíchĐẩy chỉ số thống kê (accounts, rates, duration...)Đẩy thông tin trạng thái trường (có dùng LMS, có chia sẻ học liệu)
Tần suấtMỗi giờ hoặc mỗi ngày (tùy metric)1 lần/ngày
Nội dungDanh sách metrics với key + valueDanh sách trường với has_lms + shared_to_hub

3. Request body

{
  "measured_at": "2026-04-18T00:00:00.000Z",
  "schools": [
    {
      "provdoet_code": "01",
      "school_code": "SCHOOL_001",
      "school_level": "03",
      "school_year_code": 2025,
      "semester_code": 1,
      "division_code": "01001001",
      "has_lms": true,
      "shared_to_hub": true
    },
    {
      "provdoet_code": "01",
      "school_code": "SCHOOL_002",
      "school_level": "04",
      "school_year_code": 2025,
      "semester_code": 1,
      "division_code": "01001002",
      "has_lms": true,
      "shared_to_hub": false
    }
  ]
}
json

4. Mô tả các fields

Top-level fields

FieldBắt buộcTypeMô tả
measured_atstring (ISO 8601)Thời điểm đo dữ liệu. Không được trong tương lai. Hỗ trợ push data quá khứ khi tích hợp lần đầu.
schoolsarrayDanh sách trường (tối đa 500)

School object

FieldBắt buộcTypeMô tả
provdoet_codestring (max 10)Mã Sở GD&ĐT
school_codestring (max 50)Mã trường
school_levelstring01 Mầm non, 02 Tiểu học, 03 THCS, 04 THPT, 05 GDTX
school_year_codeintegerNăm học. VD: 2025 = năm học 2025-2026
semester_codeintegerHọc kỳ: 1 hoặc 2
division_codeKhôngstring (max 20)Mã quận/huyện (phục vụ thống kê theo đơn vị hành chính)
has_lmsbooleanTrường có đang sử dụng hệ thống LMS không
shared_to_hubbooleanTrường có chia sẻ học liệu lên Trục không

Lưu ý: Bộ 5 giá trị provdoet_code + school_code + school_level + school_year_code + semester_code xác định duy nhất 1 trường. Nếu trường đã tồn tại, thông tin sẽ được cập nhật.

5. Response

{
  "data": {
    "total": 2,
    "accepted": 2
  },
  "message": "OK"
}
json

6. Lưu ý quan trọng

Push data quá khứ khi tích hợp lần đầu

Khi LMS mới bắt đầu tích hợp, có thể push lại data lịch sử bằng cách gửi nhiều request với measured_at khác nhau:

# Push data tháng 1
curl -X POST .../api/v1/lms/hub/push/schools \
  -H "X-Api-Key: <key>" -H "Content-Type: application/json" \
  -d '{ "measured_at": "2026-01-15T00:00:00.000Z", "schools": [...] }'
 
# Push data tháng 2
curl -X POST .../api/v1/lms/hub/push/schools \
  -H "X-Api-Key: <key>" -H "Content-Type: application/json" \
  -d '{ "measured_at": "2026-02-15T00:00:00.000Z", "schools": [...] }'
bash

Quan trọng: Khi push data quá khứ, nên push theo thứ tự thời gian (tháng 1 trước, tháng 2 sau) để đảm bảo dữ liệu nhất quán.

Trường ngừng sử dụng LMS

Nếu trường ngừng sử dụng LMS, gửi has_lms: false. Hệ thống sẽ cập nhật trạng thái và phản ánh chính xác trên Dashboard (bao gồm tỷ lệ tăng/giảm so với tháng trước).

7. Ví dụ request đầy đủ

curl -X POST https://dtiapi.vstudy.edu.vn/api/v1/lms/hub/push/schools \
  -H "X-Api-Key: <api-key-don-vi-duoc-cap>" \
  -H "Content-Type: application/json" \
  -d '{
    "measured_at": "2026-04-18T00:00:00.000Z",
    "schools": [
      {
        "provdoet_code": "01",
        "school_code": "SCHOOL_001",
        "school_level": "03",
        "school_year_code": 2025,
        "semester_code": 1,
        "division_code": "01001001",
        "has_lms": true,
        "shared_to_hub": true
      },
      {
        "provdoet_code": "01",
        "school_code": "SCHOOL_002",
        "school_level": "04",
        "school_year_code": 2025,
        "semester_code": 1,
        "division_code": "01001002",
        "has_lms": true,
        "shared_to_hub": false
      },
      {
        "provdoet_code": "01",
        "school_code": "SCHOOL_003",
        "school_level": "02",
        "school_year_code": 2025,
        "semester_code": 1,
        "division_code": "01001001",
        "has_lms": false,
        "shared_to_hub": false
      }
    ]
  }'
bash