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ống | Thử lại? | Cách làm |
|---|---|---|
| Hết thời gian chờ, mất kết nối | Có | Thử lại với cùng Idempotency-Key |
| 429 rate_limited | Có | Chờ theo Retry-After rồi thử lại |
| 500 internal_error | Có | Exponential backoff, dùng cùng khóa lũy đẳng |
| 422 asset_not_ready | Có | Chờ tài nguyên chuyển sang available |
| 400 / 401 / 403 / 404 / 409 | Không | Sử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ạn | Không | Bổ 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ụ failed | Tùy mã lỗi | Xem 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");
}