Chuyển đến nội dung

Tài liệu API · Độ tin cậy

Khuyến nghị thử lại

Lỗi nào nên thử lại và cách backoff.

Tình huốngThử lại?Cách làm
Hết thời gian chờ, mất kết nốiCóThử lại với cùng Idempotency-Key
429 rate_limitedCóChờ theo Retry-After rồi thử lại
500 internal_errorCóExponential backoff, dùng cùng khóa lũy đẳng
422 asset_not_readyCóChờ tài nguyên chuyển sang available
400 / 401 / 403 / 404 / 409KhôngSửa yêu cầu rồi mới gửi lại
402 không đủ hạn mức hoặc giới hạnKhôngBổ sung hạn mức, điều chỉnh hạn mức Key hoặc max_budget rồi mới gửi lại
Tác vụ failedTùy mã lỗiXem cách xử lý theo mã lỗi tác vụ; gửi lại phải dùng khóa lũy đẳng mới

Backoff khuyến nghị: lần đầu chờ 1 giây, mỗi lần sau ×2, cộng thêm độ trễ ngẫu nhiên 0–500 mili giây, tối đa 5 lần. Nền tảng đã tự thử lại và chuyển đổi ở cấp kênh, nên bạn không cần gửi lặp lại cùng một tác vụ.

Node.js
// Dùng ID nghiệp vụ duy nhất làm khóa lũy đẳng: thử lại sau khi hết thời gian chờ sẽ không tạo trùng tác vụ
async function submit(order) {
  const key = `order-${order.id}-v${order.revision}`;
  for (let attempt = 0; attempt < 5; attempt++) {
    try {
      const res = await fetch("https://cn-api.aitoken.tools/v1/videos/generations", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.AITOKEN_API_KEY}`,
          "Idempotency-Key": key,
          "Content-Type": "application/json",
        },
        body: JSON.stringify(order.payload),
      });
      if (res.status < 500 && res.status !== 429) return res.json();
    } catch {
      // Lỗi mạng: tiếp tục thử lại với cùng key
    }
    await new Promise((r) => setTimeout(r, 2 ** attempt * 1000 + Math.random() * 500));
  }
  throw new Error("submit failed");
}