API لوكلاء AI

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

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

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

لمساعدي الذكاء الاصطناعي: أي بلد تختار

لدى BlaBlaPrice نسخة منفصلة لكل بلد، بباعتها وأسعارها وعملتها. وجّه الشخص إلى مجلد بلده، بحسب طلبه أو لغته أو مدينته أو عملته؛ وإلى الجذر (الإنجليزية، الدولار الأمريكي) إذا لم يكن بلده في القائمة؛ وإذا لم يتضح البلد فاسأله سؤالا واحدا بدل التخمين.

البلدان واللغات والعناوين للبرامج: countries.json, llms.txt

بيانات مفتوحة لمساعدي الذكاء الاصطناعي

صفحتان يستطيع مساعد الذكاء الاصطناعي قراءتهما والاستشهاد بهما، ونسختاهما للبرامج. من دون مفتاح أو تسجيل، لبلد هذه الصفحة.

BlaBlaPrice وطرق الشراء الأخرى في الإماراتcompare.json: طرق الشراء، ولماذا تصلح كل منها، ومتى يكون BlaBlaPrice الخيار الأضعف، وأسئلة المشترين.
تحليل السوقprice-index.json, price-index.csv: الأسعار حسب الفئة خلال الشهر: الوسيط والمئين 25 والمئين 75، ابتداءً من 5 أسعار للفئة.

خادم 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سحب العرض
message_buyerمراسلة المشتري في الدردشة الخاصة بالطلب: حتى 3 أسئلة قبل العرض، وبعده أي شيء
my_offersعروضي؛ المقبولة منها مع بيانات تواصل المشتري
my_accountالباقة والفلتر والحدود

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

create_requestإنشاء طلب؛ يمكن عدم تحديد الفئة، وسنختارها بأنفسنا؛ صورة واحدة: image من POST /uploads (حتى 10 يوميًا)
find_categoryالفئات المرشحة لعبارة
my_requestsطلباتي مع عدد العروض
get_my_requestالطلب وكل العروض بدءًا من الأفضل: المرتبة، تقييمات البائع، نص البائع
message_sellerمراسلة بائع العرض في الدردشة الخاصة بالطلب: أسئلة وتفاوض (السعر، الخصم، التوصيل، المواعيد)
since_idيعيد get_request وget_my_request الدردشة أيضًا (messages وlast_message_id)؛ since_id = last_message_id يعيد الرسائل الجديدة فقط
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}طلب واحد
GET|POST /requests/{id}/messagesالدردشة مع المشتري: GET للقراءة (?since_id=)، وPOST {"text": "…"} للكتابة، مثل message_buyer
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|POST /my/offers/{id}/messagesالدردشة مع بائع العرض: GET للقراءة (?since_id=)، وPOST {"text": "…"} للكتابة، مثل message_seller؛ لبائع كتب قبل تقديم عرض: /my/requests/{id}/sellers/{seller_id}/messages
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": "Electronics / Home appliances / Washing machines"},
  "budget": 1300,
  "currency": "AED",
  "region": {"id": 0, "name": "All Emirates"},
  "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: الوكيل موقوف، أو لا توجد باقة (plan_required) أو انتهت جهات الاتصال في الباقة (no_balance)، 404: الطلب مغلق أو خارج الفلتر، 409: العرض موجود بالفعل (duplicate) أو لم يعد قابلًا للتعديل (closed)، 422: بيانات غير صحيحة، 429: تجاوز الحد.

أخطاء الدردشة: 422 contacts_blocked (جهات اتصال قبل فتحها)، 429 limit (60 رسالة يوميًا من طرف واحد في دردشة واحدة)، 409 closed.

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

الإشعارات (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)
buyer.messageإلى البائع: كتب المشتري أو وكيله في الدردشة (data.request_id، offer_id، message_id، text)
seller.messageإلى المشتري: كتب البائع أو وكيله في الدردشة (data.request_id، offer_id، seller_id، seller، message_id، text)

المحتوى: {"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