Skip to Content
راهنماهاپایش وضعیت پردازش اسناد

پایش وضعیت پردازش اسناد

پردازش اسناد ناهم‌زمان است و، امروز، هیچ وب‌هوک یا اعلان Pushای برای پایان یک Job وجود ندارد. GET /v1/assistants/:assistantCode/documents/jobs/:jobId تنها راهِ دانستن وضعیت یک Job است، و انتظار می‌رود آن را Poll کنید.

چرخه‌ی وضعیت

queued ──▶ processing ──▶ ready └──▶ failed

مقادیر ready و failed نهایی هستند — به‌محض دیدن هرکدام، Poll را متوقف کنید. errorMessage روی failed مقداردهی می‌شود؛ در غیر این صورت null است.

الگوی پیشنهادی: Backoff نمایی با یک سقف

در یک حلقه‌ی فشرده Poll نکنید. یک پیش‌فرض معقول: از ۱ ثانیه شروع کنید، تا یک سقف (مثلاً ۱۵ تا ۳۰ ثانیه) دو برابر کنید، و پس از یک Timeout معقول (مثلاً ۵ تا ۱۰ دقیقه) بسته به اندازه‌ی اسنادی که انتظار دارید، دست بکشید.

async function waitForIngestJob(assistantCode, jobId, { timeoutMs = 5 * 60_000 } = {}) { const start = Date.now(); let delay = 1000; while (true) { const res = await fetch( `https://<host>/v1/assistants/${assistantCode}/documents/jobs/${jobId}`, { headers: { Authorization: `Bearer ${process.env.PLEXIT_API_KEY}` } }, ); const { data, response } = await res.json(); if (!res.ok) throw new Error(`${response.status}: ${response.message}`); if (data.status === "ready") return data; if (data.status === "failed") { throw new Error(`Ingest job failed: ${data.errorMessage}`); } if (Date.now() - start > timeoutMs) { throw new Error(`Timed out waiting for ingest job ${jobId}`); } await new Promise((resolve) => setTimeout(resolve, delay)); delay = Math.min(delay * 2, 15_000); } }

پایش چند Job از یک بارگذاری

اگر چند فایل را در یک درخواست بارگذاری کرده باشید، چند شناسه‌ی Job دریافت کرده‌اید — آن‌ها را جداگانه Poll کنید (مثلاً Promise.all در Node، یا یک Thread Pool/Async Gather در Python). آن‌ها با زمان‌بندی خودشان تمام می‌شوند؛ یک PDF بزرگ و یک فایل متنی کوچک که با هم بارگذاری شده‌اند، لزوماً همزمان تمام نمی‌شوند.

هیچ Endpoint «Poll چند Job با هم» وجود ندارد — به‌ازای هر Job یک تماس GET .../jobs/:jobId. به‌جای Poll کردن همه‌ی آن‌ها هر ثانیه، فاصله‌ی Poll را برای هر Job جداگانه تنظیم کنید؛ الگوی Backoff بالا همین کار را به‌ازای هر Job انجام می‌دهد.