API لوكلاء AI

اربط وكيل AI الخاص بك بـ BlaBlaPrice. للبائع: يتصفح بنفسه الطلبات الجديدة حسب الفلتر ويرسل العروض حسب قائمة أسعارك. للمشتري: ينشئ الطلبات، ويتابع العروض، ويرشدك إلى الأفضل.

يعمل الوكيل في جهتك (Claude أو ChatGPT أو n8n أو برنامجك الخاص)، ونحن نمنحه الوصول عبر MCP أو API. الذكاء الاصطناعي الخاص بك يعمل لديك، ولا نرى مفاتيحه. لا يرى الوكيل بيانات تواصل الطرف الآخر إلا بعد تبادلها.

يُنشأ مفتاح الوكيل في لوحة التحكم ← «وكيل AI الخاص بي». التطبيقات ذات الموصلات تتصل بتسجيل الدخول، بدون مفتاح.

خادم MCP

العنوان https://blablaprice.com/api/mcp (Streamable HTTP، بدون جلسات). الوصول بتسجيل الدخول عبر OAuth أو بمفتاح في الترويسة Authorization: Bearer bbp_…. مجموعة الأدوات تعتمد على دورك: بائع أو مشترٍ.

Claude وChatGPT وتطبيقات أخرى تدعم الموصلات

أضف موصلًا مخصصًا (Custom connector / MCP) بالعنوان https://blablaprice.com/api/mcp. سيفتح التطبيق BlaBlaPrice: سجّل الدخول واضغط «سماح». يمكنك الفصل من «وكيل AI الخاص بي». تقنيًا: OAuth 2.1 مع PKCE والتسجيل الديناميكي، والوصف في /.well-known/oauth-authorization-server.

Claude Code

claude mcp add --transport http blablaprice https://blablaprice.com/api/mcp --header "Authorization: Bearer YOUR_KEY"

n8n

عقدة MCP Client Tool: Endpoint https://blablaprice.com/api/mcp، Authentication: Header Auth (Authorization = Bearer YOUR_KEY).

أدوات البائع

list_new_requestsطلبات جديدة حسب فلتر البائع لم يرد عليها بعد
get_requestطلب واحد: النص، صورة المشتري (إن وُجدت)، الفئة، الميزانية، المنطقة، المدة، هل توجد عروض أخرى، وعرضك مع مرتبته (ضمن أفضل 3 / 5 / 10)
send_offerإرسال عرض: النص (ماذا بالضبط، والسعر أو ما يتوقف عليه، والشروط) والصور
update_offerتعديل النص أو الصور ما دام المشتري لم يختر
withdraw_offerسحب العرض
my_offersعروضي؛ المقبولة منها مع بيانات تواصل المشتري
my_accountالرصيد، الفلتر، الحدود

أدوات المشتري

create_requestإنشاء طلب؛ يمكن عدم تحديد الفئة، وسنختارها بأنفسنا؛ صورة واحدة: image من POST /uploads (حتى 10 يوميًا)
find_categoryالفئات المرشحة لعبارة
my_requestsطلباتي مع عدد العروض
get_my_requestالطلب وكل العروض بدءًا من الأفضل: المرتبة، تقييمات البائع، نص البائع
extend_request / close_requestتمديد 7 أيام / إغلاق (بالتأكيد فقط)
prepare_accept → accept_offerقبول العرض على خطوتين: فقط بعد «نعم» من الشخص، وإذا كان ذلك مسموحًا في لوحة التحكم
my_contactsالصفقات المقبولة مع بيانات تواصل البائعين
my_accountالمناطق، الحدود، هل يُسمح بالقبول

REST API

الأساس https://blablaprice.com/api/v1، والردود بصيغة JSON، والمفتاح في الترويسة Authorization: Bearer bbp_….

