Skip to Content
راهنماهاوارد کردن محصولات

وارد کردن محصولات

Endpoint وارد کردن برای اجرای مکرر ساخته شده: بر اساس externalId خودتان upsert می‌کند و محصولی که با نسخه‌ی ذخیره‌شده یکسان باشد unchanged شمرده می‌شود و هزینه‌ای پایین‌دست ندارد. پس ساده‌ترین همگام‌سازی این است که هر بار کل فید را دسته‌دسته بفرستید.

۱. فید را دسته‌دسته بفرستید

POST .../products/import تا ۱٬۰۰۰ محصول در هر درخواست می‌گیرد.

const BASE = `https://api.plexit.ir/v1/assistants/${assistantCode}/products`; const headers = { Authorization: `Bearer ${process.env.PLEXIT_API_KEY}`, "Content-Type": "application/json", }; async function importAll(products) { const totals = { created: 0, updated: 0, unchanged: 0 }; for (let i = 0; i < products.length; i += 500) { const res = await fetch(`${BASE}/import`, { method: "POST", headers, body: JSON.stringify({ products: products.slice(i, i + 500) }), }); const body = await res.json(); if (!res.ok) throw new Error(`${body.response.status}: ${body.response.message}`); for (const key of Object.keys(totals)) totals[key] += body.data[key]; } return totals; }

هر دسته «همه یا هیچ» است و دوباره فرستادنش همیشه امن است. اگر درخواستی شکست خورد، مشکل را رفع کنید و همان دسته را دوباره بفرستید.

وقتی توضیحات طولانی است، دسته‌ها را چند صد محصولی نگه دارید: بدنه‌ی درخواست حداکثر ۳ مگابایت است.

۲. آنچه دیگر نمی‌فروشید را حذف کنید

وارد کردن هرگز چیزی حذف نمی‌کند. برای حذف محصولاتی که دیگر در فید نیستند، کاتالوگ را فهرست کنید، شناسه‌ها را مقایسه کنید و تفاوت را با POST .../products/delete پاک کنید.

async function removeMissing(feedIds) { const keep = new Set(feedIds); const gone = []; let cursor; do { const url = `${BASE}?limit=200${cursor ? `&cursor=${cursor}` : ""}`; const body = await (await fetch(url, { headers })).json(); for (const product of body.data.list) if (!keep.has(product.externalId)) gone.push(product.externalId); cursor = body.data.nextCursor; } while (cursor); for (let i = 0; i < gone.length; i += 1000) { await fetch(`${BASE}/delete`, { method: "POST", headers, body: JSON.stringify({ externalIds: gone.slice(i, i + 1000) }) }); } return gone.length; }

۳. بفهمید کِی قابل جستجو شده

خواندن فوری است و جستجو در پس‌زمینه به‌روز می‌شود. برای منتظر ماندن، state=pending را فهرست کنید و ببینید خالی است:

GET .../products?state=pending&limit=1

محصولی که در state=failed است خودکار دوباره تلاش می‌شود؛ اگر همان‌جا ماند، خود محصول را بررسی کنید — محصول ناموفق تقریباً همیشه محصولی است که سرویس جستجو آن را نپذیرفته (مثلاً مقداری که قابل ایندکس نیست).

نکته‌ها

  • در attributes عدد را به‌صورت عدد بفرستید ("ram": 8 نه "8 GB") و قیمت را در price: همین است که فیلترهای قیمت و بازه را کار می‌اندازد.
  • price و in_stock نام‌های رزرو ویژگی هستند؛ از فیلدهای price و inStock استفاده کنید.
  • سقف پیش‌فرض کاتالوگ ۱۰٬۰۰۰ محصول برای هر دستیار است.