VRP API Playground

    Tối ưu đội xe (VRP)

    Bài toán của người điều phối: n xe, m điểm giao. API quyết định xe nào đi điểm nào, theo thứ tự nào — trong giới hạn tải trọng, khung giờ và giờ làm việc.

    Kịch bản: Vừa giao vừa lấy hàng

    Xe chất 3 thùng ở kho giao cho đơn #1 và #2, rồi ghé đơn #3, #4 gom 3 thùng mang về kho. Nhìn kết quả: cột "Việc tại điểm" phân biệt ghé giao với ghé lấy, tải trên xe giảm về 0 sau hai điểm giao rồi tăng trở lại ở hai điểm lấy.

    • API trả về routes — mỗi xe một lộ trình, gồm các chặng theo đúng thứ tự chạy, kèm thời điểm tới và lượng hàng còn trên xe sau mỗi chặng.
    • Đơn nào không xe nào nhận được sẽ nằm ở unassigned thay vì làm hỏng cả lời giải — đó là cách biết mình thiếu xe hay đặt ràng buộc quá chặt.

    Đơn hàng (4)

    Tên này được API trả lại trên từng chặng, dễ đọc hơn mã đơn

    Nhập "vĩ độ, kinh độ" hoặc bấm biểu tượng để chọn trên bản đồ

    Hàng chất sẵn trên xe từ kho, dỡ xuống tại điểm này

    Hàng gom tại điểm này rồi mang ngược về kho

    Thời gian xe đứng lại để giao nhận, tính vào tổng hành trình

    →

    Để trống nếu nhận giờ nào cũng được; tới sớm thì xe phải chờ

    0 = bỏ được nếu thiếu xe · 10 = phải giao bằng được

    Chỉ xe đúng loại mới nhận được đơn này

    Tên này được API trả lại trên từng chặng, dễ đọc hơn mã đơn

    Nhập "vĩ độ, kinh độ" hoặc bấm biểu tượng để chọn trên bản đồ

    Hàng chất sẵn trên xe từ kho, dỡ xuống tại điểm này

    Hàng gom tại điểm này rồi mang ngược về kho

    Thời gian xe đứng lại để giao nhận, tính vào tổng hành trình

    →

    Để trống nếu nhận giờ nào cũng được; tới sớm thì xe phải chờ

    0 = bỏ được nếu thiếu xe · 10 = phải giao bằng được

    Chỉ xe đúng loại mới nhận được đơn này

    Tên này được API trả lại trên từng chặng, dễ đọc hơn mã đơn

    Nhập "vĩ độ, kinh độ" hoặc bấm biểu tượng để chọn trên bản đồ

    Hàng chất sẵn trên xe từ kho, dỡ xuống tại điểm này

    Hàng gom tại điểm này rồi mang ngược về kho

    Thời gian xe đứng lại để giao nhận, tính vào tổng hành trình

    →

    Để trống nếu nhận giờ nào cũng được; tới sớm thì xe phải chờ

    0 = bỏ được nếu thiếu xe · 10 = phải giao bằng được

    Chỉ xe đúng loại mới nhận được đơn này

    Tên này được API trả lại trên từng chặng, dễ đọc hơn mã đơn

    Nhập "vĩ độ, kinh độ" hoặc bấm biểu tượng để chọn trên bản đồ

    Hàng chất sẵn trên xe từ kho, dỡ xuống tại điểm này

    Hàng gom tại điểm này rồi mang ngược về kho

    Thời gian xe đứng lại để giao nhận, tính vào tổng hành trình

    →

    Để trống nếu nhận giờ nào cũng được; tới sớm thì xe phải chờ

    0 = bỏ được nếu thiếu xe · 10 = phải giao bằng được

    Chỉ xe đúng loại mới nhận được đơn này

    Xe (1)

    Xe #1

    Hiện trên lộ trình thay cho "Xe #1"

    Nhập "vĩ độ, kinh độ" hoặc bấm biểu tượng để chọn trên bản đồ

    Tổng hàng trên xe không được vượt mức này

    →

    Để trống nếu chạy giờ nào cũng được

    Quyết định xe nhận được những đơn nào

    Quay về kho thì quãng đường tính cả chặng về

    Mỗi màu là một xe. Đường nối là các chặng giữa các điểm dừng, không phải hình dạng đường thật.

    Code mẫu

    curl -X POST 'https://maps.vietmap.vn/api/vrp?api-version=1.1&apikey=YOUR_API_KEY' \
      -H 'Content-Type: application/json' \
      -d '{
      "jobs": [
        {
          "id": 1,
          "location": [
            106.70592,
            10.79628
          ],
          "service": 600,
          "delivery": [
            2
          ]
        },
        {
          "id": 2,
          "location": [
            106.7066,
            10.80189
          ],
          "service": 600,
          "delivery": [
            1
          ]
        },
        {
          "id": 3,
          "location": [
            106.68982,
            10.80159
          ],
          "service": 900,
          "pickup": [
            2
          ]
        },
        {
          "id": 4,
          "location": [
            106.695,
            10.785
          ],
          "service": 600,
          "pickup": [
            1
          ]
        }
      ],
      "vehicles": [
        {
          "id": 1,
          "start": [
            106.7,
            10.79
          ],
          "end": [
            106.7,
            10.79
          ],
          "capacity": [
            6
          ]
        }
      ]
    }'

    Thay YOUR_API_KEY bằng API key của bạn trước khi chạy.

    // Khi đưa vào sản phẩm, đọc key từ biến môi trường thay vì ghi cứng.
    const API_KEY = "YOUR_API_KEY";
    
    const params = new URLSearchParams([
      ["api-version", "1.1"],
      ["apikey", API_KEY],
    ]);
    
    const body = {
      "jobs": [
        {
          "id": 1,
          "location": [
            106.70592,
            10.79628
          ],
          "service": 600,
          "delivery": [
            2
          ]
        },
        {
          "id": 2,
          "location": [
            106.7066,
            10.80189
          ],
          "service": 600,
          "delivery": [
            1
          ]
        },
        {
          "id": 3,
          "location": [
            106.68982,
            10.80159
          ],
          "service": 900,
          "pickup": [
            2
          ]
        },
        {
          "id": 4,
          "location": [
            106.695,
            10.785
          ],
          "service": 600,
          "pickup": [
            1
          ]
        }
      ],
      "vehicles": [
        {
          "id": 1,
          "start": [
            106.7,
            10.79
          ],
          "end": [
            106.7,
            10.79
          ],
          "capacity": [
            6
          ]
        }
      ]
    };
    
    const response = await fetch(`https://maps.vietmap.vn/api/vrp?${params}`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(body),
    });
    if (!response.ok) {
      throw new Error(`Vietmap ${response.status}: ${await response.text()}`);
    }
    const data = await response.json();
    console.log(data);

    Thay YOUR_API_KEY bằng API key của bạn trước khi chạy.

    import requests
    
    # Khi đưa vào sản phẩm, đọc key từ biến môi trường thay vì ghi cứng.
    API_KEY = "YOUR_API_KEY"
    
    params = [
        ("api-version", "1.1"),
        ("apikey", API_KEY),
    ]
    
    body = {
        "jobs": [
            {
                "id": 1,
                "location": [
                    106.70592,
                    10.79628,
                ],
                "service": 600,
                "delivery": [
                    2,
                ],
            },
            {
                "id": 2,
                "location": [
                    106.7066,
                    10.80189,
                ],
                "service": 600,
                "delivery": [
                    1,
                ],
            },
            {
                "id": 3,
                "location": [
                    106.68982,
                    10.80159,
                ],
                "service": 900,
                "pickup": [
                    2,
                ],
            },
            {
                "id": 4,
                "location": [
                    106.695,
                    10.785,
                ],
                "service": 600,
                "pickup": [
                    1,
                ],
            },
        ],
        "vehicles": [
            {
                "id": 1,
                "start": [
                    106.7,
                    10.79,
                ],
                "end": [
                    106.7,
                    10.79,
                ],
                "capacity": [
                    6,
                ],
            },
        ],
    }
    
    response = requests.post("https://maps.vietmap.vn/api/vrp", params=params, json=body, timeout=60)
    response.raise_for_status()
    print(response.json())

    Thay YOUR_API_KEY bằng API key của bạn trước khi chạy.

    Tôi cần tích hợp VRP API (api-version 1.1) của Vietmap vào ứng dụng của mình.
    
    Tài liệu chính thức: https://maps.vietmap.vn/docs/map-api/vrp/
    
    Đây là một request mẫu đã chạy được trên Vietmap API Playground:
    
    POST https://maps.vietmap.vn/api/vrp?api-version=1.1&apikey=YOUR_API_KEY
    
    Body (JSON):
    ```json
    {
      "jobs": [
        {
          "id": 1,
          "location": [
            106.70592,
            10.79628
          ],
          "service": 600,
          "delivery": [
            2
          ]
        },
        {
          "id": 2,
          "location": [
            106.7066,
            10.80189
          ],
          "service": 600,
          "delivery": [
            1
          ]
        },
        {
          "id": 3,
          "location": [
            106.68982,
            10.80159
          ],
          "service": 900,
          "pickup": [
            2
          ]
        },
        {
          "id": 4,
          "location": [
            106.695,
            10.785
          ],
          "service": 600,
          "pickup": [
            1
          ]
        }
      ],
      "vehicles": [
        {
          "id": 1,
          "start": [
            106.7,
            10.79
          ],
          "end": [
            106.7,
            10.79
          ],
          "capacity": [
            6
          ]
        }
      ]
    }
    ```
    
    Tham số đang dùng:
    - api-version = 1.1
    
    Hãy viết code bằng [ngôn ngữ / framework của tôi] để gọi API này, với các yêu cầu:
    1. Đọc API key từ biến môi trường VIETMAP_API_KEY, không ghi cứng trong code.
    2. Truyền tham số qua query string đúng như request mẫu; tham số lặp lại (như `point`) phải giữ nguyên thứ tự.
    3. Xử lý lỗi theo mã HTTP của Vietmap:
       - 401: API key sai hoặc đã bị thu hồi.
       - 403: key bị giới hạn theo domain / IP không khớp.
       - 423: API chưa được bật cho consumer của key, HOẶC tài khoản hết credit — phân biệt bằng nội dung phản hồi (có cụm "exceeded credit" là hết credit).
       - 429: vượt giới hạn tần suất — thử lại với backoff tăng dần.
    4. Đặt timeout cho request, và định nghĩa kiểu dữ liệu (type / interface / dataclass) cho phản hồi.
    
    Nếu không chắc tên một trường, tra trong tài liệu ở link trên thay vì đoán.

    Dán vào ChatGPT, Claude… để sinh code tích hợp. Prompt không bao giờ chứa API key của bạn.