GET /meالبائع، الرصيد، الفلتر، الحدود
GET /requests?since=&limit=طلبات جديدة حسب الفلتر. since: رقم آخر طلب مستلَم (من الحقل next_since) أو وقت بصيغة ISO 8601، وعندها تصل الأحدث فقط، من الأقدم إلى الأحدث. include_answered=1: مع الطلبات التي رددت عليها
GET /requests/{id}طلب واحد
POST /requests/{id}/offerإرسال عرض: {"comment": "…", "images": ["…"]}
GET /offers?status=عروضي: active (افتراضيًا)، outbid، accepted، all
GET /offers/{id}عرض واحد
PATCH /offers/{id}تعديل comment و/أو images
DELETE /offers/{id}سحب العرض
POST /uploadsصورة للعرض (multipart، الحقل file، JPG/PNG/WEBP حتى 10 ميغابايت) ← {"url": "…"}
لمفاتيح المشترين (GET /me يعمل للنوعين)
GET /categories?q=الفئات المرشحة
POST /my/requestsإنشاء طلب: {"text": "…", "category_id": 788, "budget": 15000, "region_id": 0, "days": 7, "image": "…"} (category_id وimage اختياريان؛ الصورة التي فيها بيانات تواصل تعلّق الطلب)
GET /my/requests?status=open, expired, accepted, closed, all
GET /my/requests/{id}الطلب والعروض (?sort=best|new)
POST /my/requests/{id}/extend, /closeتمديد / إغلاق ({"confirm": true})
POST /my/offers/{id}/prepare-accept, /acceptالقبول على خطوتين ({"confirm_token": "…"})
GET /my/contactsالصفقات المقبولة مع بيانات التواصل

مثال

curl -H "Authorization: Bearer YOUR_KEY" "https://blablaprice.com/api/v1/requests?limit=5"

curl -X POST -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"comment": "Bosch WAN28263، جديدة، ‏1,200 ر.ق.‏، ضمان سنتين، التوصيل خلال يومين"}' \
  https://blablaprice.com/api/v1/requests/319/offer

الطلب في الرد

{
  "id": 319,
  "text": "غسالة ملابس 8 كغ، جديدة، مع التوصيل",
  "category": {"id": 788, "name": "إلكترونيات / أجهزة منزلية / غسالات"},
  "budget": 1300,
  "currency": "QAR",
  "region": {"id": 0, "name": "كل قطر"},
  "status": "open",
  "created_at": "2026-09-29T14:20:09Z",
  "deadline": "2026-10-06T23:59:59Z",
  "has_offers": true,
  "my_offer": null
}

الأخطاء والحدود

الخطأ يكون دائمًا بالشكل {"error": {"code": "…", "message": "…"}}: 401: المفتاح مفقود أو غير صالح، 403: الوكيل متوقف مؤقتًا أو لا توجد نقاط (no_balance)، 404: الطلب مغلق أو خارج الفلتر، 409: العرض موجود بالفعل (duplicate) أو لم يعد قابلًا للتعديل (closed)، 422: بيانات غير صحيحة، 429: تجاوز الحد.

حتى 60 استدعاء في الدقيقة لكل مفتاح، وحتى 300 عرض من الوكيل يوميًا. إرسال العروض مجاني؛ تُخصم نقطة واحدة فقط عندما يقبل المشتري العرض. بدون نقاط يُحفظ العرض ويُراجع (moderation: held، والسبب no_balance)، لكن المشتري لا يراه؛ بعد الشحن أرسله مرة أخرى عبر update_offer.

الإشعارات (webhook)

إذا أدخلت في لوحة التحكم عنوان https://…، فسنرسل إليه فورًا طلب POST بصيغة JSON:

request.newطلب جديد حسب الفلتر (data.request)
offer.acceptedقبل المشتري العرض، مع بيانات تواصله (data.offer.buyer)
offer.outbidأصبح عرض آخر أفضل من عرضك (data.offer مع place وahead_have: ما تذكره العروض الأعلى)
offer.newللمشتري: عرض جديد على طلبه (data.offer، بدون بيانات تواصل)
offer.updatedللمشتري: عدّل البائع عرضه (data.offer)

المحتوى: {"id": "evt_…", "type": "request.new", "created_at": "…", "country": "ua", "data": {…}}. الترويسات: X-BBP-Event وX-BBP-Delivery والتوقيع X-BBP-Signature: sha256=…، وهو HMAC-SHA256 للمحتوى بالسر من لوحة التحكم.

$body = file_get_contents('php://input');
$sig = 'sha256=' . hash_hmac('sha256', $body, $secret);
if (!hash_equals($sig, $_SERVER['HTTP_X_BBP_SIGNATURE'] ?? '')) {
    http_response_code(401); exit;
}
$event = json_decode($body, true); // $event['type'], $event['data']

رد برمز 2xx. إذا لم يستجب العنوان، سنعيد المحاولة بعد 1 و5 و30 دقيقة وبعد ساعتين؛ وبعد 5 محاولات فاشلة ستتوقف الإشعارات مؤقتًا، وسنراسلك على بريدك.

chat-bubble