مستندات API
همان موتور پاسخی که ویجت استفاده میکند، پشت یک کلید. یک مسیر کد دارد، نه دو تا — پس دروازهی خارج از حوزه، کش شباهت و رزرو اعتبار دقیقاً همانطور کار میکنند.
احراز هویت چطور است؟
یک هدر. کلید را از پنل میسازی و فقط همان یک بار میبینیاش.
Authorization: Bearer bbk_...
بررسی کلید
GET/api/v1/public/me
ارزانترین درخواست ممکن، برای اینکه ببینی کلید کار میکند. اعتباری مصرف نمیکند.
درخواست
curl https://bababot.ir/api/v1/public/me \ -H "Authorization: Bearer bbk_..."
پاسخ
{
"tenant": "فروشگاه من",
"bot": { "id": "...", "name": "دستیار" },
"credits_remaining": 1183,
"rate_limit_per_minute": 30
}یک پاسخ
POST/api/v1/public/chat
همان موتوری که ویجت استفاده میکند. user_id شناسهی کاربر نهایی در سیستم خودت است؛ قبل از ذخیره هش میشود، پس لازم نیست از قبل ناشناس باشد.
درخواست
curl -X POST https://bababot.ir/api/v1/public/chat \
-H "Authorization: Bearer bbk_..." \
-H "Content-Type: application/json" \
-d '{
"message": "گارانتی چند ماهه است؟",
"user_id": "customer-4471"
}'پاسخ
{
"answer": "گارانتی همهی محصولات ۱۸ ماه است.",
"refused": false,
"conversation_id": "8f3c...",
"message_id": 12904,
"sources": [{ "title": "شرایط گارانتی", "url": "https://..." }],
"cached": false,
"credits_charged": 1,
"model": "gpt-5.6-luna",
"latency_ms": 2140
}سینک محصولات
POST/api/v1/public/products
هر محصول یک رکورد ساختیافته با فیلدهای جدا — نه یک تکه متن. فقط name، brand و category در رتبهبندی دخالت میکنند؛ specs و description به پاسخ کمک میکنند ولی رتبه را عوض نمیکنند.
درخواست
curl -X POST https://bababot.ir/api/v1/public/products \
-H "Authorization: Bearer bbk_..." \
-H "Content-Type: application/json" \
-d '{
"products": [{
"external_id": "4471",
"name": "لپتاپ ایسوس ROG Strix G16",
"brand": "ASUS",
"category": "لپتاپ گیمینگ",
"price": 78500000,
"availability": true,
"url": "https://shop.example/p/4471",
"specs": { "رم": "۱۶ گیگ", "پردازنده": "i7-13650HX" }
}]
}'پاسخ
{ "received": 1, "written": 1, "embedded": 1 }خطاها چه شکلیاند؟
هر خطا یک code ماشینخوان، یک پیام فارسی و یک request_id دارد. آن شناسه را در تیکت بفرست تا کل ماجرا را در لاگ پیدا کنیم.
{
"error": {
"code": "rate_limited",
"message": "سقف ۳۰ درخواست در دقیقه برای این کلید پر شده.",
"request_id": "62adee26c466497e9bb196adf9f3eda2"
}
}| HTTP | code | معنی |
|---|---|---|
| 401 | invalid_api_key | کلید نادرست، باطلشده یا منقضی است. |
| 403 | permission_denied | پلن این حساب دیگر API عمومی ندارد. |
| 402 | plan_limit | سقف پلن پر شده — محصول، چتبات یا دانش. |
| 429 | rate_limited | بیش از ۳۰ درخواست در دقیقه با همین کلید. |
| 200 | refused: true | پاسخ داده شد ولی رد بود — اعتبار تمام، سقف روزانه، یا خارج از حوزه. خطا نیست. |
سؤالهای متداول
کلید API را کجا بسازم؟
در پنل، بخش «کلیدهای API». کلید فقط همان یک بار نمایش داده میشود چون بهصورت هش ذخیره میشود و ما هم نمیتوانیم دوباره ببینیمش. گم شد، یکی تازه بساز.
سقف درخواست چقدر است؟
۳۰ درخواست در دقیقه برای هر کلید. سقف روی کلید است نه روی حساب، تا یک اسکریپت از کنترل خارجشده بقیهی اتصالهایت را از کار نیندازد.
اعتبار چطور حساب میشود؟
دقیقاً مثل ویجت: همان موتور، همان دفتر اعتبار، همان سقفها. پاسخهایی که از کش میآیند یا دروازهی خارج از حوزه برشان میگرداند اعتباری نمیگیرند و در پاسخ با credits_charged صفر مشخصاند.
در کدام پلن است؟
پلن سازمانی. اگر پلنت API ندارد، ساخت کلید با خطای روشن رد میشود.