توثيق المطوّرين
ابنِ تطبيقات العملاء والسائقين والتجّار على واجهة API واحدة. اقرأ واكتب المطاعم والقوائم والطلبات والسائقين؛ واستقبل الأحداث الفورية عبر webhooks موقّعة. كل شيء مقيّد بنطاق مالك الرمز.
🛍️ تطبيق العميل 🛵 تطبيق السائق 🧑🍳 تطبيق التاجر
تبني للسوق؟ توثيق مطوّري التطبيقات → · توثيق مطوّري القوالب →
learn_platform يهيّئه، get_liquid_reference يمنحه القائمة البيضاء المعتمدة، و
validate_theme يشغّل فحوص السوق نفسها على مُخرجاته — دورة التعلّم → البناء → التحقّق الكاملة دون مغادرة محرّرك. اتّصل بأمر واحد →
البدء
أنشئ رمز API من لوحة التحكم ضمن رموز API و Webhooks. اختر read و/أو write الصلاحيات وانسخ الرمز — يُعرض مرّة واحدة فقط.
https://www.menubarcode.com/api/v1فحص سريع للتأكّد من عمل رمزك:
curl https://www.menubarcode.com/api/v1/restaurants \
-H "Authorization: Bearer YOUR_TOKEN"
GET https://www.menubarcode.com/api/v1 يُعيد فهرسًا قابلًا للقراءة آليًا بنقاط النهاية المتاحة (دون الحاجة إلى مصادقة). قابل للقراءة آليًا مواصفات OpenAPI 3.1 (JSON) — مُولَّدة من الموجّه الحيّ، لذا تتطابق دائمًا مع واجهة API المنشورة.المصادقة
أرسل رمزك كترويسة Bearer مع كل طلب:
Authorization: Bearer YOUR_TOKEN
للاختبارات السريعة يمكنك بدلًا من ذلك تمرير ?api_token=YOUR_TOKEN كمعامل استعلام، لكن يُفضّل بشدّة استخدام الترويسة كي لا تتسرّب الرموز إلى السجلّات.
| الصلاحية | يمنح |
|---|---|
read | الكل GET نقاط النهاية (كل مورد). |
write | جميع نقاط النهاية المعدِّلة (وبما أنها مجموعة شاملة، فكل عمليات القراءة أيضًا). |
الرموز المحدّدة النطاق
إلى جانب صلاحيتي read/write, يمكن قصر الرمز على موارد محدّدة باستخدام resource:action الصلاحيات. الموارد: restaurants, menu, orders, customers, analytics, drivers, webhooks; الإجراءات read, write. اخترها عند إنشاء الرمز في لوحة التحكم.
| مثال على الرمز | ما يمكنه فعله |
|---|---|
["orders:write"] | قراءة وكتابة الطلبات فقط (تكامل نقطة بيع). |
["menu:read"] | قراءة القائمة؛ لا شيء غير ذلك. |
["orders:read","analytics:read"] | لوحة تقارير. |
قواعد التغطية: * يمنح كل شيء؛ :write كما يمنح نطاق :read; صلاحيتا read/write تتصرّفان مثل *:read / *:write. الطلب الذي يفتقر إلى النطاق المطلوب يُعيد 403. الرموز القديمة read/write غير متأثّرة.
تُخزَّن الرموز مُجزّأة أثناء السكون (SHA-256) وقد تحمل تاريخ انتهاء اختياريًا. ألغِ أي رمز فورًا من لوحة التحكم.
حدود المعدل
تسمح واجهة API بـ 120 طلبًا في الدقيقة لكل رمز. تجاوزه يُعيد 429 Too Many Requests مع Retry-After الترويسة. تُضمَّن ترويسات حدود المعدّل القياسية في كل استجابة:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118
الأخطاء
كل خطأ على مسار /api/v1 يُعيد رموز حالة HTTP التقليدية وغلافًا واحدًا من JSON — رسالة بشرية message, ، ورمزًا آليًا ثابتًا code, ، و(عند التحقّق) لكل حقل errors الخريطة
{ "message": "Invalid or expired token.", "code": "unauthenticated" }
{ "message": "The given data was invalid.",
"code": "validation_failed",
"errors": { "title": ["The title field is required."] } }
| الحالة | code | المعنى |
|---|---|---|
401 | unauthenticated | رمز مفقود أو غير صالح أو منتهي الصلاحية. |
403 | forbidden | الرمز يفتقر إلى الصلاحية/النطاق المطلوب. |
404 | not_found | المورد غير موجود أو غير مملوك للرمز. |
422 | validation_failed | فشل التحقّق (انظر errors). |
429 | rate_limited | تم تجاوز حدّ المعدّل. |
code, وليس الرسالة البشرية message — قد تُعاد صياغة الرسائل أو تُترجم؛ أمّا الرموز فثابتة.404, وليس 403 — فواجهة API لا تؤكّد أبدًا وجود بيانات مالك آخر.ترقيم الصفحات
تُعيد نقاط نهاية القوائم أغلفة مرقّمة بأسلوب Laravel. استخدم ?page= معامل الاستعلام للتنقّل بين الصفحات.
{
"data": [ ... ],
"current_page": 1,
"last_page": 3,
"per_page": 20,
"total": 47
}
قراءة المطاعم والقائمة
اسرد المطاعم المملوكة للرمز، مع ترقيم الصفحات (20 لكل صفحة).
{
"data": [
{ "id": 12, "title": "Nova Bistro", "slug": "nova-bistro",
"url": "https://.../nova-bistro", "template": "linen",
"created_at": "2026-06-01T10:22:00+00:00" }
],
"current_page": 1, "last_page": 1, "total": 1
}
مطعم واحد مع فئات قائمته وعدد عناصره.
القائمة النشطة الكاملة مجمّعة حسب الفئة.
[
{ "id": 3, "name": "Starters",
"items": [
{ "id": 88, "name": "Bruschetta", "price": 6.50,
"is_sold_out": false, "is_popular": true, "is_vegan": true,
"is_halal": true, "calories": 210 }
]
}
]
الطلبات
الطلبات من الأحدث أولًا، مع الترقيم (30/صفحة). صفِّ باستخدام ?status=.
تفاصيل الطلب الكاملة مع بنود الطلب والإضافات والسائق والجدول الزمني للتوصيل.
أنشئ طلبًا — هكذا يقوم تطبيق العميل بإرسال سلّة (الواجهة الخلفية للتاجر تحتفظ بالرمز). يُتحقَّق من كل عنصر مقابل قائمة المطعم الحيّة؛ العناصر المنتهية أو الغريبة ترفض الطلب بأكمله (422). يُطلق order.created ويُعيد الطلب الكامل بما في ذلك track_token.
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/orders \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{
"type": "delivery",
"customer_name": "A. Idriss",
"phone": "+15551234567",
"address": "9 Cedar Road",
"tip_amount": 3.00,
"note": "Ring the bell",
"source": "customer_app",
"items": [
{ "item_id": 88, "quantity": 2, "variation": 5, "extras": [12], "note": "no onion" },
{ "item_id": 91, "quantity": 1 }
]
}'
الطلب type هو أحد من on-table, takeaway, delivery. لـ on-table مرّر table_number; لـ delivery مرّر address.
الحياد التكراري (Idempotency). أرسل Idempotency-Key ترويسة (أو في الجسم client_uuid) في أي استدعاء لإنشاء طلب. إعادة المحاولة بالمفتاح نفسه تُعيد الطلب الأصلي ولا تنشئ نسخة مكرّرة أبدًا — آمن للاستجابات المفقودة وإعادة التشغيل دون اتصال. المفاتيح مقيّدة لكل مطعم.
حدّث حالة المطبخ (new|preparing|ready|delivered|completed|cancelled). يُطلق order.status_changed.
واجهة API للمتجر (رمز لكل مطعم)
واجهة API منفصلة وعامة تُصادَق عبر رمز متجر لكل مطعم يُرسَل كـ X-Storefront-Token (وليس رمز Bearer الخاص بالمالك). أصدرها من لوحة التحكم؛ كل رمز يمكنه الوصول إلى مطعمه فقط. نطاق القراءة هو menu:read; وإرسال الطلبات يتطلّب order:write النطاق
القائمة الكاملة لمطعم الرمز (المتغيّرات، الإضافات، المجموعات، المعرض).
معلومات أساسية عن مطعم الرمز.
أرسل سلّة نيابةً عن أحد الزبائن. مُسعّرة من الخادم و غير مدفوع (يدفع الزبون عند الوصول)؛ takeaway أو on-table فقط. يُتحقَّق من كل عنصر مقابل القائمة الحيّة — العناصر المنتهية أو الغريبة ترفض الطلب بأكمله (422). الحدود: 40 عنصرًا/طلب، 30 كمية/بند. اختياري coupon_code يطبّق خصم المالك من جهة الخادم. يُطلق order.created ويُعيد track_token + continue_url.
curl -X POST https://www.menubarcode.com/api/v1/storefront/orders \
-H "X-Storefront-Token: YOUR_STOREFRONT_TOKEN" -H "Content-Type: application/json" \
-d '{
"type": "takeaway",
"customer_name": "A. Idriss",
"phone": "+15551234567",
"coupon_code": "WELCOME10",
"items": [
{ "item_id": 88, "quantity": 2, "variation": 5, "extras": [12] },
{ "item_id": 91, "quantity": 1 }
]
}'
التحليلات والعملاء
ملخّص المبيعات خلال نطاق زمني (?from=YYYY-MM-DD&to=YYYY-MM-DD, افتراضيًا آخر 30 يومًا): أعداد الطلبات حسب الحالة/النوع، والإيرادات الإجمالية والمدفوعة، ومتوسّط قيمة الطلب، وأبرز العناصر.
{
"range": { "from": "2026-06-02", "to": "2026-07-02" },
"orders": { "total": 214, "paid": 198, "by_status": {...}, "by_type": {...} },
"revenue": { "gross": 8420.50, "paid": 7990.00, "avg_order_value": 39.35 },
"top_items": [ { "item_id": 88, "name": "Margherita", "quantity": 143 } ]
}
قائمة عملاء المطعم (CRM)، مرقّمة الصفحات. صفِّ باستخدام ?search=.
إدارة السائقين اكتب
السائقون تابعون لك و(اختياريًا) لمطعم واحد. إنشاء سائق أو تدوير رمزه يُعيد رمز سائق خامًا مرّة واحدة تمامًا — سلّمه لتطبيق السائق؛ يُصادِق به (انظر أدناه).
curl -X POST https://www.menubarcode.com/api/v1/drivers \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Alex","phone":"+15550001111","restaurant_id":12}'
# → { "id": 7, "name": "Alex", ..., "token": "RAW_DRIVER_TOKEN_SHOWN_ONCE" }
يُبطل الرمز القديم ويُعيد رمزًا جديدًا.
إسناد وتتبّع عملية توصيل
طلبات التوصيل، قابلة للتصفية حسب ?delivery_status= و ?driver_id=.
إسناد سائق {"driver_id": 7}. يضبط delivery_status=assigned ويُطلق order.driver_assigned.
تجاوز مرحلة التوصيل: pending | assigned | picked_up | out_for_delivery | delivered | failed.
واجهة API لتطبيق السائق
يُصادِق تطبيق السائق باستخدام رمز السائق (وليس رمز مالك) الصادر أعلاه. المسار الأساسي https://www.menubarcode.com/api/v1/driver. كل استجابة مقيّدة بذلك السائق وحده.
Authorization: Bearer RAW_DRIVER_TOKEN
الملف الشخصي للسائق المُصادَق.
الطلبات المُسندة إلى هذا السائق. أضف ?active=1 لإخفاء المُسلَّمة/الفاشلة.
تقدّم بالتوصيل: {"delivery_status":"out_for_delivery"} ثم "delivered" أو "picked_up" / "failed", اختياري note). يُطلق نفس الـ webhooks التي تُطلقها نقطة نهاية المالك.
ادفع الموقع الحيّ: {"lat":25.2048,"lng":55.2708}. يظهر في شاشة تتبّع العميل أثناء الخروج للتوصيل.
حسابات العملاء
هناك تطبيق عملاء مستقلّ يُصادِق مستخدميه الخاصّين برمز لكل عميل (بأسلوب Sanctum: أجهزة متعدّدة، قابلة للإلغاء فرديًا). لا يتدخّل أي رمز مالك. العملاء مقيّدون لكل مطعم، لذا تكون المصادقة تحت /restaurants/{id}/customer/…. تصفّح القائمة أولًا عبر نقطة النهاية العامة:
القائمة النشطة مجمّعة حسب الفئة (تُحذف العناصر المنتهية). دون مصادقة.
التسجيل / تسجيل الدخول
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/login \
-H "Content-Type: application/json" \
-d '{"email":"sam@example.com","password":"secret123","device":"iPhone 15"}'
# → { "token": "RAW_CUSTOMER_TOKEN", "customer": { "id": 42, "name": "Sam", ... } }
دون كلمة مرور (رمز OTP عبر SMS)
اطلب رمزًا لرقم هاتف، ثم تحقّق منه. التحقّق يجد العميل أو ينشئه ويُعيد رمزًا. نقاط نهاية المصادقة محدودة المعدّل (تسجيل الدخول/التسجيل 10/دقيقة، طلب OTP 6/دقيقة).
واجهة API لتطبيق العميل
صادِق باستخدام رمز العميل. المسار الأساسي https://www.menubarcode.com/api/v1/customer. كل شيء مقيّد بالعميل المُصادَق — لا يمكن لجسم الطلب أبدًا انتحال معرّف عميل آخر.
Authorization: Bearer RAW_CUSTOMER_TOKEN
قراءة/تحديث الملف الشخصي (الاسم، البريد الإلكتروني، الهاتف، تاريخ الميلاد، الموافقات).
قدّم طلبًا بصفة هذا العميل (نفس بنية العنصر في نقطة نهاية الإنشاء لدى التاجر؛ تُؤخذ الهوية من الرمز). يُعيد الطلب مع track_token.
سجلّ طلبات العميل الخاصّ به، مرقّم الصفحات.
عناوين التوصيل المحفوظة (يصبح الأول افتراضيًا؛ يدعم lat/lng).
يُلغي الرمز المستخدَم للطلب (ذلك الجهاز فقط).
تتبّع الطلب عام
دون مصادقة — الوصول محكوم برمز الطلب غير القابل للتخمين track_token (يُعاد عند إنشاء الطلب). يشغّل هذا تطبيق العميل شاشة تتبّع حيّ.
{
"id": 5501, "status": "preparing", "delivery_status": "out_for_delivery",
"is_paid": true, "total": 42.00,
"timeline": { "preparing_at": "...", "out_for_delivery_at": "..." },
"items": [ { "name": "Margherita", "quantity": 2 } ],
"driver": { "name": "Alex", "lat": 25.2, "lng": 55.27, "location_updated_at": "..." }
}
لا تظهر كتلة السائق (مع الإحداثيات الحيّة) إلا بعد استلام الطلب / خروجه للتوصيل.
تسجيل دخول الموظفين
هناك تطبيق الموظفين (نقطة بيع / KDS / نادل) يُصادِق كل موظف برمز لكل موظف. مساران يماثلان لوحة التحكم: البريد الإلكتروني + كلمة المرور، أو رقم رمز PIN سريع لأجهزة المطبخ اللوحية المشتركة. الموظفون مقيّدون لكل مطعم.
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/staff/pin \
-H "Content-Type: application/json" -d '{"pin":"4321","device":"Kitchen iPad"}'
# → { "token": "RAW_STAFF_TOKEN",
# "staff": { "id": 3, "role": "kitchen", "permissions": ["kds"] } }
تسرد الاستجابة صلاحيات الموظف الفعّالة الصلاحيات — وهي مجموعة فرعية من orders, menu_edit, coupons, analytics, kds, customers مشتقّة من دوره (مدير / أمين صندوق / مطبخ / نادل) بالإضافة إلى أي تجاوزات لكل موظف. نقاط النهاية محكومة بالأذونات (403 خلاف ذلك).
واجهة API لتطبيق الموظفين
صادِق باستخدام رمز الموظف. المسار الأساسي https://www.menubarcode.com/api/v1/staff. جميع الإجراءات مقيّدة بمطعم الموظف.
Authorization: Bearer RAW_STAFF_TOKEN
الملف الشخصي مع الدور وقائمة الأذونات.
اسرد الطلبات وحدّث حالة المطبخ. يتطلّب orders الإذن.
تذاكر المطبخ الحيّة مجمّعة حسب الطلب، مُصفّاة إلى محطّة الموظف (أو ?station_id=). تعرض فقط العناصر التي لا تزال queued|preparing|ready.
تقدّم (queued → preparing → ready → served) أو ارجع خطوة واحدة في حالة KDS. تتزامن حالة الطلب الأصل تلقائيًا.
حرّر القائمة من الصالة (المديرون). نفس حمولات نقاط نهاية قائمة التاجر، مقيّدة بمطعم الموظف.
ملخّص المبيعات لمطعم الموظف (نفس بنية نقطة نهاية تحليلات التاجر؛ ?from=&to=).
يُلغي رمز هذا الجهاز.
Webhooks — الإعداد
سجّل نقاط النهاية من لوحة التحكم ضمن رموز API و Webhooks. اختر الأحداث التي تستقبلها كل نقطة نهاية. عند الحفظ تحصل على سر التوقيع; استخدم زر اختبار لإرسال ping. أوقف نقطة نهاية مؤقتًا لإيقاف التسليم دون فقدان سرّها.
يجب أن تستجيب نقطة نهايتك بحالة 2xx بسرعة (خلال 10 ثوانٍ). أي حالة أخرى — أو انتهاء المهلة — تُعامَل كفشل ويُعاد المحاولة.
يمكن أيضًا إدارة نقاط النهاية برمجيًا (لـ REST-Hooks في Zapier/Make) باستخدام webhooks:write رمز:
GET /api/v1/webhook-endpoints # list your endpoints
POST /api/v1/webhook-endpoints # {"url":"https://…","events":["order.created"]} → 201 {id, secret, …}
DELETE /api/v1/webhook-endpoints/{id} # unsubscribe → 204
الـ secret يُعاد فقط عند الإنشاء — خزّنه للتحقّق من التوقيع. url يجب أن يكون نقطة نهاية HTTPS عامة (محميّة ضد SSRF)؛ events يجب أن تكون من القائمة أدناه (أو *).
أحداث Webhook
| الحدث | يُطلَق عند |
|---|---|
order.created | يُقدَّم طلب جديد (لوحة التحكم أو API). |
order.status_changed | تتغيّر حالة مطبخ الطلب (لوحة التحكم أو نقطة البيع أو API). |
order.paid | يُوسَم الطلب كمدفوع بالكامل (بوابة دفع أو تقسيم فاتورة). |
order.driver_assigned | يُسنَد سائق إلى عملية توصيل. |
order.out_for_delivery | السائق في طريقه إلى العميل. |
order.delivered | اكتملت عملية التوصيل. |
order.delivery_failed | تعذّر إكمال عملية التوصيل. |
refund.completed | تم إتمام استرداد مبلغ لطلب. |
reservation.created | تم إنشاء حجز طاولة. |
reservation.cancelled | تم إلغاء حجز طاولة. |
customer.created | تم إنشاء سجل عميل جديد. |
shift.opened | تم فتح وردية درج النقد / نقطة البيع. |
shift.closed | تم إغلاق وردية درج النقد / نقطة البيع. |
menu.updated | يُنشَأ عنصر أو فئة في القائمة أو يُحدَّث أو يُحذَف (من أي واجهة). الحمولة: {restaurant_id, change, entity, id}. |
entitlement.changed | تُمنَح ميزة أو تُلغى لمساحة العمل (تغيير خطة، إضافة، تثبيت/إزالة تطبيق، تجاوز المشرف). الحمولة: {action, feature_key, source_type, source_id, user_id, occurred_at} حيث action هو granted أو revoked. |
subscription.* | دورة حياة الاشتراك: subscription.paused, .resumed, .renewed, .expired, .plan_changed, .past_due, .expiring, .trial_ending. |
app.uninstalled | تُزال أحد تطبيقات السوق (يُسلَّم إلى نقطة نهاية التطبيق). |
* | اشترك في كل حدث أعلاه. |
ping | يُرسَل بواسطة زر اختبار للتحقّق من التوصيل. |
فشل تسليم أثناء تعطّل نقطة نهايتك؟ استخدم إعادة التسليم على أي صفّ في سجلّ التسليمات الأخيرة بلوحة التحكم لإعادة إدراجه في الطابور بـ webhook-id.
حمولة Webhook
كل تسليم هو طلب POST بغلاف JSON هذا وهذه الترويسات:
POST /your-endpoint HTTP/1.1
Content-Type: application/json
webhook-id: msg_a1b2c3d4e5f6g7h8i9j0k1l2
webhook-timestamp: 1751472240
webhook-signature: v1,K5f...base64...==
X-Webhook-Event: order.created (legacy)
X-Webhook-Signature: 9a3f...hex... (legacy, HMAC of body only)
{
"id": "msg_a1b2c3d4e5f6g7h8i9j0k1l2",
"event": "order.created",
"created_at": "2026-07-02T18:04:00+00:00",
"data": { "order_id": 5501, "total": "42.00" }
}
الـ id فريد لكل تسليم. ولأن إعادة المحاولات تعيد استخدام نفس id, استخدمه لجعل معالجك محايدًا تكراريًا.
التحقّق من التوقيع
الـ webhook-signature الترويسة عبارة عن HMAC-SHA256 مُرمّزة بـ base64، محسوبة على {id}.{timestamp}.{body} باستخدام سرّ توقيع نقطة نهايتك. ربط المعرّف والطابع الزمني بالتوقيع هو ما يجعل الطلب الملتقَط آمنًا ضدّ إعادة التشغيل. ارفض أي طلب يكون webhook-timestamp أقدم من ~5 دقائق.
PHP
$secret = 'whsec_from_dashboard';
$id = $_SERVER['HTTP_WEBHOOK_ID'];
$ts = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'];
$body = file_get_contents('php://input');
$sent = explode(',', $_SERVER['HTTP_WEBHOOK_SIGNATURE'])[1] ?? '';
if (abs(time() - (int) $ts) > 300) { http_response_code(400); exit; }
$expected = base64_encode(hash_hmac('sha256', "$id.$ts.$body", $secret, true));
if (!hash_equals($expected, $sent)) { http_response_code(401); exit; }
// verified — process $body
http_response_code(200);
Node.js
const crypto = require('crypto');
function verify(req, secret) {
const id = req.headers['webhook-id'];
const ts = req.headers['webhook-timestamp'];
const sig = (req.headers['webhook-signature'] || '').split(',')[1];
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = crypto
.createHmac('sha256', secret)
.update(`${id}.${ts}.${req.rawBody}`)
.digest('base64');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig || ''));
}
X-Webhook-Signature (HMAC-SHA256 عادي للجسم، بصيغة hex) تُرسَل أيضًا للتوافق مع الإصدارات السابقة. ينبغي للتكاملات الجديدة استخدام webhook-signature.إعادة المحاولات وسجلّ التسليم
التسليم غير متزامن ويُعاد عند الفشل بتراجع أسّي مع تشويش زمني: تقريبًا 1m → 5m → 15m → 1h (حتى 5 محاولات إجمالًا). تُسجَّل كل محاولة — نجاحًا أو فشلًا — في سجلّ التسليم بلوحة التحكم مع حالة HTTP ورقم المحاولة ومقتطف الاستجابة.
webhook-id للتعامل مع التكرارات العرضية.خوادم MCP
خمسة خوادم Model Context Protocol تربط وكلاء الذكاء الاصطناعي (ChatGPT وClaude وCursor) بالمنصّة — اختر ما يناسب جمهورك. جميعها تتحدّث JSON-RPC 2.0 عبر HTTP وتتفاوض على إصدارات البروتوكول 2024-11-05 / 2025-03-26 / 2025-06-18.
| الخادم | نقطة النهاية | الجمهور | المصادقة | أدوات |
|---|---|---|---|---|
| Admin | https://www.menubarcode.com/mcp | أصحاب المتاجر — إدارة المتجر | رمز API (Bearer) | 23 |
| Storefront | https://www.menubarcode.com/mcp/storefront | وكيل الزبون — التسوّق والطلب من متجر واحد | رمز المتجر (نطاق الوكيل) | 12 |
| Customer | https://www.menubarcode.com/mcp/customer | زبون مُسجَّل الدخول — طلباته الخاصّة | رمز الزبون (تسجيل الدخول برمز OTP) | 5 |
| Catalog | https://www.menubarcode.com/mcp/catalog | أي شخص — اكتشاف المتاجر عبر المنصّة | عام | 3 |
| Dev | https://www.menubarcode.com/mcp/dev | أدوات البرمجة بالذكاء الاصطناعي — بناء القوالب/التكاملات | عام | 7 |
بداية سريعة: انتقل إلى Admin, Catalog, Customer, أو Dev. يشارك خادم Storefront نمط اتصال Admin نفسه مع ترويسة X-Storefront-Token بدلًا من رمز Bearer.
خادم MCP (Admin)
يمكن لعميل ذكاء اصطناعي متوافق مع MCP (Claude وChatGPT وCursor) تشغيل مطعمك باللغة الطبيعية باستخدام نفس رموز API. وجّهه إلى:
https://www.menubarcode.com/mcp JSON-RPC 2.0صادِق باستخدام Authorization: Bearer YOUR_TOKEN. تعلن كل أداة عن الصلاحية الدقيقة التي تحتاجها (resource:action); الرمز القديم read يغطّي كل :read أداة، و write يغطّي كل شيء. جميع الاستدعاءات مقيّدة بمطاعمك ومحدودة المعدّل. تُخفى الأدوات التي تفتقر إلى صلاحيتها من tools/list.
الاتصال (Claude Code)
claude mcp add --transport http platform-admin https://www.menubarcode.com/mcp \
--header "Authorization: Bearer YOUR_TOKEN"
سرد الأدوات
curl -X POST https://www.menubarcode.com/mcp \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
استدعاء أداة (مثال: إضافة عنصر للقائمة)
curl -X POST https://www.menubarcode.com/mcp \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"add_menu_item",
"arguments":{"restaurant_id":12,"name":"Latte","price":4.5}}}'
أدوات
| أداة | الصلاحية | ما تفعله |
|---|---|---|
list_restaurants | read | المطاعم التي تملكها. |
get_menu | read | فئات مطعم وعناصره. |
list_categories | menu:read | الفئات مع أعداد العناصر. |
add_category | menu:write | إنشاء فئة. |
update_category | menu:write | إعادة تسمية / ترتيب فئة. |
delete_category | menu:write | حذف فئة (يرفض إن كانت تحتوي عناصر). |
add_menu_item | write | إنشاء عنصر قائمة (يُفحَص حدّ الخطة). |
update_menu_item | write | عدّل اسم العنصر أو سعره أو وصفه. |
delete_menu_item | menu:write | احذف عنصرًا نهائيًا. |
set_item_availability | menu:write | وسم عنصر كمتوفّر/غير متوفّر (مفتاح 86). |
list_orders | orders:read | الطلبات من الأحدث أولًا؛ مرشّحات الحالة/التاريخ/البحث. |
get_order | orders:read | تفاصيل الطلب الكاملة بما فيها بنود الطلب. |
update_order_status | write | تقديم حالة مطبخ الطلب. |
list_customers | customers:read + crm_suite | قائمة CRM؛ البحث بالاسم/الهاتف/البريد. مخفيّة من tools/list دون الاستحقاق. |
get_customer | customers:read + crm_suite | السجلّ الكامل لعميل واحد. مخفيّ من tools/list دون الاستحقاق. |
sales_report | analytics:read | الإيرادات + أعداد الطلبات + أبرز العناصر لنطاق زمني. |
get_restaurant_settings | restaurants:read | لقطة للملف الشخصي وإعدادات الطلب. |
update_business_hours | restaurants:write | ضبط نصّ ساعات العمل. |
list_coupons | orders:read | كوبونات الخصم الخاصة بك. |
create_coupon | orders:write | إنشاء قسيمة نسبة مئوية/ثابتة. |
update_coupon | orders:write | عدّل كوبونًا. |
delete_coupon | orders:write | احذف كوبونًا. |
Catalog MCP (اكتشاف المطاعم)
خادم MCP عام للقراءة فقط يتيح لوكلاء الذكاء الاصطناعي اكتشاف المطاعم والأطباق عبر المنصّة بأكملها، ثم الانتقال برابط عميق إلى متجر محدّد للطلب. دون مصادقة، ومحدود المعدّل.
https://www.menubarcode.com/mcp/catalog JSON-RPC 2.0 · publicالاتصال (Claude Code)
claude mcp add --transport http platform-catalog https://www.menubarcode.com/mcp/catalog
| أداة | ما تفعله |
|---|---|
search_stores | العثور على المطاعم بالكلمة المفتاحية/المدينة (الاسم، العنوان، menu_url، تلميح storefront_mcp). |
search_items | العثور على الأطباق عبر كل المتاجر (query/dietary/max_price/city)، مجمّعة حسب المتجر. |
get_store | التفاصيل العامة الكاملة لمتجر واحد عبر slug أو المعرّف. |
list_starter_menus | قوالب قائمة البداية المُضمّنة التي يمكن لمتجر جديد الانطلاق منها (مقهى، بيتزيريا، برجر، مخبز، صالة). |
تظهر المتاجر النشطة والمُدرَجة علنًا فقط؛ يمكن للمالكين الانسحاب من إعدادات متجرهم. لا تُعاد أبدًا أي بيانات اتصال بالمالك. لتقديم طلب، استخدم MCP المتجر برمز وكيل لكل متجر.
MCP حساب العميل
يتيح لمساعد الذكاء الاصطناعي الخاص بالزبون قراءة وتتبّع وإعادة طلب طلباته الخاصّة . مُصادَق برمز لكل عميل من تسجيل دخول OTP القائم؛ تأتي هوية العميل من الرمز فقط — لا يُقبل أبدًا رقم هاتف أو معرّف عميل كوسيط.
https://www.menubarcode.com/mcp/customer JSON-RPC 2.0 · customer tokenاحصل على رمز (تدفّق OTP)
# 1) request a one-time code (sent to the customer's phone)
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/request \
-H "Content-Type: application/json" -d '{"phone":"+15551234567"}'
# 2) verify the code → returns a customer bearer token
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/verify \
-H "Content-Type: application/json" -d '{"phone":"+15551234567","code":"123456"}'
الاتصال (Claude Code)
claude mcp add --transport http my-orders https://www.menubarcode.com/mcp/customer \
--header "Authorization: Bearer CUSTOMER_TOKEN"
| أداة | ما تفعله |
|---|---|
my_orders | طلباتك الأخيرة (الأحدث أولًا). |
order_detail | التفاصيل الكاملة + بنود الطلب لأحد طلباتك. |
track_order | الحالة الحيّة عبر معرّف الطلب أو رمز التتبّع. |
reorder | إعادة بناء طلب سابق كمسوّدة سلّة (يتخطّى العناصر المنتهية). |
my_profile | اسمك وهاتفك وعدد طلباتك. |
my_bookings | حجوزات غرف الفندق الخاصة بك في هذا المكان (الرمز، الحالة، التواريخ، نوع الغرفة، الإجمالي). |
curl -X POST https://www.menubarcode.com/mcp/customer \
-H "Authorization: Bearer CUSTOMER_TOKEN" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"my_orders","arguments":{"limit":5}}}'
اربط محرّر الذكاء الاصطناعي
تبني قالبًا أو تكاملًا باستخدام Claude Code أو Cursor أو VS Code؟ وجّهه إلى الخادم العام خادم Dev MCP — تحصل أداة الذكاء الاصطناعي على توثيق حيّ للمنصّة، والقائمة البيضاء المُولَّدة لـ Liquid، والتحقّق من القوالب من جهة الخادم. لا حاجة إلى رمز.
https://www.menubarcode.com/mcp/dev JSON-RPC 2.0 · publicClaude Code
claude mcp add --transport http platform-dev https://www.menubarcode.com/mcp/dev
Cursor — .cursor/mcp.json
{ "mcpServers": { "platform-dev": { "url": "https://www.menubarcode.com/mcp/dev" } } }
VS Code — .vscode/mcp.json
{ "servers": { "platform-dev": { "type": "http", "url": "https://www.menubarcode.com/mcp/dev" } } }
أدوات learn_platform (ابدأ هنا), search_docs / fetch_full_doc, get_liquid_reference, get_section_schema, validate_theme, list_webhook_events. سير العمل الموصى به للوكيل: التعلّم → البناء → التحقّق → التسليم.
https://www.menubarcode.com/mcp) يشغّل بيانات مطعمك؛ أمّا هذا فيقدّم التوثيق والتحقّق وآمن للمشاركة علنًا.سجل التغييرات
| التاريخ | تغيير |
|---|---|
| 2026-08-20 | إصدار نظام إدارة الفندق + النمو: refund.completed, reservation.created, reservation.cancelled, customer.created, shift.opened, shift.closed أحداث webhook؛ تسجيل أجهزة الدفع للموظفين + 2fa نقاط النهاية؛ أدوات MCP جديدة hotel_availability, my_bookings, list_starter_menus, list_webhook_events. |
| 2026-07-28 | فهرس اكتشاف مُولَّد من الموجّه + مواصفات OpenAPI 3.1 (متوافقة دائمًا مع واجهة API المنشورة)؛ Idempotency-Key عند إنشاء الطلب؛ حدود معدّل API لكل رمز؛ subscription.* + app.uninstalled أحداث webhook + التسليم إعادة التسليم. |
| 2026-07-07 | عام خادم Dev MCP لأدوات البرمجة بالذكاء الاصطناعي: بحث حيّ في التوثيق، ومرجع Liquid مُولَّد، والتحقّق من القوالب من جهة الخادم. |
| 2026-07-02 | نطاقات رموز دقيقة (resource:action); تحرير قائمة الموظفين + نقاط نهاية التحليلات. |
| 2026-07-02 | تطبيق الموظفين: مصادقة برمز لكل موظف (كلمة مرور + PIN)، وتحكّم بالأذونات حسب الدور، وحالة الطلب، ودفع/استرجاع KDS. |
| 2026-07-02 | تطبيق عملاء مستقلّ: مصادقة برمز لكل عميل (تسجيل/دخول/OTP)، وملف شخصي، وتقديم الطلبات + السجلّ، والعناوين المحفوظة، وتصفّح القائمة العامة. |
| 2026-07-02 | واجهة API إدارية كاملة: عمليات CRUD للقائمة، وإنشاء الطلبات، والسائقون + دورة حياة التوصيل، وواجهة API لرمز تطبيق السائق، وتتبّع الطلبات العام، وتحليلات المبيعات، والعملاء. أحداث webhook جديدة للتوصيل. |
| 2026-07-02 | تسليم webhook عبر طابور مع إعادة المحاولات؛ توقيع Standard-Webhooks (webhook-id/timestamp/signature); order.paid الحدث؛ توثيق عام. |
| 2026-06-26 | الإصدار الأول v1 من REST API والرموز ونقاط نهاية webhook. |
https://www.menubarcode.com/api/v1