للمطوّرين · REST + MCP · OpenAPI 3.1

اربط نظامك بـلَبيب

كلُّ ما يفعله النظام متاحٌ لبرنامجك: 296 أداةً — العملاء، التذاكر، المواعيد، المهامّ، الفريق — برمزٍ واحد، وبمخطّطٍ يُولَّد من الشفرة نفسها فلا يتقادم.

أداة
296
منها كتابة
152
إصدار المواصفة
v1.0.0

ثلاث خطوات

لا تسجيلَ منفصل ولا مفاتيحَ إضافية: الرمز يُصدَر من حسابك، ويُلغى منه.

١

أصدِر رمزاً

من الإعدادات ← المطوّرون ← مفاتيح API: سمِّ المفتاح، اختر الأدوات التي يراها، وأدوارَ الموظّف الذي يعمل باسمه. يظهر مرّةً واحدة.

أنشئ مفتاح API
٢

تحقّق من الهويّة

النداءُ الأوّل يخبرك بالمستأجر والموظّف الذي ينفّذ باسمك ونطاق الرمز — وهل الكتابة مسموحة.

curl https://labeb.app/api/v1/me \
  -H "Authorization: Bearer wkm_…"
٣

نفّذ أداة

كلُّ أداةٍ مسارٌ واحد: POST باسمها وجسمٌ JSON يطابق مخطّطها. الردّ دائماً {ok, data} أو {ok:false, code, error}.

curl -X POST https://labeb.app/api/v1/tools/list_tasks \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"open"}'

المصادقة

أرسل الرمز في ترويسة Authorization: Bearer wkm_… أو X-API-Key. ما يستطيعه الرمز هو تقاطع ثلاثة: الأدوات التي اخترتها له ∩ صلاحيّات موظّف الربط ∩ وضع الوصول (قراءة فقط أو قراءة وكتابة). كلُّ ما هو خارج التقاطع يعود 403 بكودٍ ثابت.

GET /api/v1/tools            # الأدوات المتاحة لهذا الرمز بمخطّطاتها
POST /api/v1/tools/{key}     # تنفيذ — الجسم JSON يطابق inputSchema
GET /api/v1/me               # هويّة الرمز

# ردّ ناجح
{ "ok": true, "data": { ... } }

# ردّ مرفوض
{ "ok": false, "code": "out_of_scope", "error": "الأداةُ خارج نطاق هذا الرمز" }

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

HTTPcodeالمعنى
401unauthorizedالرمز غائب أو منتهٍ أو ملغى
403out_of_scopeالأداة خارج نطاق هذا الرمز
403forbiddenموظّف الربط لا يملك صلاحية الأداة، أو المستأجر موقوف
403write_not_allowedأداة كتابة والوصول قراءةٌ فقط
404unknown_toolلا أداة بهذا الاسم
400bad_requestجسم الطلب ليس كائن JSON
400tool_failedالأداة رفضت الوسائط أو أخفقت — النصّ يشرح

رمزٌ واحد لكل شيء

الرمز نفسه يخدم REST وMCP. ما تختاره من أدوات وأدوار عند إصداره هو كل ما يستطيعه — لا أكثر.

يعمل باسم موظّف

كل نداء يُنفَّذ باسم «موظّف الربط الخارجيّ» بأدواره وحدها، ويُسجَّل في سجل الربط الخارجيّ داخل حسابك.

التوثيق من الشفرة

هذه الصفحة تُرسَم من openapi.json الذي يولّده الخادم من سجل الأدوات نفسه. أداةٌ تتغيّر بلا تحديث التوثيق توقف النشر.

حدود واضحة

سقفٌ ساعيّ للأدوات لكل مستأجر، وانتهاءٌ للرمز تختاره أنت، وإلغاءٌ فوريّ من الإعدادات.

MCP — لمساعدات الذكاء

الأدوات نفسها متاحة عبر Model Context Protocol لـ Claude وChatGPT وأيّ عميل يدعمه: عنوانٌ واحد، والرمز نفسه. أضف الخادم ثمّ اسأل مساعدك عن عملائك أو تذاكرك بلغتك.

  • • JSON-RPC 2.0 على POST /api/mcp/v1
  • • tools/list يعرض ما يراه الرمز فقط
  • • الكتابة تُنفَّذ باسم موظّف الربط بأدواره — بلا بطاقة موافقة
// Claude Desktop — claude_desktop_config.json
{
  "mcpServers": {
    "labeb": {
      "url": "https://labeb.app/api/mcp/v1?token=wkm_…"
    }
  }
}

// أو من أيّ عميل MCP يدعم Streamable HTTP:
// URL:    https://labeb.app/api/mcp/v1
// Header: Authorization: Bearer wkm_…

مرجع الأدوات

يُرسَم لحظةَ فتح الصفحة من /api/v1/openapi.json. ما تراه هنا هو ما ينفّذه الخادم — بلا نسخةٍ مكتوبة باليد تتقادم.

openapi.json ↗
296 أداة

facebook21

إضافةPOST /api/v1/tools/create_facebook_image_uploadرفع صور لمنشور فيسبوك▾

حين يرفق المستخدم صورة (أو عدّة صور) ويطلب نشرها أو جدولتها على فيسبوك: نادِ هذه الأداة بعدد الصور، فتعيد لكلّ صورة media_id ورابط رفعٍ لمرّةٍ واحدة (30 دقيقة). إن كانت عندك بيئةُ تنفيذ كود (مثل Claude): ارفع كلَّ ملفٍّ أرفقه المستخدم إلى رابطه بالأمر curl المرفق (بايتات الملف نفسه — لا تعيد رسمه ولا تحوّله)، ثمّ تحقّق أنّ الجواب ok:true. إن رُفض الاتصال (403 أو proxy أو عدم وصول) أو لا بيئة كود عندك: أعطِ المستخدم user_link ليفتحه ويرفع الصورة بنفسه، وانتظر أن يقول إنّه رفعها. بعدها نادِ create_facebook_post (صورة واحدة) أو create_facebook_photos_post (2–10) بـ media_ids. تشات جي بي تي لا يحتاجها: يمرّر الصورة المرفقة مباشرةً في حقل image.

الصلاحية المطلوبة لموظّف الربط: facebook.post.add.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
countinteger—كم صورةً أرفق المستخدم
curl -X POST https://labeb.app/api/v1/tools/create_facebook_image_upload \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"page":"…","count":10}'
إضافةPOST /api/v1/tools/create_facebook_photos_postنشر أو جدولة منشور صور على فيسبوك▾

نشر منشور بعدّة صور (2–10: روابط عامّة image_urls و/أو صورٌ مرفوعة media_ids) مع نصّ، الآن أو مجدولاً. علنيّ باسم الصفحة. **قبل النداء اعرض على المستخدم النصَّ الحرفيّ وخذ موافقته الصريحة — لا تنشر نصّاً لم يره.**

الصلاحية المطلوبة لموظّف الربط: facebook.post.add.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
messagestring—
image_urlsstring[]—
media_idsstring[]—معرّفات صورٍ رُفعت عبر create_facebook_image_upload — بالترتيب الذي تظهر به في المنشور
scheduled_atstring—اختياري — اتركه فارغاً للنشر فوراً. ISO-8601 مثل 2026-11-01T18:00:00+03:00؛ بلا فرق توقيت يُفهم بتوقيت الحساب. بين 10 دقائق و75 يوماً من الآن.
curl -X POST https://labeb.app/api/v1/tools/create_facebook_photos_post \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"page":"…","message":"…"}'
إضافةPOST /api/v1/tools/create_facebook_postنشر أو جدولة منشور على فيسبوك▾

نشر منشور على الصفحة، الآن أو مجدولاً: نصّ مع رابط، أو صورة — برابطها (image_url) أو صورةٍ أرفقها المستخدم (media_ids من create_facebook_image_upload، أو image في ChatGPT). صورتان فأكثر تُنشران منشوراً واحداً بعدّة صور. علنيّ باسم الصفحة. **قبل النداء اعرض على المستخدم النصَّ الحرفيّ وخذ موافقته الصريحة — لا تنشر نصّاً لم يره.**

الصلاحية المطلوبة لموظّف الربط: facebook.post.add.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
messagestringنعم
linkstring—
image_urlstring—
media_idsstring[]—معرّفات صورٍ رُفعت عبر create_facebook_image_upload — بالترتيب الذي تظهر به في المنشور
imageobject—الصورة التي أرفقها المستخدم في المحادثة (تملؤها تطبيقاتٌ تدعم الملفات مثل ChatGPT)
scheduled_atstring—اختياري — اتركه فارغاً للنشر فوراً. ISO-8601 مثل 2026-11-01T18:00:00+03:00؛ بلا فرق توقيت يُفهم بتوقيت الحساب. بين 10 دقائق و75 يوماً من الآن.
curl -X POST https://labeb.app/api/v1/tools/create_facebook_post \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"message":"…"}'
إضافةPOST /api/v1/tools/create_facebook_video_postنشر فيديو على فيسبوك▾

نشر فيديو من رابطٍ عامّ مع عنوان ووصف (الوصف هو نصّ المنشور). يُنشر فوراً — لا جدولة للفيديو هنا. علنيّ. **قبل النداء اعرض على المستخدم النصَّ الحرفيّ وخذ موافقته الصريحة — لا تنشر نصّاً لم يره.**

الصلاحية المطلوبة لموظّف الربط: facebook.post.add.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
video_urlstringنعم
titlestring—
descriptionstring—
curl -X POST https://labeb.app/api/v1/tools/create_facebook_video_post \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"video_url":"…"}'
حذفPOST /api/v1/tools/delete_facebook_commentحذف تعليق فيسبوك▾

حذف تعليق نهائياً (تعليق زبون أو ردّ للصفحة). للإبعاد عن العامّة يكفي hide_facebook_comment. **لا رجعة فيه — أكّد مع المستخدم أولاً.**

الصلاحية المطلوبة لموظّف الربط: facebook.comment.delete.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
comment_idstringنعممعرّف التعليق كما تعيده أدوات التعليقات
curl -X POST https://labeb.app/api/v1/tools/delete_facebook_comment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"comment_id":"…"}'
حذفPOST /api/v1/tools/delete_facebook_postحذف منشور فيسبوك▾

حذف منشور (منشور أو مجدول) نهائياً من الصفحة. **لا رجعة فيه — أكّد مع المستخدم أولاً.**

الصلاحية المطلوبة لموظّف الربط: facebook.post.delete.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
post_idstringنعممعرّف المنشور كما تعيده list_facebook_posts
curl -X POST https://labeb.app/api/v1/tools/delete_facebook_post \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"…"}'
قراءةPOST /api/v1/tools/get_facebook_page_infoعرض معلومات الصفحة▾

معلومات صفحة فيسبوك: الاسم والتصنيف وعدد المتابعين والإعجابات والرابط.

الصلاحية المطلوبة لموظّف الربط: facebook.post.view.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
curl -X POST https://labeb.app/api/v1/tools/get_facebook_page_info \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"page":"…"}'
قراءةPOST /api/v1/tools/get_facebook_page_insightsعرض إحصاءات الصفحة▾

إحصاءات الصفحة اليوميّة (الوصول والتفاعل مع المنشورات والمتابعات والزيارات) — الافتراضي آخر 28 يوماً.

الصلاحية المطلوبة لموظّف الربط: facebook.post.view.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_facebook_page_insights \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"page":"…","days":10}'
قراءةPOST /api/v1/tools/get_facebook_post_commentsعرض تعليقات منشور▾

تعليقات منشورٍ (الأحدث أولاً) مع حالتها: مخفيّ؟ أعجبت به الصفحة؟ عدد الردود.

الصلاحية المطلوبة لموظّف الربط: facebook.comment.view.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
post_idstringنعممعرّف المنشور كما تعيده list_facebook_posts
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_facebook_post_comments \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"…"}'
قراءةPOST /api/v1/tools/get_facebook_post_metricsعرض أرقام منشور▾

أرقام منشورٍ واحد: التفاعلات والتعليقات والمشاركات والوصول والنقرات (حين تتيحها ميتا).

الصلاحية المطلوبة لموظّف الربط: facebook.post.view.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
post_idstringنعممعرّف المنشور كما تعيده list_facebook_posts
curl -X POST https://labeb.app/api/v1/tools/get_facebook_post_metrics \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"…"}'
تعديلPOST /api/v1/tools/hide_facebook_commentإخفاء تعليق فيسبوك (أو إظهاره)▾

إخفاء تعليق عن العامّة (يبقى ظاهراً لصاحبه وأصدقائه) أو إظهاره.

الصلاحية المطلوبة لموظّف الربط: facebook.comment.edit.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
comment_idstringنعممعرّف التعليق كما تعيده أدوات التعليقات
hiddenboolean—false لإظهاره
curl -X POST https://labeb.app/api/v1/tools/hide_facebook_comment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"comment_id":"…"}'
تعديلPOST /api/v1/tools/like_facebook_commentإعجاب بتعليق فيسبوك (أو إلغاؤه)▾

إعجاب الصفحة بتعليق أو إلغاؤه.

الصلاحية المطلوبة لموظّف الربط: facebook.comment.edit.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
comment_idstringنعممعرّف التعليق كما تعيده أدوات التعليقات
likeboolean—false لإلغاء الإعجاب
curl -X POST https://labeb.app/api/v1/tools/like_facebook_comment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"comment_id":"…"}'
قراءةPOST /api/v1/tools/list_facebook_pagesعرض صفحات فيسبوك▾

صفحات فيسبوك المربوطة بقناة «تعليقات فيسبوك» لهذا الحساب. نادِها أولاً إن كان للحساب أكثر من صفحة، ومرّر اسمها في page.

الصلاحية المطلوبة لموظّف الربط: facebook.post.view.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_facebook_pages \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_facebook_postsعرض منشورات فيسبوك▾

قائمة آخر المنشورات مع التفاعلات والتعليقات والمشاركات ومعرّف كل منشور. للوصول والنقرات لمنشورٍ بعينه استعمل get_facebook_post_metrics، ولسؤال «كيف صفحتي؟» اجمعها مع get_facebook_page_insights.

الصلاحية المطلوبة لموظّف الربط: facebook.post.view.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_facebook_posts \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"page":"…","limit":10}'
قراءةPOST /api/v1/tools/list_facebook_scheduled_postsعرض المنشورات المجدولة▾

المنشورات المجدولة التي لم تُنشر بعد ومواعيدها.

الصلاحية المطلوبة لموظّف الربط: facebook.post.view.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
curl -X POST https://labeb.app/api/v1/tools/list_facebook_scheduled_posts \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"page":"…"}'
قراءةPOST /api/v1/tools/list_facebook_unanswered_commentsعرض التعليقات بلا رد▾

تعليقات الزبائن على آخر المنشورات التي لم تردّ عليها الصفحة بعد (بلا المخفيّ)، مع رابط كلّ تعليق. لكلّ تعليقٍ commentId جاهزٌ لـ reply_to_facebook_comment: اقترح ردوداً قصيرة بلهجة الزبون واعرضها كلّها للموافقة قبل أيّ إرسال.

الصلاحية المطلوبة لموظّف الربط: facebook.comment.view.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
postsinteger—كم منشوراً أخيراً يُفحص (افتراضياً 5)
curl -X POST https://labeb.app/api/v1/tools/list_facebook_unanswered_comments \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"page":"…","posts":10}'
تعديلPOST /api/v1/tools/publish_facebook_scheduled_post_nowنشر منشور مجدول على فيسبوك الآن▾

نشر منشورٍ مجدولٍ فوراً بدل موعده. **قبل النداء اعرض على المستخدم النصَّ الحرفيّ وخذ موافقته الصريحة — لا تنشر نصّاً لم يره.**

الصلاحية المطلوبة لموظّف الربط: facebook.post.edit.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
post_idstringنعممعرّف المنشور كما تعيده list_facebook_posts
curl -X POST https://labeb.app/api/v1/tools/publish_facebook_scheduled_post_now \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"…"}'
تعديلPOST /api/v1/tools/reply_to_facebook_commentرد علني على تعليق فيسبوك▾

ردّ علنيّ من الصفحة تحت تعليق — يراه الجميع. **قبل النداء اعرض على المستخدم النصَّ الحرفيّ وخذ موافقته الصريحة — لا تنشر نصّاً لم يره.**

الصلاحية المطلوبة لموظّف الربط: facebook.comment.add.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
comment_idstringنعممعرّف التعليق كما تعيده أدوات التعليقات
messagestringنعم
curl -X POST https://labeb.app/api/v1/tools/reply_to_facebook_comment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"comment_id":"…","message":"…"}'
تعديلPOST /api/v1/tools/reschedule_facebook_postتغيير موعد منشور على فيسبوك▾

تغيير موعد منشورٍ مجدول.

الصلاحية المطلوبة لموظّف الربط: facebook.post.edit.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
post_idstringنعممعرّف المنشور كما تعيده list_facebook_posts
scheduled_atstringنعماختياري — اتركه فارغاً للنشر فوراً. ISO-8601 مثل 2026-11-01T18:00:00+03:00؛ بلا فرق توقيت يُفهم بتوقيت الحساب. بين 10 دقائق و75 يوماً من الآن.
curl -X POST https://labeb.app/api/v1/tools/reschedule_facebook_post \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"…","scheduled_at":"…"}'
إرسالPOST /api/v1/tools/send_facebook_private_replyرسالة ماسنجر خاصة لصاحب تعليق فيسبوك▾

رسالة خاصّة على ماسنجر لصاحب تعليق (مرّة لكلّ تعليق، خلال 7 أيام من التعليق، تحتاج إذن الرسائل). **قبل النداء اعرض على المستخدم النصَّ الحرفيّ وخذ موافقته الصريحة — لا تنشر نصّاً لم يره.**

الصلاحية المطلوبة لموظّف الربط: facebook.comment.add.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
comment_idstringنعممعرّف التعليق كما تعيده أدوات التعليقات
messagestringنعم
curl -X POST https://labeb.app/api/v1/tools/send_facebook_private_reply \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"comment_id":"…","message":"…"}'
تعديلPOST /api/v1/tools/update_facebook_post_textتعديل نص منشور على فيسبوك▾

تعديل نصّ منشورٍ منشور أو مجدول. علنيّ. **قبل النداء اعرض على المستخدم النصَّ الحرفيّ وخذ موافقته الصريحة — لا تنشر نصّاً لم يره.**

الصلاحية المطلوبة لموظّف الربط: facebook.post.edit.all

الوسيطالنوعمطلوبالوصف
pagestring—اسم الصفحة أو معرّفها — يلزم فقط إن رُبطت أكثر من صفحة
post_idstringنعممعرّف المنشور كما تعيده list_facebook_posts
messagestringنعم
curl -X POST https://labeb.app/api/v1/tools/update_facebook_post_text \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"…","message":"…"}'

المبيعات والعملاء30

إضافةPOST /api/v1/tools/add_lead_noteإضافة ملاحظة عميل▾

إضافة ملاحظة مؤرخة على بطاقة عميل محتمل.

الصلاحية المطلوبة لموظّف الربط: leads.update.all

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف العميل أو اسمه أو رقمه
notestringنعم
curl -X POST https://labeb.app/api/v1/tools/add_lead_note \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…","note":"…"}'
تعديلPOST /api/v1/tools/assign_follow_up_templateإسناد قالب متابعة▾

إسناد قالب متابعة لعميل: **يلغي كل متابعاته المعلّقة أولاً** ثم ينشئ تسلسل خطوات القالب من الآن. استخدم list_follow_up_templates لمعرفة القوالب ومراحلها.

الصلاحية المطلوبة لموظّف الربط: leads.update.all

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف العميل أو اسمه أو هاتفه
templateIdstringنعممعرّف قالب المتابعة أو اسمه
curl -X POST https://labeb.app/api/v1/tools/assign_follow_up_template \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…","templateId":"…"}'
تعديلPOST /api/v1/tools/assign_leadإسناد عميل محتمل▾

إسناد بطاقة عميل محتمل لموظف، أو إلغاء إسنادها، أو إعادتها إلى لَبيب. يحرّك البطاقة والمحادثة معاً كما في الشاشة (نقلُ المحادثة يحتاج صلاحية استلام/تسليم المحادثات). مرّر userId لموظف، أو toLabeeb=true، أو unassign=true.

الصلاحية المطلوبة لموظّف الربط: leads.update.own

الوسيطالنوعمطلوبالوصف
leadIdstringنعممعرّف بطاقة العميل من list_leads أو get_lead_details (معرّف)
userIdstring—الموظف المُسنَد إليه (معرّف)
toLabeebboolean—إعادة المحادثة إلى لَبيب
unassignboolean—إلغاء الإسناد بلا نقل المحادثة
reasonstring—سبب يُكتب في السجلّ
curl -X POST https://labeb.app/api/v1/tools/assign_lead \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leadId":"…"}'
تعديلPOST /api/v1/tools/cancel_lead_follow_upsإيقاف متابعات عميل▾

إيقاف كل المتابعات المعلّقة لعميل دفعةً واحدة (مثلاً حين يردّ العميل أو يُغلق ملفه). لا يمسّ المُرسَلة.

الصلاحية المطلوبة لموظّف الربط: leads.update.all

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف العميل أو اسمه أو هاتفه
curl -X POST https://labeb.app/api/v1/tools/cancel_lead_follow_ups \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…"}'
تعديلPOST /api/v1/tools/complete_follow_upإقفال متابعة▾

إقفال تذكير متابعة بـ«تمّت المتابعة» بعد أن تواصل الموظف فعلاً، مع «شو صار؟» اختيارياً: outcome replied|no_reply|appointment|lost · contactVia queue|call|mobile|none · nextAt+nextNote = تذكير تالٍ.

الصلاحية المطلوبة لموظّف الربط: leads.update.all

الوسيطالنوعمطلوبالوصف
followUpIdstringنعممعرّف المتابعة (GUID من قائمة المتابعات)
outcomestring—replied|no_reply|appointment|lost
contactViastring—queue|call|mobile|none
nextAtstring—موعد الخطوة التالية ISO (في المستقبل)
nextNotestring—ملاحظة التذكير التالي
curl -X POST https://labeb.app/api/v1/tools/complete_follow_up \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"followUpId":"…"}'
إضافةPOST /api/v1/tools/create_follow_up_planإنشاء خطّة متابعة▾

إنشاء خطّة متابعة جديدة لمرحلة (interested مهتم · engaged متفاعل · trial تجريبي) — تُنشأ غير افتراضية ثم تُضاف خطواتها. مع steps تُحفظ الخطوات مباشرة (النمط الافتراضي ai_smart يحتاج aiGoal لكل خطوة).

الصلاحية المطلوبة لموظّف الربط: followup.create

الوسيطالنوعمطلوبالوصف
namestringنعم
stage"interested" | "engaged" | "trial"—
mode"ai_smart" | "static" | "template"—ai_smart لَبيب يكتب من الهدف · static نصّ ثابت + قالب للنافذة المغلقة · template قالب معتمد دائماً
stepsobject[]—الخطوات بالترتيب — تستبدل الخطوات كلّها. أرسل id الخطوة القائمة لتبقى هويّتها.
curl -X POST https://labeb.app/api/v1/tools/create_follow_up_plan \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"…"}'
إضافةPOST /api/v1/tools/create_leadإضافة عميل محتمل▾

إضافة عميل محتمل جديد برقمه (واسمه ومصدره ومرحلته اختيارياً). يُسند لك افتراضياً. يرفض رقماً له بطاقةٌ قائمة ويعيد معرّفها. stage: interested مهتم (الافتراضي) · engaged متفاعل · trial تجريبي.

الصلاحية المطلوبة لموظّف الربط: leads.create

الوسيطالنوعمطلوبالوصف
phonestringنعمالرقم الدولي بلا + مثل 9639xxxxxxxx
fullNamestring—
sourcestring—مصدر حرّ مثل: معرض · توصية
stage"interested" | "engaged" | "trial"—
curl -X POST https://labeb.app/api/v1/tools/create_lead \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…"}'
تعديلPOST /api/v1/tools/decide_postsale_dealاعتماد صفقة إضافية▾

اعتماد صفقة إضافية أو إرجاعها مع السبب.

الصلاحية المطلوبة لموظّف الربط: leads.won.approve

الوسيطالنوعمطلوبالوصف
dealIdstringنعممعرّف الصفقة من list_postsale_deals (معرّف)
approvebooleanنعماعتماد؟
reasonstring—سبب الإرجاع
curl -X POST https://labeb.app/api/v1/tools/decide_postsale_deal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"dealId":"…","approve":true}'
تعديلPOST /api/v1/tools/decide_wonاعتماد صفقة رابحة▾

اعتمادُ صفقةٍ رابحة (approve=true) أو إرجاعُها للتصحيح (approve=false مع reason). تُرفض إن لم تكن بانتظار الاعتماد، أو نقصتها الباقة أو المبلغ، أو كان المعتمِد هو مَن أرسلها. بعد القرار يُشعَر المرسِل ومديرو المبيعات، والمعتمَد وحده يُحسب إيراداً. لا طريق لتحويل عميلٍ إلى «رابح» عبر الأدوات: التحويل من الواجهة بحقوله الإجبارية.

الصلاحية المطلوبة لموظّف الربط: leads.won.approve

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف العميل أو اسمه أو رقمه
approvebooleanنعم
reasonstring—سبب الإرجاع — مطلوب حين approve=false
curl -X POST https://labeb.app/api/v1/tools/decide_won \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…","approve":true}'
حذفPOST /api/v1/tools/delete_follow_up_planحذف خطّة متابعة▾

حذف خطّة متابعة. إن كان عليها متابعات مجدولة يُرفض الحذف ويُذكر عددها، إلّا مع force=true فتُلغى المجدولة والسلاسل الجارية ثم تُحذف.

الصلاحية المطلوبة لموظّف الربط: followup.delete

الوسيطالنوعمطلوبالوصف
idstringنعم
forceboolean—
curl -X POST https://labeb.app/api/v1/tools/delete_follow_up_plan \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…"}'
تعديلPOST /api/v1/tools/generate_lead_journey_summaryتوليد ملخّص رحلة العميل▾

توليد (أو تحديث) ملخّص رحلة العميل المحتمل بالذكاء: ماذا أراد، الاعتراضات، الوعود، وسبب الربح المقترح. يستهلك من رصيد الذكاء.

الصلاحية المطلوبة لموظّف الربط: leads.update.own

الوسيطالنوعمطلوبالوصف
leadIdstringنعممعرّف بطاقة العميل من list_leads أو get_lead_details (معرّف)
curl -X POST https://labeb.app/api/v1/tools/generate_lead_journey_summary \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leadId":"…"}'
قراءةPOST /api/v1/tools/get_campaign_funnelقمع الحملة▾

قمعُ حملةٍ واحدة: كم عميلاً جلبت وماذا حدث لهم (interested · engaged · trial · won · lost)، مع نسبة التحويل وأسباب الخسارة. الإنفاق: spentInWindow إنفاقُ الفترة نفسِها بعملة الحساب (currency) وspentInWindowUsd بالدولار بسعر صرف كلّ يوم، ومنه costPerLeadUsd وcostPerWonUsd؛ وspentLifetime إنفاقُ العمر كلِّه للمرجع فقط. الإنفاق اليوميّ محفوظ منذ 2026-07-01.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
campaignstringنعممعرّف الحملة أو معرّفها في ميتا أو اسمها كاملاً أو جزءاً منه
periodstring—today|yesterday|last24h|last7d|last30d|all — الافتراضي all
fromDatestring—
toDatestring—
curl -X POST https://labeb.app/api/v1/tools/get_campaign_funnel \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"campaign":"…"}'
قراءةPOST /api/v1/tools/get_crm_reportتقرير العملاء▾

تقرير العملاء المحتملين: byStage لقطةٌ لكلّ البطاقات منذ البداية · newInPeriod عددُ الجدد في الفترة · newByStage مراحلُ الجدد أنفسِهم · آخرُ العملاء. الفترة: fromDate/toDate (YYYY-MM-DD بتوقيت الحساب، شاملة) وتتقدّم على days، أو days (الافتراضي 30). لقمعٍ شهريّ بالتعريفات المعتمدة استخدم get_sales_funnel.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
daysinteger—
fromDatestring—YYYY-MM-DD بتوقيت حساب المستأجر
toDatestring—YYYY-MM-DD شاملاً
curl -X POST https://labeb.app/api/v1/tools/get_crm_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10,"fromDate":"…"}'
قراءةPOST /api/v1/tools/get_follow_up_delivery_logسجلّ تسليم المتابعات▾

سجلّ تسليم المتابعات: ما أُرسل لكل عميل ومن أي خطّة وخطوة، وهل وصل أو رُفض ولماذا (رمز الخطأ)، وهل خرج قالباً بديلاً — مع الأعداد. outcome: delivered وصل · rejected رُفض · fallback بقالب بديل. ومع health=true: صحّة كل قناة في آخر 24 ساعة.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
daysinteger—آخر كم يوماً (افتراضياً 7)
outcome"delivered" | "rejected" | "fallback"—
searchstring—
healthboolean—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_follow_up_delivery_log \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10,"outcome":"delivered"}'
قراءةPOST /api/v1/tools/get_follow_up_plan_stepsخطوات خطّة متابعة▾

خطوات خطّة متابعة بالتفصيل (id من list_follow_up_templates): ترتيبها وتوقيتها ونصّها وهدفها وقالب واتساب لكل لغة، ونمط الخطّة ومرحلتها.

الصلاحية المطلوبة لموظّف الربط: followup.view

الوسيطالنوعمطلوبالوصف
idstringنعم
curl -X POST https://labeb.app/api/v1/tools/get_follow_up_plan_steps \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…"}'
قراءةPOST /api/v1/tools/get_follow_ups_reportتقرير المتابعات▾

تقرير المتابعات: التوزيع على الحالات والأنواع خلال فترة + المتابعات القادمة غير المرسلة.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_follow_ups_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_lead_detailsتفاصيل عميل▾

بطاقة عميل محتمل كاملة بالبحث بالهاتف أو الاسم: البيانات، المرحلة، الملاحظات، ملخص الرحلة إن وجد.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
phonestring—
namestring—
curl -X POST https://labeb.app/api/v1/tools/get_lead_details \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…","name":"…"}'
قراءةPOST /api/v1/tools/get_lead_settingsإعدادات العملاء▾

إعدادات العملاء المحتملين: مصادر العملاء المعرّفة وأسباب الخسارة — مفيدة قبل تحليل المصادر أو الخسارة.

الصلاحية المطلوبة لموظّف الربط: leads.settings.manage

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_lead_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_lead_source_reportمصادر العملاء▾

مصادرُ العملاء خلال فترة، ولكلّ مصدرٍ اسمٌ مقروء (label) وتوزيعُ حملاته — ومجموعُ التفصيل يطابق الإجمالي دائماً لأنّ ما بلا حملةٍ يظهر سطراً صريحاً «بلا حملة». المصادر: meta_ctwa = إعلانات ميتا (يشمل من نقر الإعلان ثم كتب نصّاً من عنده) · whatsapp = تواصل مباشر بلا إعلان · tenant_data = بيانات مستوردة · manual = إدخال يدوي. ومعه توزيعٌ حسب القناة (واتساب · ماسنجر · الموقع) والبلد ومسار الإسناد (ctwa_click = نقرة إعلان مؤكّدة · opener = عبارة افتتاحية). الفترة تقويميّة بتوقيت حساب المستأجر.

الصلاحية المطلوبة لموظّف الربط: leads.sources.view

الوسيطالنوعمطلوبالوصف
periodstring—today|yesterday|last24h|last7d|last30d|all — الافتراضي last24h
fromDatestring—YYYY-MM-DD بتوقيت حساب المستأجر
toDatestring—YYYY-MM-DD شاملاً
curl -X POST https://labeb.app/api/v1/tools/get_lead_source_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"period":"…","fromDate":"…"}'
قراءةPOST /api/v1/tools/get_leads_by_campaignعملاء حملة▾

عملاءُ حملةٍ واحدة: العددُ أوّلاً ثمّ القائمةُ ثمّ الملخّص. تقبل معرّف الحملة أو معرّفها في ميتا أو اسمها كاملاً أو جزءاً منه (تُطابَق بعد تجاهل علامات اتّجاه النصّ وفروق المسافات). ولكلّ عميل: الاسمُ والهاتفُ ووقتُ الدخول والمصدرُ والمرحلةُ والمسؤولُ وسببُ الخسارة والبلدُ ومسارُ الإسناد (نقرة إعلان أم عبارة افتتاحية).

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
campaignstringنعممعرّف الحملة أو معرّفها في ميتا أو اسمها كاملاً أو جزءاً منه
periodstring—today|yesterday|last24h|last7d|last30d|all — الافتراضي all
fromDatestring—YYYY-MM-DD بتوقيت حساب المستأجر
toDatestring—YYYY-MM-DD شاملاً
sourcestring—
stagestring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_leads_by_campaign \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"campaign":"…"}'
قراءةPOST /api/v1/tools/list_follow_up_templatesقوالب المتابعة▾

قوالب متابعة العملاء المحتملين: المرحلة التي تنطبق عليها، مفعّلة أم لا، عدد خطواتها، ونمط التشغيل.

الصلاحية المطلوبة لموظّف الربط: followup.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_follow_up_templates \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_follow_upsالمتابعات▾

المتابعات المجدولة والمرسلة (الافتراضي القادمة والمعلقة)، ولكلّ مُقفَلةٍ يدوياً: النتيجة (outcome) ومن أقفلها ومتى وكيف تواصل.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_follow_ups \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"limit":10}'
قراءةPOST /api/v1/tools/list_leadsعرض العملاء المحتملين▾

قائمة بطاقات العملاء المحتملين بفلاتر: المرحلة، الموظف المُسنَد (معرّفه أو me لي أو unassigned غير مُسنَد)، القناة، بحث بالاسم/الرقم، تاريخ الإضافة، الأولوية، المتأخّرة، وبلا متابعة مجدولة. يعيد العدد الكلي وعدّ كل مرحلة. من لا يملك «كل العملاء» يرى عملاءه فقط. المراحل: interested مهتم · engaged متفاعل · trial تجريبي · won ربح · lost خسارة.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
stagestring—المرحلة
assignedTostring—معرّف الموظف أو me أو unassigned
sourcestring—القناة مثل whatsapp · meta · manual
searchstring—جزء من الاسم أو الرقم
createdFromstring—من تاريخ yyyy-MM-dd
createdTostring—إلى تاريخ yyyy-MM-dd
prioritystring—الأولوية
overdueOnlyboolean—المتأخّرة فقط
noFollowUpboolean—بلا متابعة مجدولة فقط
pageinteger—الصفحة
limitinteger—عدد البطاقات (حتى 50)
curl -X POST https://labeb.app/api/v1/tools/list_leads \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"stage":"…","assignedTo":"…"}'
قراءةPOST /api/v1/tools/list_pending_wonرابحون بانتظار الاعتماد▾

الصفقاتُ الرابحة بانتظار الاعتماد: العميل (customerId) · الباقة · المبلغ بالدولار · المدة بالأشهر · عدد المستخدمين · طريقة الدفع · نوع البيع · مَن أرسلها ومتى. للاعتماد أو الإرجاع استخدم decide_won.

الصلاحية المطلوبة لموظّف الربط: leads.won.approve

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_pending_won \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_sales_opportunitiesالفرص البيعية▾

الفرص البيعية: التوزيع على المراحل مع مجموع القيمة + آخر الفرص وأسباب الخسارة.

الصلاحية المطلوبة لموظّف الربط: leads.view

الوسيطالنوعمطلوبالوصف
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_sales_opportunities \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"limit":10}'
تعديلPOST /api/v1/tools/reschedule_follow_upتعديل متابعة▾

تعديل متابعة معلّقة: تأجيلها أو تغيير نصها أو تخطيها أو إلغاؤها. followUpId من list_follow_ups أو get_follow_ups_report. status: pending|skipped|cancelled. المتابعات المُرسَلة تاريخٌ لا يُعدَّل.

الصلاحية المطلوبة لموظّف الربط: leads.update.all

الوسيطالنوعمطلوبالوصف
followUpIdstringنعممعرّف المتابعة (GUID من قائمة المتابعات)
scheduledAtstring—الموعد الجديد بصيغة ISO — في المستقبل
messageTextstring—
titlestring—
statusstring—pending|skipped|cancelled
curl -X POST https://labeb.app/api/v1/tools/reschedule_follow_up \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"followUpId":"…"}'
إضافةPOST /api/v1/tools/schedule_follow_upجدولة متابعة▾

جدولة متابعة لعميل محتمل في موعد مستقبلي. kind: channel (تُرسل للعميل عبر واتساب تلقائياً) | reminder (تذكير داخلي للموظف لا يصل العميل). الافتراضي channel — فاختر reminder صراحةً إن كان المقصود تذكير الفريق لا مراسلة العميل.

الصلاحية المطلوبة لموظّف الربط: leads.update.all

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف العميل أو اسمه أو هاتفه
messageTextstringنعمنص الرسالة أو التذكير
scheduledAtstringنعمالموعد بصيغة ISO مثل 2026-08-05T09:00:00Z — يجب أن يكون في المستقبل
titlestring—
kindstring—channel|reminder
curl -X POST https://labeb.app/api/v1/tools/schedule_follow_up \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…","messageText":"…","scheduledAt":"…"}'
تعديلPOST /api/v1/tools/update_follow_up_planتعديل خطّة متابعة▾

تعديل خطّة متابعة: الاسم، المرحلة، تفعيلها، جعلها الافتراضية لمرحلتها (تُطفئ افتراضيّة غيرها)، نمطها، واستبدال خطواتها (حتى 12 خطوة). لا يُسمح بخطوات أقلّ من موضع عميلٍ وصل إليه في سلسلة جارية.

الصلاحية المطلوبة لموظّف الربط: followup.update

الوسيطالنوعمطلوبالوصف
idstringنعم
namestring—
stage"interested" | "engaged" | "trial"—
isActiveboolean—
isDefaultForStageboolean—
mode"ai_smart" | "static" | "template"—ai_smart لَبيب يكتب من الهدف · static نصّ ثابت + قالب للنافذة المغلقة · template قالب معتمد دائماً
stepsobject[]—الخطوات بالترتيب — تستبدل الخطوات كلّها. أرسل id الخطوة القائمة لتبقى هويّتها.
curl -X POST https://labeb.app/api/v1/tools/update_follow_up_plan \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…"}'
تعديلPOST /api/v1/tools/update_lead_fieldsتعديل بيانات عميل محتمل▾

تعديل حقول بطاقة عميل محتمل: الاسم، الملاحظات، الأولوية، الباقة وقيمتها، المصدر (sourceType: channel قناة · campaign حملة · manual مصدر يدوي، مع sourceValue)، وسبب الخسارة لعميلٍ خاسر (lossReasonId من الكتالوج أو lossReason نصاً، وlossSaid «ماذا قال العميل» إلزاميٌّ حين يكون السبب اعتراضاً صريحاً). لتغيير المرحلة استعمل update_lead_stage.

الصلاحية المطلوبة لموظّف الربط: leads.update.own

الوسيطالنوعمطلوبالوصف
leadIdstringنعممعرّف بطاقة العميل من list_leads أو get_lead_details (معرّف)
fullNamestring—الاسم
notesstring—الملاحظات (تستبدل القديمة)
prioritystring—الأولوية
packageNamestring—اسم الباقة (فارغ = مسح)
packageValuenumber—قيمة الباقة (0 = مسح)
sourceType"channel" | "campaign" | "manual"—نوع المصدر
sourceValuestring—القناة أو معرّف الحملة/المصدر
lossReasonIdstring—سبب الخسارة من الكتالوج (معرّف)
lossReasonstring—سبب الخسارة نصاً
lossSaidstring—ماذا قال العميل
curl -X POST https://labeb.app/api/v1/tools/update_lead_fields \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leadId":"…"}'
تعديلPOST /api/v1/tools/update_lead_stageنقل مرحلة عميل▾

نقل عميل محتمل إلى مرحلة: interested|trial|engaged. «نجاح» عبر ترقية ما بعد البيع، و«خسارة» من الواجهة مع سبب.

الصلاحية المطلوبة لموظّف الربط: leads.update.all

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف العميل أو اسمه أو رقمه
stagestringنعم
curl -X POST https://labeb.app/api/v1/tools/update_lead_stage \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…","stage":"…"}'

واتساب والمواعيد32

تعديلPOST /api/v1/tools/assign_conversationإسناد محادثة واتساب▾

إسناد محادثة واتساب أو تغيير مالكها. action: human إسناد لموظف (userId، افتراضياً أنت) فيسكت لَبيب فوراً · ai إرجاعها للَبيب · unassign إلغاء الإسناد · resolve إغلاقها. من لا يملك «تعديل كل المحادثات» يدير محادثاته وغير المُسندة فقط.

الصلاحية المطلوبة لموظّف الربط: whatsapp.conversation.update.own

الوسيطالنوعمطلوبالوصف
threadKeystringنعممفتاح المحادثة كما يعيده list_whatsapp_conversations (رقم العميل أو «رقمنا:رقم العميل» أو معرّف المجموعة)
action"human" | "ai" | "unassign" | "resolve"نعم
userIdstring—
notesstring—
curl -X POST https://labeb.app/api/v1/tools/assign_conversation \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"threadKey":"…","action":"human"}'
تعديلPOST /api/v1/tools/cancel_appointmentإلغاء موعد▾

إلغاء موعد مع إشعار العميل بالإلغاء. خذ appointmentId من list_appointments، وreason اختياري.

الصلاحية المطلوبة لموظّف الربط: appointments.update.all

الوسيطالنوعمطلوبالوصف
appointmentIdstringنعم
reasonstring—
curl -X POST https://labeb.app/api/v1/tools/cancel_appointment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"appointmentId":"…"}'
تعديلPOST /api/v1/tools/change_whatsapp_broadcast_stateالتحكّم بحملة واتساب▾

التحكّم بحملة واتساب (id من list_whatsapp_broadcasts): pause إيقاف مؤقت · resume استئناف · stop إيقاف نهائي · start_now تشغيل حملة مجدولة الآن. من لا يملك «الكل» يتحكّم بحملاته فقط.

الصلاحية المطلوبة لموظّف الربط: whatsapp.broadcast.update.own

الوسيطالنوعمطلوبالوصف
idstringنعم
action"pause" | "resume" | "stop" | "start_now"نعم
curl -X POST https://labeb.app/api/v1/tools/change_whatsapp_broadcast_state \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…","action":"pause"}'
إضافةPOST /api/v1/tools/create_appointmentحجز موعد▾

حجز موعد يدوي لعميل برقمه في وقت محدد بتوقيت الشركة (scheduledAt بصيغة 2026-09-21T15:30). يتحقق من التعارض ويربطه ببطاقة العميل إن وجدت. لا يرسل رسالة للعميل.

الصلاحية المطلوبة لموظّف الربط: appointments.create

الوسيطالنوعمطلوبالوصف
phonestringنعم
customerNamestring—
scheduledAtstringنعم
durationMinutesinteger—
assignedToUserIdstring—
notesstring—
curl -X POST https://labeb.app/api/v1/tools/create_appointment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…","scheduledAt":"…"}'
إضافةPOST /api/v1/tools/create_whatsapp_broadcastإطلاق حملة واتساب▾

إطلاق حملة واتساب بقالب معتمد لجمهور من العملاء المحتملين (حتى 1000 مستلم): instanceId الرقم المرسِل · templateId القالب · stages مراحل الجمهور (interested · engaged · trial · lost …) · activeWithinDays تفاعل خلال كم يوماً · params قيم متغيّرات القالب بالترتيب (source: first_name · full_name · package · text مع text) · ratePerHour سرعة الإرسال 30 أو 120 أو 400 · scheduledAt موعد لاحق اختياري. تُستثنى تلقائياً الأرقام الرافضة والمكرّرة. يعيد عدد من سيصلهم قبل الإطلاق.

الصلاحية المطلوبة لموظّف الربط: whatsapp.broadcast.create

الوسيطالنوعمطلوبالوصف
namestringنعم
instanceIdstringنعم
templateIdstringنعم
stagesstring[]—
activeWithinDaysinteger—
paramsobject[]—
ratePerHour30 | 120 | 400—
scheduledAtstring—ISO 8601
curl -X POST https://labeb.app/api/v1/tools/create_whatsapp_broadcast \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","instanceId":"…","templateId":"…"}'
إضافةPOST /api/v1/tools/create_whatsapp_templateإنشاء قالب واتساب▾

إنشاء قالب واتساب رسمي وإرساله لمراجعة ميتا. name بحروف إنجليزية صغيرة وشرطات سفلية، body نص القالب والمتغيرات بصيغة {{1}} {{2}} مع مثال لكل متغير في examples، category واحدة من UTILITY (خدمي) أو MARKETING (تسويقي) أو AUTHENTICATION (رمز تحقق)، language مثل ar أو en، footer اختياري، buttons اختيارية: QUICK_REPLY حتى 10، URL حتى 2 مع url، PHONE_NUMBER واحد مع phoneNumber. instanceId مطلوب فقط إن كان في الحساب أكثر من قناة رسمية. القالب لا يرسل قبل اعتماده — تابع حالته بـ get_whatsapp_template_status.

الصلاحية المطلوبة لموظّف الربط: whatsapp.template.create

الوسيطالنوعمطلوبالوصف
namestringنعم
bodystringنعم
category"UTILITY" | "MARKETING" | "AUTHENTICATION"نعم
languagestring—
examplesstring[]—
footerstring—
buttonsobject[]—
instanceIdstring—
curl -X POST https://labeb.app/api/v1/tools/create_whatsapp_template \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","body":"…","category":"UTILITY"}'
حذفPOST /api/v1/tools/delete_whatsapp_templateحذف قالب واتساب▾

حذف قالب واتساب رسمي من ميتا ومن القائمة — لا رجعة فيه، ولا يمكن إعادة استعمال اسمه فوراً عند ميتا. مرر templateId (المعرّف أو الاسم). القالب الذي تديره خدمة رمز التحقق لا يحذف من هنا.

الصلاحية المطلوبة لموظّف الربط: whatsapp.template.delete

الوسيطالنوعمطلوبالوصف
templateIdstringنعممعرّف القالب أو اسمه
curl -X POST https://labeb.app/api/v1/tools/delete_whatsapp_template \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"templateId":"…"}'
قراءةPOST /api/v1/tools/get_appointment_settingsإعدادات المواعيد▾

إعدادات وكيل المواعيد: التفعيل، المدة، القوالب، كلمات الكشف، وmeetingLateMinutes = بعد كم دقيقة من بداية الموعد يُعتبر الموظف «تأخّر» عن الاجتماع.

الصلاحية المطلوبة لموظّف الربط: appointments.settings.manage

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_appointment_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_channel_trafficعرض حركة القنوات وكلفة لَبيب▾

حركة كل قناة وكلفة لَبيب عليها لفترة: الوارد (خاص · مجموعات)، والصادر (لَبيب ومنه الصوتي · موظفين · متابعات آلية)، وكلفة الذكاء بالدولار ووسطي كلفة رسالة لَبيب. days: آخر كم يوماً (افتراضياً 1 = آخر 24 ساعة)، أو from/to بصيغة ISO 8601 لفترة محدّدة. الخط العادي السوري يُضمّ إلى قناته الأمّ. unattributedAiCostUsd = كلفةٌ لم تُربط بقناة (قبل 2026-11-01 كلّ الكلفة كانت كذلك). costTrackedFrom = بداية تسجيل الكلفة لكل قناة، والوسطي يُحسب على ردود لَبيب من بعدها فقط.

الصلاحية المطلوبة لموظّف الربط: whatsapp.instance.read.all

الوسيطالنوعمطلوبالوصف
daysinteger—
fromstring—ISO 8601
tostring—ISO 8601
curl -X POST https://labeb.app/api/v1/tools/get_channel_traffic \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10,"from":"…"}'
قراءةPOST /api/v1/tools/get_conversation_summariesملخصات المحادثات▾

الملخصات المحفوظة لمحادثات العملاء (ذاكرة المحادثات الطويلة).

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.read.all

الوسيطالنوعمطلوبالوصف
phonestring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_conversation_summaries \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…","limit":10}'
قراءةPOST /api/v1/tools/get_whatsapp_conversationقراءة محادثة▾

رسائل محادثة عميل على أي قناة أو مجموعة واتساب (بالتسلسل الزمني) — للتحليل العميق: الاتجاه والنص والوقت، ولكل رسالة قناتها ونوعها، وchannels تعدّ رسائل كل قناة. مرّر في phone رقم العميل أو address كما أعادته list_whatsapp_conversations (مثل …@tg)، وchannel أو channelType لقراءة قناة واحدة حين راسل العميل أكثر من رقم. للمجموعة مرّر معرّفها الكامل (…@g.us من list_whatsapp_groups) في phone، فتعيد لكلّ رسالة من أرسلها: لَبيب أو موظّف أو رقم المشارك.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.read.all

الوسيطالنوعمطلوبالوصف
phonestringنعمرقم العميل أو address من list_whatsapp_conversations، أو معرّف مجموعة كامل بلاحقة @g.us
channelstring—اختياري: اسم القناة أو رقمها
channelTypestring—اختياري: whatsapp · whatsapp_official · telegram · instagram · messenger · facebook_comments · website
isGroupboolean—اختياري: الوجهة مجموعة. يُستنتج من لاحقة @g.us
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_whatsapp_conversation \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…"}'
قراءةPOST /api/v1/tools/get_whatsapp_group_membersأعضاء مجموعة واتساب▾

أعضاء مجموعة واتساب بأسمائهم وأرقامهم ومن المشرف — groupJid من list_whatsapp_groups.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.read.all

الوسيطالنوعمطلوبالوصف
groupJidstringنعم
curl -X POST https://labeb.app/api/v1/tools/get_whatsapp_group_members \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"groupJid":"…"}'
قراءةPOST /api/v1/tools/get_whatsapp_routingتوجيه الواتساب▾

إعداد توجيه محادثات الواتساب لكل رقم: ذكاء أم موظف واحد أم تناوب.

الصلاحية المطلوبة لموظّف الربط: whatsapp.routing.manage

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_whatsapp_routing \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_whatsapp_send_windowنافذة الإرسال▾

هل نافذة 24 ساعة مفتوحة لهذا الرقم على القناة الرسمية. اسأل قبل إرسال ملف أو نص حر: خارج النافذة لا تقبل ميتا إلا قالبا معتمدا. القنوات غير الرسمية لا تخضع لهذا الحد.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.send

الوسيطالنوعمطلوبالوصف
phonestringنعم
curl -X POST https://labeb.app/api/v1/tools/get_whatsapp_send_window \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…"}'
قراءةPOST /api/v1/tools/get_whatsapp_template_statusحالة قالب واتساب▾

حالة قالب واتساب الآن: يسحب الحالة من ميتا أولاً ثم يعيد status (approved معتمد، pending قيد المراجعة، rejected مرفوض، paused موقوف) مع معناها وسبب الرفض إن وجد والنص وعدد المتغيرات. مرر templateId (المعرّف أو الاسم)، وrefresh=false للقراءة المخزنة بلا سحب.

الصلاحية المطلوبة لموظّف الربط: whatsapp.template.view

الوسيطالنوعمطلوبالوصف
templateIdstringنعممعرّف القالب أو اسمه
refreshboolean—
curl -X POST https://labeb.app/api/v1/tools/get_whatsapp_template_status \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"templateId":"…"}'
قراءةPOST /api/v1/tools/list_appointmentsقائمة المواعيد▾

المواعيد ضمن فترة (الافتراضي القادمة 14 يوماً، والماضية بـ daysBack) مع الحالة والعميل والمسؤول، ولموعد الاجتماع أونلاين: هل دخل العميل ومتى، وهل دخل الموظّف ومتى وكم تأخّر (meeting.data=unknown يعني ما في بيانات).

الصلاحية المطلوبة لموظّف الربط: appointments.view.all

الوسيطالنوعمطلوبالوصف
daysAheadinteger—القادمة كم يوماً (الافتراضي 14)
daysBackinteger—والماضية كم يوماً (الافتراضي 1)
statusstring—scheduled · pending_time · completed · no_show · cancelled
meeting"staff_late" | "staff_absent" | "customer_joined" | "customer_absent"—مواعيد الاجتماع أونلاين فقط: الموظّف تأخّر · الموظّف ما دخل · العميل دخل · العميل ما دخل
curl -X POST https://labeb.app/api/v1/tools/list_appointments \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"daysAhead":10,"daysBack":10}'
قراءةPOST /api/v1/tools/list_conversation_assignmentsإسناد المحادثات▾

من يملك المحادثات: مع threadKey — مالك محادثة واحدة (لَبيب أم موظف، ومتى، وهل لَبيب ما زال يساعد). بلا threadKey — محادثاتك المفتوحة المسندة لك، ولمن يملك «تعديل كل المحادثات» أيضاً عدد المحادثات المفتوحة لكل موظف.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.read.all

الوسيطالنوعمطلوبالوصف
threadKeystring—مفتاح المحادثة كما يعيده list_whatsapp_conversations (رقم العميل أو «رقمنا:رقم العميل» أو معرّف المجموعة)
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_conversation_assignments \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"threadKey":"…","limit":10}'
قراءةPOST /api/v1/tools/list_whatsapp_broadcastsعرض حملات واتساب ونتائجها▾

حملات واتساب: الاسم والحالة والقالب وعدد المستلمين وما أُرسل وما فشل وما تُخطّي والكلفة التقديرية والمواعيد. مع id: تفصيل حملةٍ واحدة — وصل/قُرئ/ردّ، أسباب التخطّي والفشل، والكلفة الفعلية. من لا يملك «الكل» يرى حملاته فقط. سقف الحملة 1000 مستلم.

الصلاحية المطلوبة لموظّف الربط: whatsapp.broadcast.view.own

الوسيطالنوعمطلوبالوصف
idstring—معرّف الحملة لتفصيلها
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_whatsapp_broadcasts \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…","limit":10}'
قراءةPOST /api/v1/tools/list_whatsapp_channelsقنوات واتساب وحالتها▾

كل قنوات الحساب (أرقام واتساب · تلغرام · انستغرام · ماسنجر · تعليقات فيسبوك · الموقع): الاسم والرقم والمزوّد ونوع القناة type/typeLabel (whatsapp_official واتساب رسمي · whatsapp واتساب · telegram …) وهل متصل الآن ومتى آخر اتصال وسبب الانقطاع، والرقم المرافق، وأرقام آخر 24 ساعة: أُرسل · فشل · وصل · قُرئ · وارد · نسبة الفشل.

الصلاحية المطلوبة لموظّف الربط: whatsapp.instance.read.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_whatsapp_channels \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_whatsapp_conversationsقراءة المحادثات▾

المحادثات الخاصة على كل القنوات (واتساب بأرقامه · تلغرام · انستغرام · ماسنجر · تعليقات فيسبوك · الموقع) مع فلاتر: نافذة زمنية بتوقيت الحساب (period أو fromDate/toDate)، ومرحلة العميل (stage)، والقناة باسمها أو رقمها (channel)، ونوع القناة (channelType)، وunanswered للمحادثات التي آخر رسالة فيها من العميل ولم يُردّ عليها. المحادثة = عميل على قناة واحدة: من راسل رقمين من أرقامنا يظهر محادثتين. لكل محادثة: address (عنوان العميل — رقمه على واتساب، أو عنوانه بلاحقة القناة مثل …@tg على تلغرام؛ مرّره كما هو إلى get_whatsapp_conversation وأدوات الإرسال وthreadKey)، وphone (رقم جواله إن عُرف)، والاسم والمرحلة، وchannel وchannelType وchannelTypeLabel وourNumber (رقمنا الذي راسله)، وعدد الرسائل في النافذة وآخر رسالة ومن أرسلها وهل تنتظر ردّاً، مع العدد الكلي وbyChannelType. نقطة البداية لتحليل المحادثات.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.read.all

الوسيطالنوعمطلوبالوصف
periodstring—today|yesterday|last24h|last7d|last30d|all — الافتراضي last30d
fromDatestring—YYYY-MM-DD بتوقيت الحساب
toDatestring—YYYY-MM-DD شاملاً
stagestring—interested|engaged|trial|won|lost
channelstring—اسم القناة أو رقمها
channelType"whatsapp" | "whatsapp_official" | "telegram" | "instagram" | "messenger" | "facebook_comments" | "website"—نوع القناة — whatsapp تشمل الرسمي
unansweredboolean—فقط المحادثات التي تنتظر ردّنا
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_whatsapp_conversations \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"period":"…","fromDate":"…"}'
قراءةPOST /api/v1/tools/list_whatsapp_groupsقراءة المجموعات▾

مجموعات واتساب التي يشارك بها حسابك: المعرف الكامل بصيغة أرقام تليها @g.us والاسم والنوع (post_sale ما بعد البيع · agent وكلاء · internal داخلية) وعدد الرسائل وآخر نشاط، مرتبة بالأحدث نشاطاً. هذا المعرف هو ما يوضع في حقل phone عند send_whatsapp_message أو send_whatsapp_media للإرسال إلى مجموعة. query يبحث في اسم المجموعة عبر كل تاريخها، وtype يفلتر بالنوع. ومع period أو fromDate/toDate (الحدّ الأقصى 92 يوماً) تعيد المجموعات التي تحرّكت في الفترة، ولكل مجموعة: رسائل العميل ورسائل الفريق ورسائل لَبيب منفصلة (رسائل الموظّفين من جوّالاتهم تُعدّ للفريق لا للعميل؛ التفاعلات ورسائل النظام لا تُعدّ)، ومن ردّ من الموظّفين، وهل آخرها رسالة عميل بلا ردّ (pending) ومنذ متى، والموظّف المسؤول، والتذاكر المفتوحة منها في الفترة؛ مع summary محسوب على كل المطابق: المتحرّكة والتي ردّ عليها الفريق والمعلّقة، لكل موظّف. pendingOnly للمعلّقة وحدها. صفحات: page (من 1) وlimit (الافتراضي 20، الأقصى 100)، وhasMore. ولقراءة رسائل مجموعة مرّر معرّفها إلى get_whatsapp_conversation.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.read.all

الوسيطالنوعمطلوبالوصف
querystring—اختياري: جزء من اسم المجموعة — بلا حساسية لحالة الأحرف
type"post_sale" | "agent" | "internal"—اختياري: نوع المجموعة
periodstring—اختياري: today|yesterday|last24h|last7d|last30d
fromDatestring—YYYY-MM-DD بتوقيت الحساب
toDatestring—YYYY-MM-DD شاملاً
pendingOnlyboolean—مع الفترة: المجموعات التي آخرها رسالة عميل بلا ردّ
pageinteger—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_whatsapp_groups \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"query":"…","type":"post_sale"}'
قراءةPOST /api/v1/tools/list_whatsapp_official_templatesقوالب واتساب الرسمية▾

قوالب واتساب الرسمية المعتمدة: الاسم واللغة والحالة وعدد المتغيّرات ونصّها.

الصلاحية المطلوبة لموظّف الربط: whatsapp.template.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_whatsapp_official_templates \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
تعديلPOST /api/v1/tools/reschedule_appointmentإعادة جدولة موعد▾

تغيير وقت موعد قائم (scheduledAt بتوقيت الشركة) مع إشعار العميل بالوقت الجديد. خذ appointmentId من list_appointments.

الصلاحية المطلوبة لموظّف الربط: appointments.update.all

الوسيطالنوعمطلوبالوصف
appointmentIdstringنعم
scheduledAtstringنعم
durationMinutesinteger—
assignedToUserIdstring—
notesstring—
curl -X POST https://labeb.app/api/v1/tools/reschedule_appointment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"appointmentId":"…","scheduledAt":"…"}'
إرسالPOST /api/v1/tools/send_whatsapp_mediaإرسال مرفق واتساب▾

إرسال ملف أو صورة أو مستند عبر واتساب إلى رقم أو إلى مجموعة، أو إلى عميل قناة أخرى بعنوانه (…@tg) من قناة محادثته — وللمجموعة مرر معرفها الكامل بصيغة @g.us في حقل phone، وتُقرأ المعرفات بـ list_whatsapp_groups. مرر fileId لملف رفعته سابقا بـ upload_file وهو الأفضل عند الإرسال لأكثر من رقم لأنه لا يعيد الحمولة، أو url للملف، أو base64 لمحتواه — مصدر واحد فقط لا أكثر. مع fileName وcaption اختياريا. تصل للعميل فعلا. السقف 16 ميغابايت، والصور والفيديو سقفها 16 من واتساب نفسه. الصوت غير مدعوم بعد. يخضع لحدود الإرسال: فاصل زمني بين رسالتين لنفس الرقم، وسقف ساعي للحساب، وسقف لعدد الأرقام المختلفة في الساعة.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.send

الوسيطالنوعمطلوبالوصف
phonestringنعمرقم بصيغة دولية بأرقام فقط بلا + ولا مسافات، أو معرف مجموعة كامل بلاحقة @g.us
fileIdstring—معرف ملف مرفوع مسبقا بـ upload_file — الأفضل للإرسال المتكرر
urlstring—
base64string—
fileNamestring—
mimeTypestring—
captionstring—
isGroupboolean—اختياري: الوجهة مجموعة. يُستنتج تلقائياً من لاحقة @g.us
channelstring—اختياري: اسم القناة أو رقمها التي تخرج منها الرسالة — لازم إذا عند الحساب أكثر من قناة والرقم ما تواصل قبل
curl -X POST https://labeb.app/api/v1/tools/send_whatsapp_media \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…"}'
إرسالPOST /api/v1/tools/send_whatsapp_messageإرسال رسالة واتساب▾

إرسال رسالة نصية إلى رقم أو مجموعة واتساب، أو إلى عميل على قناة أخرى (تلغرام · انستغرام · ماسنجر…) بتمرير address كما أعادته list_whatsapp_conversations (مثل …@tg) فتخرج من قناة محادثته نفسها. للرقم: أرقام فقط مع رمز الدولة بلا + ولا مسافات. وللمجموعة: مرر معرفها الكامل في نفس حقل phone بصيغة أرقام تليها @g.us — والمعرفات تُقرأ بـ list_whatsapp_groups. ويمكن تمرير isGroup صريحاً ومعه يُقبل المعرف كما هو. تصل فعلياً — استخدمها بحذر وبنص نهائي جاهز. وإذا عند الحساب أكثر من قناة مرّر channel باسم القناة، وإلا ترجع لك الأداة أسماء القنوات لتسأل المستخدم.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.send

الوسيطالنوعمطلوبالوصف
phonestringنعمرقم بصيغة دولية بأرقام فقط بلا + ولا مسافات، أو معرف مجموعة كامل بلاحقة @g.us
textstringنعم
isGroupboolean—اختياري: الوجهة مجموعة. يُستنتج تلقائياً من لاحقة @g.us، ويُصرَّح به عند الحاجة
channelstring—اختياري: اسم القناة أو رقمها التي تخرج منها الرسالة — لازم إذا عند الحساب أكثر من قناة والرقم ما تواصل قبل
curl -X POST https://labeb.app/api/v1/tools/send_whatsapp_message \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…","text":"…"}'
إرسالPOST /api/v1/tools/send_whatsapp_templateإرسال قالب واتساب▾

إرسال قالب واتساب معتمد إلى رقم — وهو الطريق الوحيد لفتح محادثة بعد انتهاء نافذة 24 ساعة على القناة الرسمية، لأن الوسائط والنص الحر لا يقبلان خارجها. اقرأ القوالب أولا بـ list_whatsapp_official_templates وخذ منها المعرف وعدد المتغيرات. يخضع لنفس حدود الإرسال.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.send

الوسيطالنوعمطلوبالوصف
phonestringنعم
templateIdstringنعم
paramsstring[]—
channelstring—اختياري: اسم القناة أو رقمها الرسمية التي يخرج منها القالب — لازم إذا عند الحساب أكثر من قناة والرقم ما تواصل قبل
curl -X POST https://labeb.app/api/v1/tools/send_whatsapp_template \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…","templateId":"…"}'
إرسالPOST /api/v1/tools/send_whatsapp_template_bulkإرسال قالب لمجموعة▾

إرسال قالب واتساب معتمد لمجموعة عملاء دفعة واحدة (حتى 25 رقماً): مرر phones قائمة أرقام، أو stage مرحلة البطاقات (interested · trial · engaged · won) فيؤخذ أحدث 25 بلا الخاسرين والمؤجّلين. params قيم المتغيرات، وfirstParamIsCustomerName=true يضع الاسم الأول لكل عميل في المتغير الأول. كل رقم يمر بسياسة ميتا (لا قالب خلال 24 ساعة من سابقه ولا بعد رفض حديث) فيتخطى المحمي ويذكر السبب.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.send

الوسيطالنوعمطلوبالوصف
templateIdstringنعم
phonesstring[]—
stage"interested" | "trial" | "engaged" | "won"—
paramsstring[]—
firstParamIsCustomerNameboolean—
curl -X POST https://labeb.app/api/v1/tools/send_whatsapp_template_bulk \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"templateId":"…"}'
تعديلPOST /api/v1/tools/stop_labeeb_on_conversationإيقاف لَبيب على محادثة▾

إيقاف ردود لَبيب على محادثة عميل بعينه ليتولّاها موظف (يبقى موقوفاً حتى تُرجعها له بـ assign_conversation action=ai).

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.send

الوسيطالنوعمطلوبالوصف
threadKeystringنعممفتاح المحادثة كما يعيده list_whatsapp_conversations (رقم العميل أو «رقمنا:رقم العميل» أو معرّف المجموعة)
curl -X POST https://labeb.app/api/v1/tools/stop_labeeb_on_conversation \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"threadKey":"…"}'
تعديلPOST /api/v1/tools/update_appointment_settingsتعديل إعدادات المواعيد▾

تعديل إعدادات المواعيد: تفعيل/مدة/أقصى أيام/قوالب الرسائل، وstaffMayBookOutsideHours = الموظّف يحجز يدوياً خارج الدوام (لَبيب يبقى ضمنه)، وaiOfferStartHour/aiOfferEndHour = ساعاتٌ أضيق من الدوام يعرض لَبيب مواعيده ضمنها (-1 يلغيها)، وmeetingLateMinutes (0–60) = اعتبر الموظف متأخّراً إذا دخل الاجتماع بعد هذا العدد من الدقائق من موعده.

الصلاحية المطلوبة لموظّف الربط: appointments.settings.manage

الوسيطالنوعمطلوبالوصف
isEnabledboolean—
staffMayBookOutsideHoursboolean—
aiOfferStartHourinteger—
aiOfferEndHourinteger—
durationMinutesinteger—
maxDaysAheadinteger—
askTimeMessagestring—
confirmationTemplatestring—
meetingLateMinutesinteger—
curl -X POST https://labeb.app/api/v1/tools/update_appointment_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"isEnabled":true,"staffMayBookOutsideHours":true}'
تعديلPOST /api/v1/tools/update_appointment_statusتحديث موعد▾

تحديث موعد: status: completed اكتمل · no_show لم يحضر (كلاهما يتطلّب outcomeNote «ماذا حدث») · scheduled مجدول · pending_time بانتظار تحديد الوقت. وassigneeId لتغيير المسؤول (من فريق المواعيد) أو clearAssignee، وnotes لملاحظات الموعد. للإلغاء مع إشعار العميل استعمل cancel_appointment.

الصلاحية المطلوبة لموظّف الربط: appointments.update.own

الوسيطالنوعمطلوبالوصف
appointmentIdstringنعمالموعد من list_appointments (معرّف)
status"completed" | "no_show" | "scheduled" | "pending_time"—الحالة
outcomeNotestring—ماذا حدث في الموعد
assigneeIdstring—المسؤول الجديد (معرّف)
clearAssigneeboolean—إزالة المسؤول
notesstring—ملاحظات الموعد (تستبدل القديمة)
curl -X POST https://labeb.app/api/v1/tools/update_appointment_status \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"appointmentId":"…"}'
تعديلPOST /api/v1/tools/update_whatsapp_routingتغيير توجيه رقم واتساب▾

تغيير توجيه رقم واتساب (instanceId من get_whatsapp_routing): mode = ai لَبيب يردّ · single_agent موظف واحد (singleAgentUserId) · round_robin تناوب (roundRobinUserIds) · none بلا توجيه. handoffUserIds اختياري: فريق التحويل لهذا الرقم.

الصلاحية المطلوبة لموظّف الربط: whatsapp.routing.manage

الوسيطالنوعمطلوبالوصف
instanceIdstringنعم
mode"ai" | "single_agent" | "round_robin" | "none"نعم
singleAgentUserIdstring—
roundRobinUserIdsstring[]—
handoffUserIdsstring[]—
curl -X POST https://labeb.app/api/v1/tools/update_whatsapp_routing \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"instanceId":"…","mode":"ai"}'
تعديلPOST /api/v1/tools/upload_fileرفع ملف▾

رفع ملف مرة واحدة إلى النظام وأخذ معرف قصير له، ثم إرساله لأي عدد من الأرقام بـ send_whatsapp_media ومعه fileId — بلا إعادة الحمولة في كل مرة وبلا خطر حرف فاسد يفسد الملف. مرر base64 لمحتوى الملف أو url لجلبه، مع fileName وmimeType. المعرف صالح سبعة أيام ولا يصلح إلا داخل حسابك.

الصلاحية المطلوبة لموظّف الربط: whatsapp.message.send

الوسيطالنوعمطلوبالوصف
base64string—
urlstring—
fileNamestring—
mimeTypestring—
curl -X POST https://labeb.app/api/v1/tools/upload_file \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"base64":"…","url":"…"}'

ما بعد البيع والتذاكر30

إضافةPOST /api/v1/tools/add_postsale_noteإضافة ملاحظة على عميل▾

إضافة ملاحظة داخلية مؤرّخة على عميل ما بعد البيع (يراها الفريق فقط ولا تصل العميل).

الصلاحية المطلوبة لموظّف الربط: postsale.update.own

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
contentstringنعمنص الملاحظة
curl -X POST https://labeb.app/api/v1/tools/add_postsale_note \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…","content":"…"}'
إضافةPOST /api/v1/tools/add_ticket_messageرسالة على تذكرة▾

إضافة رسالة على تذكرة دعم. internal=true (الافتراضي) ملاحظة داخلية للفريق لا تصل العميل؛ internal=false ردٌّ يُرسَل للعميل على محادثته.

الصلاحية المطلوبة لموظّف الربط: tickets.update.own

الوسيطالنوعمطلوبالوصف
ticketIdstringنعممعرّف التذكرة من get_tickets_report (معرّف)
textstringنعمنص الرسالة
internalboolean—ملاحظة داخلية؟ (الافتراضي نعم)
curl -X POST https://labeb.app/api/v1/tools/add_ticket_message \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"…","text":"…"}'
تعديلPOST /api/v1/tools/assign_ticketإسناد تذكرة▾

إسناد تذكرة لموظف (استخدم list_users للمعرّف).

الصلاحية المطلوبة لموظّف الربط: tickets.update.all

الوسيطالنوعمطلوبالوصف
ticketIdstringنعممعرّف التذكرة أو رقمها أو عنوانها
userIdstringنعممعرّف المستخدم أو اسمه
curl -X POST https://labeb.app/api/v1/tools/assign_ticket \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"…","userId":"…"}'
تعديلPOST /api/v1/tools/convert_ticket_to_cardتحويل تذكرة لبطاقة منتج▾

تحويل تذكرة دعم إلى عمل تقني. mode=card (الافتراضي): بطاقة منتج (cardType: bug خطأ · feature ميزة · improvement تحسين · suggestion اقتراح) ببيانٍ يُسجَّل على التذكرة ويُرسَل للعميل إن sendToCustomer=true، ويُربط العميل طالباً فيصله إشعار الإطلاق. mode=feature_request: طلب ميزة على العميل.

الصلاحية المطلوبة لموظّف الربط: tickets.update.own

الوسيطالنوعمطلوبالوصف
ticketIdstringنعممعرّف التذكرة من get_tickets_report (معرّف)
mode"card" | "feature_request"—نوع التحويل
statementstring—البيان: ماذا سيُعمل
cardType"bug" | "feature" | "improvement" | "suggestion"—نوع البطاقة
sendToCustomerboolean—إرسال البيان للعميل
curl -X POST https://labeb.app/api/v1/tools/convert_ticket_to_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"…"}'
إضافةPOST /api/v1/tools/create_kb_articleإضافة مقال معرفة▾

إضافة مقال جديد لقاعدة المعرفة (يتفهرس فوراً لبوت الدعم).

الصلاحية المطلوبة لموظّف الربط: postsale.kb.create

الوسيطالنوعمطلوبالوصف
titlestringنعم
contentstringنعم
categorystring—
isPublishedboolean—
curl -X POST https://labeb.app/api/v1/tools/create_kb_article \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"…","content":"…"}'
إضافةPOST /api/v1/tools/create_postsale_customerإضافة عميل ما بعد بيع▾

إضافة عميل ما بعد بيع يدوياً (صفقة أُغلقت خارج النظام): الرقم مطلوب، والاسم والمسؤول اختياريان. يرفض رقماً له عميلٌ قائم. لنقل عميل محتمل استعمل promote_lead_to_postsale.

الصلاحية المطلوبة لموظّف الربط: postsale.create

الوسيطالنوعمطلوبالوصف
phonestringنعمالرقم الدولي بلا +
customerNamestring—الاسم
assigneeIdstring—المسؤول (معرّف)
curl -X POST https://labeb.app/api/v1/tools/create_postsale_customer \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…"}'
إضافةPOST /api/v1/tools/create_postsale_dealإضافة صفقة لعميل▾

إضافة صفقة جديدة لعميل عنده بطاقة: اشتراك جديد بباقته ومبلغه، وتنفتح له مجموعة واتساب باسم الاشتراك. التجديد لا يُسجَّل هنا.

الصلاحية المطلوبة لموظّف الربط: postsale.update.own

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
subscriptionNamestring—اسم الاشتراك كما في النظام
recordIdstring—الاشتراك المربوط إن وُجد (معرّف)
packageNamestring—الباقة
amountnumber—المبلغ بالدولار
durationMonthsinteger—المدة بالأشهر
usersCountinteger—عدد المستخدمين
paymentMethod"sham_cash" | "bank_transfer" | "payment_gateway" | "other"—طريقة الدفع
saleType"chat" | "referral" | "office"—نوع البيع
curl -X POST https://labeb.app/api/v1/tools/create_postsale_deal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…"}'
إضافةPOST /api/v1/tools/create_postsale_summaryملخّص جلسة لعميل▾

كتابة ملخّص جلسة/اجتماع لعميل ما بعد البيع (المشكلة والحلّ والمدة، واختيارياً التذكرة)، وإرساله للعميل على واتساب إن sendToWhatsApp=true.

الصلاحية المطلوبة لموظّف الربط: postsale.update.own

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
problemstring—المشكلة
solutionstring—الحلّ
durationMinutesinteger—المدة بالدقائق
ticketIdstring—التذكرة المرتبطة (معرّف)
sendToWhatsAppboolean—إرساله للعميل الآن
curl -X POST https://labeb.app/api/v1/tools/create_postsale_summary \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…"}'
إضافةPOST /api/v1/tools/create_ticketفتح تذكرة▾

فتح تذكرة دعم جديدة (تحسب SLA تلقائياً).

الصلاحية المطلوبة لموظّف الربط: tickets.create

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring—
prioritystring—low|normal|high|critical
assignedToUserIdstring—
curl -X POST https://labeb.app/api/v1/tools/create_ticket \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"…"}'
قراءةPOST /api/v1/tools/get_post_sale_group_settingsإعدادات مجموعات ما بعد البيع▾

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

الصلاحية المطلوبة لموظّف الربط: postsale.read.own

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_post_sale_group_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_postsale_analyticsتحليلات ما بعد البيع▾

تحليلات ما بعد البيع. section: today إحصاء اليوم · queue طابور العمل «الأحوج أولاً» مع عدّادات الطوابير وحِمل كل موظف (queue: waiting ينتظر ردّاً · mine عملائي · silent صامتون · new جدد · tickets تذاكر مفتوحة · noowner بلا مسؤول · all) · velocity سرعة التحويل لكل موظف · success مؤشّرات النجاح وأسبابه وتوزيع الباقات. من لا يملك «كل العملاء» يرى طابور عملائه فقط، ولا يرى velocity وsuccess.

الصلاحية المطلوبة لموظّف الربط: postsale.read.own

الوسيطالنوعمطلوبالوصف
section"today" | "queue" | "velocity" | "success"نعمالقسم
queue"waiting" | "mine" | "silent" | "new" | "tickets" | "noowner" | "all"—الطابور
searchstring—بحث بالاسم أو الرقم
limitinteger—عدد الصفوف (حتى 50)
curl -X POST https://labeb.app/api/v1/tools/get_postsale_analytics \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"section":"today"}'
قراءةPOST /api/v1/tools/get_postsale_customerتفاصيل عميل ما بعد البيع▾

تفاصيل عميل ما بعد البيع (بالهاتف أو الاسم): الحالة وخطوات الإعداد ودرجة الصحة وسبب النجاح وسرعة التحويل + آخر الملاحظات الداخلية + كلّ اشتراكاته في نظامك (subscriptions: الاسم والحالة والباقة والانتهاء وآخر نشاط — الفعّال ثمّ الأقرب انتهاءً).

الصلاحية المطلوبة لموظّف الربط: postsale.read

الوسيطالنوعمطلوبالوصف
phonestring—
namestring—
curl -X POST https://labeb.app/api/v1/tools/get_postsale_customer \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…","name":"…"}'
قراءةPOST /api/v1/tools/get_tickets_reportتقرير التذاكر▾

تقرير تذاكر الدعم. دائماً: byStatus (لقطة كل الحالات) وopenList (أحدث المفتوحة). ومع الفلاتر: tickets — لكل تذكرة الرمز والعميل والموضوع والحالة والموظّف المسؤول ومن أغلقها وتاريخ الإنشاء والإغلاق ونوع الإغلاق (problem_solved حلّ مشكلة · inquiry_answered ردّ على استفسار · converted_to_card تحويل لبطاقة تقنية مع رقمها · cancelled إلغاء · null غير محدّد) وهل تجاوزت SLA؛ وsummary — المغلقة لكل موظّف موزّعة حسب نوع الإغلاق. الفترة fromDate/toDate (YYYY-MM-DD بتوقيت الحساب، شاملة) أو period، وتُطبَّق على تاريخ الإغلاق افتراضياً (dateField=created لتاريخ الإنشاء). employee اسم الموظّف أو معرّف المستخدم، وemployeeRole: closedBy | assignedTo | any (الافتراضي any). القائمة مقسّمة صفحات: page (من 1) وlimit (الافتراضي 50، الأقصى 100)، والملخّص محسوب على كل المطابق لا على الصفحة.

الصلاحية المطلوبة لموظّف الربط: tickets.view.all

الوسيطالنوعمطلوبالوصف
periodstring—today|yesterday|last24h|last7d|last30d|all
fromDatestring—YYYY-MM-DD بتوقيت حساب المستأجر
toDatestring—YYYY-MM-DD شاملاً
dateField"closed" | "created"—
employeestring—اسم الموظّف (أو جزء منه) أو معرّف المستخدم
employeeRole"closedBy" | "assignedTo" | "any"—
statusstring—حالة أو أكثر مفصولة بفواصل: new,in_progress,resolved,converted,cancelled — أو open (المفتوحة) أو closed (المغلقة بأنواعها)
closureType"problem_solved" | "inquiry_answered" | "converted_to_card" | "cancelled" | "unspecified"—
slaBreachedboolean—
pageinteger—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_tickets_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"period":"…","fromDate":"…"}'
قراءةPOST /api/v1/tools/list_kb_articlesقائمة المقالات▾

قائمة مقالات قاعدة المعرفة (منشورة ومسودات) مع التصنيف وimagesCount. includeContent=true يعيد نصّ كل مقال كاملاً وصوره: لكل صورة imageId وurl وcaption (الوصف) وsortOrder (الترتيب) وsendCondition (شرط الإرسال: always دائماً · on_steps فقط حين يطلب العميل خطوات أو شرحاً · never مرجع داخلي لا يُرسل) — اطلبه قبل تعديل مقال أو صوره.

الصلاحية المطلوبة لموظّف الربط: postsale.read

الوسيطالنوعمطلوبالوصف
searchstring—
limitinteger—
includeContentboolean—
curl -X POST https://labeb.app/api/v1/tools/list_kb_articles \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"search":"…","limit":10}'
قراءةPOST /api/v1/tools/list_knowledge_gapsعرض فجوات المعرفة▾

فجوات المعرفة: الأسئلة التي لم يعرف لَبيب جوابها، وكم تكرّرت، وما ردّ به، وهل عُلّم. status: pending ينتظر (الافتراضي) · answered عُلّم · ignored أُهمل. phase: pre قبل البيع · post بعد البيع. للتعليم أضِف الجواب بمقالٍ عبر create_kb_article.

الصلاحية المطلوبة لموظّف الربط: postsale.kb.view

الوسيطالنوعمطلوبالوصف
status"pending" | "answered" | "ignored"—
phase"pre" | "post"—
searchstring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_knowledge_gaps \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"pending","phase":"pre"}'
قراءةPOST /api/v1/tools/list_postsale_customersعملاء ما بعد البيع▾

عملاء ما بعد البيع: التوزيع على الحالات + قائمة بالاسم والهاتف ودرجة الصحة والفئة والمسؤول.

الصلاحية المطلوبة لموظّف الربط: postsale.read

الوسيطالنوعمطلوبالوصف
statusstring—pending|active|churned… (اختياري)
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_postsale_customers \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"…","limit":10}'
قراءةPOST /api/v1/tools/list_postsale_dealsصفقات عميل ما بعد البيع▾

صفقات العميل الإضافية بمجموعاتها واعتمادها، أو كل الصفقات بانتظار الاعتماد إذا ما مرّرت customerId.

الصلاحية المطلوبة لموظّف الربط: postsale.read.own

الوسيطالنوعمطلوبالوصف
customerIdstring—معرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
curl -X POST https://labeb.app/api/v1/tools/list_postsale_deals \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…"}'
قراءةPOST /api/v1/tools/list_postsale_promisesعرض وعود العميل▾

وعود الفريق لعميل ما بعد البيع: ما وُعد به، وموعده، وهل أُنجز، ومصدره (manual يدوي · lead_journey من رحلة البيع · ai_detected_pending اقتراحٌ من المحادثة ينتظر التأكيد).

الصلاحية المطلوبة لموظّف الربط: postsale.read.own

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
curl -X POST https://labeb.app/api/v1/tools/list_postsale_promises \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…"}'
قراءةPOST /api/v1/tools/list_ticket_messagesعرض تذكرة ورسائلها▾

تذكرة دعم واحدة كاملة: العميل، العنوان، الحالة، الأولوية، المسؤول، مهلة الخدمة، الحلّ، ورسائلها (ردود العميل والفريق والملاحظات الداخلية) الأحدث آخراً.

الصلاحية المطلوبة لموظّف الربط: tickets.view.own

الوسيطالنوعمطلوبالوصف
ticketIdstringنعممعرّف التذكرة من get_tickets_report (معرّف)
limitinteger—عدد الرسائل الأخيرة (حتى 50)
curl -X POST https://labeb.app/api/v1/tools/list_ticket_messages \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"…"}'
تعديلPOST /api/v1/tools/manage_postsale_promisesإدارة وعود العميل▾

إدارة وعود العميل. action: add تسجيل وعد جديد (customerId + text + dueDate اختياري) · fulfill تعليمه منجزاً · unfulfill إلغاء الإنجاز · confirm تأكيد اقتراحٍ التقطه الذكاء · reject رفض الاقتراح · delete حذف وعدٍ خاطئ (promiseId من list_postsale_promises).

الصلاحية المطلوبة لموظّف الربط: postsale.update.own

الوسيطالنوعمطلوبالوصف
action"add" | "fulfill" | "unfulfill" | "confirm" | "reject" | "delete"نعمالإجراء
customerIdstring—معرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
promiseIdstring—الوعد (معرّف)
textstring—نص الوعد
dueDatestring—الموعد yyyy-MM-dd
curl -X POST https://labeb.app/api/v1/tools/manage_postsale_promises \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"add"}'
تعديلPOST /api/v1/tools/promote_lead_to_postsaleنقل عميل لما بعد البيع▾

نقل عميل محتمل إلى ما بعد البيع: يُنشئ له بطاقة عميل ما بعد البيع (أو يعيد القائمة إن وُجدت على رقمه) ويجدول خطوات التهيئة. إعلان الربح نفسه بباقته ومبلغه وإيصاله يتمّ من شاشة البطاقة ويُعتمد عبر decide_won.

الصلاحية المطلوبة لموظّف الربط: postsale.create

الوسيطالنوعمطلوبالوصف
leadIdstringنعممعرّف بطاقة العميل من list_leads أو get_lead_details (معرّف)
curl -X POST https://labeb.app/api/v1/tools/promote_lead_to_postsale \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leadId":"…"}'
تعديلPOST /api/v1/tools/resolve_knowledge_gapإغلاق فجوة معرفة▾

إغلاق فجوة معرفة (سؤال لم يعرف لَبيب جوابه — معرّفها من list_knowledge_gaps). action=answer: اكتب الجواب، ومع addToKb=true (الافتراضي) يُضاف لقاعدة المعرفة مقالاً جديداً (articleTitle/category اختياريّان) أو يُلحق بمقال قائم (targetArticleId). sendToCustomer=true يرسل الجواب للعميل صاحب السؤال (معطّل افتراضياً). action=ignore: ليست فجوة، مع السبب reason: chitchat دردشة · out_of_scope خارج النطاق · personal شخصي · duplicate مكرّر.

الصلاحية المطلوبة لموظّف الربط: postsale.kb.create

الوسيطالنوعمطلوبالوصف
idstringنعم
action"answer" | "ignore"نعم
answerstring—
addToKbboolean—
articleTitlestring—
categorystring—
targetArticleIdstring—
sendToCustomerboolean—
reason"chitchat" | "out_of_scope" | "personal" | "duplicate"—
curl -X POST https://labeb.app/api/v1/tools/resolve_knowledge_gap \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…","action":"answer"}'
تعديلPOST /api/v1/tools/retry_post_sale_group_setupإعادة محاولة إعداد مجموعة العميل▾

إعادة محاولة الأجزاء غير المكتملة من إعداد مجموعة عميل ما بعد البيع: إضافة الأشخاص أو ترقيتهم أو حفظ وصف الخدمة. لمجموعة قائمة لديها سجل تهيئة فقط؛ لا ينشئ مجموعة ولا يعيد الترحيب أو ملخص الرحلة.

الصلاحية المطلوبة لموظّف الربط: postsale.update.own

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
curl -X POST https://labeb.app/api/v1/tools/retry_post_sale_group_setup \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"…"}'
تعديلPOST /api/v1/tools/retry_postsale_deal_groupإعادة إعداد مجموعة الصفقة▾

إعادة محاولة إنشاء مجموعة الصفقة أو إكمال إعدادها.

الصلاحية المطلوبة لموظّف الربط: postsale.update.own

الوسيطالنوعمطلوبالوصف
dealIdstringنعممعرّف الصفقة من list_postsale_deals (معرّف)
curl -X POST https://labeb.app/api/v1/tools/retry_postsale_deal_group \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"dealId":"…"}'
قراءةPOST /api/v1/tools/search_knowledge_baseبحث قاعدة المعرفة▾

بحث دلالي في قاعدة المعرفة — نفس البحث الذي يستخدمه بوت الدعم. لكل نتيجة hasImages وimagesCount: هل للمقال صور يرسلها لَبيب وكم صورة (تفاصيلها بـ list_kb_articles مع includeContent).

الصلاحية المطلوبة لموظّف الربط: postsale.read

الوسيطالنوعمطلوبالوصف
querystringنعم
topKinteger—
curl -X POST https://labeb.app/api/v1/tools/search_knowledge_base \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"query":"…"}'
تعديلPOST /api/v1/tools/update_kb_articleتعديل مقال معرفة▾

تعديل مقال معرفة قائم (عنوان/محتوى/تصنيف/نشر) وصوره. لتعديل جزءٍ من المحتوى مرّر edits (find/replace) أو append بدل content الكامل؛ اقرأ النصّ أولاً بـ list_kb_articles مع includeContent. صور المقال (التي يرسلها لَبيب للعملاء) عبر media: action=add بـ url أو base64 (صورة JPG/PNG/WebP/GIF حتى 5 ميغابايت، تُحفظ برابط دائم) مع caption وsortOrder وsendCondition اختيارياً · action=update بـ imageId لتغيير caption أو sortOrder أو sendCondition · action=delete بـ imageId. sendCondition: always دائماً · on_steps فقط حين يطلب العميل خطوات أو شرحاً (الافتراضي) · never مرجع داخلي لا يُرسل. أيّ تعديلٍ فاشل ⇒ لا يُحفظ شيء.

الصلاحية المطلوبة لموظّف الربط: postsale.kb.update.all

الوسيطالنوعمطلوبالوصف
articleIdstringنعممعرّف المقال أو عنوانه
titlestring—
contentstring—
editsobject[]—تعديلات جزئية: كل عنصر find مقطع منسوخ حرفيا من النص الحالي يظهر فيه مرة واحدة، وreplace بديله (فارغ = حذف)
appendstring—نص يضاف في آخر النص الحالي
categorystring—
isPublishedboolean—
mediaobject[]—عمليات على صور المقال
curl -X POST https://labeb.app/api/v1/tools/update_kb_article \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"articleId":"…"}'
تعديلPOST /api/v1/tools/update_post_sale_group_settingsتعديل إعدادات مجموعات ما بعد البيع▾

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

الصلاحية المطلوبة لموظّف الربط: postsale.settings.manage

الوسيطالنوعمطلوبالوصف
createGroupOnWinboolean—إنشاء مجموعة عند نجاح العميل
groupDescriptionEnabledboolean—إضافة وصف الخدمة
groupDescriptionstring—نص وصف الخدمة
curl -X POST https://labeb.app/api/v1/tools/update_post_sale_group_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"createGroupOnWin":true,"groupDescriptionEnabled":true}'
تعديلPOST /api/v1/tools/update_postsale_customerتحديث عميل ما بعد البيع▾

تحديث عميل ما بعد البيع. action: update تعديل الحقول (الاسم، الرقم، المسؤول assigneeId أو clearAssignee، الحالة status: pending تهيئة · active نشط · churned مغادر مع reason، ملاحظات، الباقة، قيمة الاشتراك ودورته) · complete_step إكمال خطوة تهيئة (step: payment الدفع · subscription تمديد الاشتراك · plan اختيار الخطة) · set_responder مَن يردّ عليه (responder: ai لَبيب أو معرّف موظف — يُسند العميل والمحادثة معاً) · first_action تعليم إجراء من قائمة الأسبوع الأول (actionId + completed).

الصلاحية المطلوبة لموظّف الربط: postsale.update.own

الوسيطالنوعمطلوبالوصف
customerIdstring—معرّف عميل ما بعد البيع من list_postsale_customers (معرّف)
action"update" | "complete_step" | "set_responder" | "first_action"نعمنوع التحديث
customerNamestring—الاسم
phonestring—الرقم
assigneeIdstring—المسؤول الجديد (معرّف)
clearAssigneeboolean—إزالة المسؤول
status"pending" | "active" | "churned"—الحالة
reasonstring—سبب تغيير الحالة
aiMode"inherit" | "ai" | "human"—ردّ لَبيب على هذا العميل
notesstring—ملاحظات البطاقة
packageNamestring—الباقة
subscriptionAmountnumber—قيمة الاشتراك (0 = مسح)
subscriptionCyclestring—دورة الاشتراك مثل monthly · yearly
step"payment" | "subscription" | "plan"—خطوة التهيئة
responderstring—ai أو معرّف موظف
actionIdstring—إجراء الأسبوع الأول (معرّف)
completedboolean—تمّ الإجراء؟
curl -X POST https://labeb.app/api/v1/tools/update_postsale_customer \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"update"}'
تعديلPOST /api/v1/tools/update_ticketتعديل تذكرة▾

تعديل تذكرة دعم قائمة: العنوان، الوصف، التصنيف (categoryId)، الأولوية (low منخفضة · normal عادية · high عالية · critical حرجة). للحالة update_ticket_status وللمسؤول assign_ticket.

الصلاحية المطلوبة لموظّف الربط: tickets.update.own

الوسيطالنوعمطلوبالوصف
ticketIdstringنعممعرّف التذكرة من get_tickets_report (معرّف)
titlestring—العنوان
descriptionstring—الوصف
categoryIdstring—التصنيف (معرّف)
priority"low" | "normal" | "high" | "critical"—الأولوية
curl -X POST https://labeb.app/api/v1/tools/update_ticket \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"…"}'
تعديلPOST /api/v1/tools/update_ticket_statusتغيير حالة تذكرة▾

تغيير حالة تذكرة: in_progress | waiting_customer | testing | resolved | cancelled. مع resolved مرّر closureType: problem_solved (حُلّت مشكلة) أو inquiry_answered (ردّ على استفسار).

الصلاحية المطلوبة لموظّف الربط: tickets.update.all

الوسيطالنوعمطلوبالوصف
ticketIdstringنعم
statusstringنعم
resolutionTextstring—
closureType"problem_solved" | "inquiry_answered"—
curl -X POST https://labeb.app/api/v1/tools/update_ticket_status \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"…","status":"…"}'

المهامّ13

إضافةPOST /api/v1/tools/add_task_commentتعليق على مهمة▾

إضافة تعليق على مهمة (توجيه أو استفسار) — يُشعَر المُسنَد إليه ومن تذكرهم في mentionUserIds (معرّفات من list_users). replyToId للردّ على تعليقٍ بعينه.

الصلاحية المطلوبة لموظّف الربط: tasks.task.update.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة (من list_tasks)
contentstringنعم
mentionUserIdsstring[]—
replyToIdstring—
curl -X POST https://labeb.app/api/v1/tools/add_task_comment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…","content":"…"}'
إضافةPOST /api/v1/tools/create_taskإنشاء مهمة▾

إنشاء مهمة جديدة. استخدم list_users للحصول على assignedToUserId عند الإسناد.

الصلاحية المطلوبة لموظّف الربط: tasks.task.create

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring—
assignedToUserIdstring—
prioritystring—low|normal|high|urgent
dueDatestring—ISO date
projectIdstring—
monthlyGoalIdstring—
curl -X POST https://labeb.app/api/v1/tools/create_task \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"…"}'
حذفPOST /api/v1/tools/delete_taskحذف مهمة▾

حذف مهمة (حذف ناعم).

الصلاحية المطلوبة لموظّف الربط: tasks.task.delete.all

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة أو عنوانها
reasonstring—سبب الحذف كما قاله المستخدم
curl -X POST https://labeb.app/api/v1/tools/delete_task \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…"}'
قراءةPOST /api/v1/tools/get_performance_metricsمؤشرات الأداء▾

مؤشرات أداء الفريق لشهر: المهام المُسندة والمنجزة في وقتها والمتأخرة والمرفوضة ومتوسط زمن الإنجاز، باسم كل موظف.

الصلاحية المطلوبة لموظّف الربط: tasks.task.read.all

الوسيطالنوعمطلوبالوصف
yearinteger—
monthinteger—
curl -X POST https://labeb.app/api/v1/tools/get_performance_metrics \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"year":10,"month":10}'
قراءةPOST /api/v1/tools/get_task_detailsعرض تفاصيل مهمة▾

مهمة واحدة كاملة: الوصف ومعايير القبول والحالة والتقدّم والمُسنَد إليه والاستحقاق، مع نقاشها (التعليقات، الأحدث آخراً) وسجلّ أحداثها (من غيّر ماذا ومتى). يجيب «لماذا تأخّرت المهمة؟». من لا يملك «الكل» يرى مهامّه فقط.

الصلاحية المطلوبة لموظّف الربط: tasks.task.read.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة (من list_tasks)
curl -X POST https://labeb.app/api/v1/tools/get_task_details \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…"}'
قراءةPOST /api/v1/tools/get_task_time_entriesعرض وقت مهمة▾

سجلّ الوقت المسجَّل على مهمة: كل جلسة عمل ببدايتها ونهايتها ومدّتها بالدقائق وصاحبها وملاحظتها، ومجموع الدقائق.

الصلاحية المطلوبة لموظّف الربط: tasks.task.read.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة (من list_tasks)
curl -X POST https://labeb.app/api/v1/tools/get_task_time_entries \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…"}'
قراءةPOST /api/v1/tools/list_task_dependenciesاعتماديات المهام▾

روابط اعتماد المهام (من يحجب من) — لكشف سلاسل التعطيل.

الصلاحية المطلوبة لموظّف الربط: tasks.task.read.own

الوسيطالنوعمطلوبالوصف
taskIdstring—معرّف المهمة أو عنوانها
curl -X POST https://labeb.app/api/v1/tools/list_task_dependencies \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…"}'
قراءةPOST /api/v1/tools/list_tasksقراءة المهام▾

قائمة المهام مع فلاتر اختيارية. إن لم تملك صلاحية قراءة الكل تُعاد مهامك فقط.

الصلاحية المطلوبة لموظّف الربط: tasks.task.read.own

الوسيطالنوعمطلوبالوصف
statusstring—open|in_progress|submitted|approved|rejected|cancelled|draft
onlyMineboolean—
projectIdstring—
monthlyGoalIdstring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_tasks \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"…","onlyMine":true}'
تعديلPOST /api/v1/tools/set_task_dependencyاعتمادية مهمة▾

ربط مهمة بأخرى تنتظرها (add) أو فكّ الربط (remove): المهمة taskId لا تبدأ قبل أن تنتهي blockedByTaskId. لعرض الاعتماديات القائمة: list_task_dependencies.

الصلاحية المطلوبة لموظّف الربط: tasks.task.update.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة (من list_tasks)
blockedByTaskIdstringنعم
action"add" | "remove"نعم
curl -X POST https://labeb.app/api/v1/tools/set_task_dependency \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…","blockedByTaskId":"…","action":"add"}'
تعديلPOST /api/v1/tools/set_task_statusتغيير حالة مهمة▾

نقل مهمة إلى حالة: open | in_progress | submitted | approved | rejected | cancelled.

الصلاحية المطلوبة لموظّف الربط: tasks.task.update.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة أو عنوانها
statusstringنعم
reasonstring—سبب النقل كما قاله المستخدم (مهمّ عند الإلغاء)
curl -X POST https://labeb.app/api/v1/tools/set_task_status \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…","status":"…"}'
تعديلPOST /api/v1/tools/task_timerعدّاد وقت مهمة▾

تشغيل عدّاد الوقت على مهمة (start) أو إيقافه (stop) للمستخدم نفسه، مع ملاحظة اختيارية.

الصلاحية المطلوبة لموظّف الربط: tasks.task.update.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة (من list_tasks)
action"start" | "stop"نعم
notestring—
curl -X POST https://labeb.app/api/v1/tools/task_timer \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…","action":"start"}'
تعديلPOST /api/v1/tools/update_taskتعديل مهمة▾

تعديل مهمة قائمة (العنوان/الوصف/الأولوية/الاستحقاق/الإسناد/الروابط).

الصلاحية المطلوبة لموظّف الربط: tasks.task.update.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة أو عنوانها
titlestring—
descriptionstring—
prioritystring—
dueDatestring—
assignedToUserIdstring—
projectIdstring—
monthlyGoalIdstring—
curl -X POST https://labeb.app/api/v1/tools/update_task \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…"}'
تعديلPOST /api/v1/tools/update_task_progressتحديث تقدّم مهمة▾

تحديث نسبة إنجاز مهمة من 0 إلى 100.

الصلاحية المطلوبة لموظّف الربط: tasks.task.update.own

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة (من list_tasks)
progressintegerنعم
curl -X POST https://labeb.app/api/v1/tools/update_task_progress \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"…","progress":10}'

المنتج28

قراءةPOST /api/v1/tools/get_product_cardتفاصيل بطاقة تقنية▾

تفاصيل بطاقة تقنية بمفتاحها (key مثل WKD-59) أو عنوانها: الوصف والحالة والأولوية والنظام وعدد الطالبين + **كل** ملاحظات الفريق بكاتبها وتاريخها وإشاراتها (@) وروابط مرفقاتها + البطاقة الأمّ (إن كانت فرعية) + البطاقات الفرعية. العنوانُ يطابق تامّاً أولاً؛ وإن طابقت أكثر من بطاقة تعود القائمةُ (ambiguous) لتعيد النداء بالمفتاح.

الصلاحية المطلوبة لموظّف الربط: product.cards.view

الوسيطالنوعمطلوبالوصف
keystring—مفتاح البطاقة WKD-59 أو رقمها أو معرّفها — الأدقّ
titlestring—عنوان البطاقة — مطابقةٌ تامّة أولاً ثم احتواء
curl -X POST https://labeb.app/api/v1/tools/get_product_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"key":"…","title":"…"}'
قراءةPOST /api/v1/tools/get_product_reportتقرير إدارة المنتج▾

تقرير إدارة المنتج: توزّع البطاقات على الحالات والأولويّات والأنواع، وأقدمُ البطاقات العالقة، وحِمل كلّ مسؤول، وحال الإصدارات.

الصلاحية المطلوبة لموظّف الربط: product.cards.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_product_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_product_card_triggersمحفّزات البطاقات▾

محفّزات البطاقات التقنية: رسالة تُرسل عند تحوّل حالة البطاقة أو عند إطلاق إصدار.

الصلاحية المطلوبة لموظّف الربط: product.cards.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_product_card_triggers \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_product_cardsبطاقات المنتج▾

بطاقات المنتج (ميزات/أخطاء) مع الحالة والأولوية وعدد الطالبين — لتحليل أولويات التطوير.

الصلاحية المطلوبة لموظّف الربط: product.cards.view

الوسيطالنوعمطلوبالوصف
statusstring—
cardTypestring—feature|bug|improvement
keystring—مفتاح البطاقة مثل WKD-59
limitinteger—
offsetinteger—للصفحة التالية مرّر nextOffset من الردّ السابق
curl -X POST https://labeb.app/api/v1/tools/list_product_cards \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"…","cardType":"…"}'
قراءةPOST /api/v1/tools/list_release_cardsبطاقات الإصدار▾

بطاقات إصدار منتجٍ واحد، لكلٍّ عمودُها على اللوحة، مع قصٍّ مُعلَن (totalRows/shownRows).

الصلاحية المطلوبة لموظّف الربط: product.cards.view

الوسيطالنوعمطلوبالوصف
releaseIdstringنعممعرّف إصدار المنتج أو نسخته أو عنوانه
statusstring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_release_cards \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"releaseId":"…"}'
قراءةPOST /api/v1/tools/list_releasesالإصدارات▾

آخر إصدارات النظام (ما الجديد) وبنودها.

الصلاحية المطلوبة لموظّف الربط: product.releases.view

الوسيطالنوعمطلوبالوصف
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_releases \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"limit":10}'
تعديلPOST /api/v1/tools/manage_product_releaseإدارة إصدار▾

إدارة إصدارات المنتج. action: create إنشاء (version + title، وdescription وplannedDate yyyy-MM-dd اختياريان) · update تعديل بياناته (releaseId) · set_status تغيير الحالة (status: planning تخطيط · in_progress قيد العمل · testing اختبار · released أُطلق — الإطلاق الكامل برسائل العملاء يتمّ من شاشة الإصدار بعد preview_release_launch).

الصلاحية المطلوبة لموظّف الربط: product.releases.update

الوسيطالنوعمطلوبالوصف
action"create" | "update" | "set_status"نعمالإجراء
releaseIdstring—معرّف الإصدار من list_releases (معرّف)
versionstring—رقم الإصدار مثل 2.4
titlestring—العنوان
descriptionstring—الوصف
plannedDatestring—التاريخ المخطّط yyyy-MM-dd
status"planning" | "in_progress" | "testing" | "released"—الحالة
curl -X POST https://labeb.app/api/v1/tools/manage_product_release \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"create"}'
تعديلPOST /api/v1/tools/pm_add_child_cardإضافة بطاقة فرعية▾

إضافة بطاقة فرعية تحت بطاقة أمّ — نفس نافذة «أضف بطاقة فرعية» في الشاشة. إلزامي: parentCardId (الأمّ) · title · assignedTo (المسؤول). اختياري: role · description · firstNote. role: study|backend|frontend|design|qa|other (الافتراضي other). الفرعية ترث من الأمّ النوع والأولوية والنظام والإصدار، وتبدأ «مقبولة» — أو «قيد العمل» إن كانت الأمّ على لوحة المطوّرين. firstNote تُسجَّل ملاحظةً داخلية أولى على الفرعية. البطاقة الفرعية لا تُفرَّع.

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
parentCardIdstringنعممعرّف البطاقة الأمّ أو عنوانها
titlestringنعم
assignedTostringنعممعرّف المسؤول أو اسمه
rolestring—study|backend|frontend|design|qa|other
descriptionstring—
firstNotestring—ملاحظة داخلية أولى (اختياري)
curl -X POST https://labeb.app/api/v1/tools/pm_add_child_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"parentCardId":"…","title":"…","assignedTo":"…"}'
تعديلPOST /api/v1/tools/pm_add_commentتعليق على بطاقة▾

تعليق داخلي على بطاقة منتج (نقاش الفريق — لا يصل العميل).

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
textstringنعم
curl -X POST https://labeb.app/api/v1/tools/pm_add_comment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…","text":"…"}'
تعديلPOST /api/v1/tools/pm_assign_cardإسناد بطاقة منتج▾

إسناد بطاقة منتج لعضو فريق (أو إلغاء الإسناد بترك userId فارغاً). يُشعر المُسنَد إليه.

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
userIdstring—معرّف المستخدم أو اسمه — اتركه فارغاً لإلغاء الإسناد
reasonstring—سبب الإسناد (اختياري — يُحفظ في سجلّ البطاقة)
curl -X POST https://labeb.app/api/v1/tools/pm_assign_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…"}'
تعديلPOST /api/v1/tools/pm_assign_to_releaseضمّ بطاقة لإصدار▾

ضمّ بطاقة منتج إلى إصدار.

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
releaseIdstringنعممعرّف الإصدار أو رقمه
reasonstring—سبب الضمّ (اختياري — يُحفظ في سجلّ البطاقة)
curl -X POST https://labeb.app/api/v1/tools/pm_assign_to_release \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…","releaseId":"…"}'
إضافةPOST /api/v1/tools/pm_create_cardإنشاء بطاقة منتج▾

إنشاء بطاقة منتج (ميزة/خطأ/تحسين/اقتراح) بمصدر داخلي. استخدمها حين يطلب المستخدم تسجيل طلب تطوير أو خطأ. cardType: bug|feature|improvement|suggestion · priority: low|normal|high|critical.

الصلاحية المطلوبة لموظّف الربط: product.cards.create

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring—
cardTypestringنعمbug|feature|improvement|suggestion
prioritystring—low|normal|high|critical
systemstring—اسم النظام (اختياري)
curl -X POST https://labeb.app/api/v1/tools/pm_create_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"…","cardType":"…"}'
تعديلPOST /api/v1/tools/pm_delete_cardحذف بطاقة منتج▾

حذف بطاقة منتج. **حذف ناعم**: تختفي من القوائم ويبقى أثرها وسجلّها للتدقيق، ولا تُفقد أوقاتُها المسجَّلة.

الصلاحية المطلوبة لموظّف الربط: product.cards.delete.all

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
curl -X POST https://labeb.app/api/v1/tools/pm_delete_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…"}'
قراءةPOST /api/v1/tools/pm_list_time_entriesسجلّ أوقات العمل▾

سجلّ أوقات العمل على البطاقات بين تاريخين: الموظف والبطاقة والإصدار ونوع العمل والبداية والنهاية والمدة والملاحظة ومصدر الإدخال (يدويّ/مُعدَّل/أُغلق آلياً). from/to بصيغة ISO (اليوم كاملاً). employeeId/releaseId/categoryId فلاترٌ اختيارية.

الصلاحية المطلوبة لموظّف الربط: product.time.report.team

الوسيطالنوعمطلوبالوصف
fromstring—ISO date
tostring—ISO date
employeeIdstring—معرّف الموظف أو اسمه
releaseIdstring—معرّف الإصدار أو رقمه
categoryIdstring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/pm_list_time_entries \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"from":"…","to":"…"}'
تعديلPOST /api/v1/tools/pm_manage_requestersطالبو بطاقة منتج▾

طالبو بطاقة المنتج (من يصله إشعار إطلاقها). action: add ربط طالب (sourceType: customer عميل ما بعد البيع customerId · lead عميل محتمل leadId · internal موظف userId) · remove إزالة طالب (requesterId من get_product_card) · set_source تعديل صاحب البطاقة الأصلي (sourceType + المرجع).

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة من list_product_cards (معرّف)
action"add" | "remove" | "set_source"نعمالإجراء
sourceType"customer" | "lead" | "internal"—نوع الطالب
customerIdstring—عميل ما بعد البيع (معرّف)
leadIdstring—العميل المحتمل (معرّف)
userIdstring—الموظف (معرّف)
requesterIdstring—صفّ الطالب للإزالة (معرّف)
curl -X POST https://labeb.app/api/v1/tools/pm_manage_requesters \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…","action":"add"}'
تعديلPOST /api/v1/tools/pm_manage_time_entryسجلّ وقت على بطاقة▾

سجلّات الوقت على بطاقات المنتج. action: add إضافة وقت يدوي (cardId + minutes، وnote وworkDate yyyy-MM-dd وstartTime HH:mm اختيارية) · edit تصحيح سجلّ (logId + minutes) · delete حذفه (logId). تعديل/حذف سجلّات غيرك يحتاج صلاحية «الكل». السجلّات من pm_list_time_entries.

الصلاحية المطلوبة لموظّف الربط: product.time.create

الوسيطالنوعمطلوبالوصف
action"add" | "edit" | "delete"نعمالإجراء
cardIdstring—معرّف البطاقة من list_product_cards (معرّف)
logIdstring—سجلّ الوقت (معرّف)
minutesinteger—الدقائق
notestring—ملاحظة
categoryIdstring—تصنيف الوقت (معرّف)
workDatestring—يوم العمل yyyy-MM-dd
startTimestring—وقت البدء HH:mm
curl -X POST https://labeb.app/api/v1/tools/pm_manage_time_entry \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"add"}'
تعديلPOST /api/v1/tools/pm_merge_duplicateدمج بطاقة مكرّرة▾

دمج بطاقة منتج مكرّرة في الأصلية: تُعلَّم المكرّرة duplicate ويُنقل طالبوها إلى الأصلية فيصلهم إشعار إطلاقها.

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعمالبطاقة المكرّرة (معرّف)
duplicateOfIdstringنعمالبطاقة الأصلية (معرّف)
curl -X POST https://labeb.app/api/v1/tools/pm_merge_duplicate \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…","duplicateOfId":"…"}'
تعديلPOST /api/v1/tools/pm_move_dev_stateنقل بطاقة بين أعمدة المطوّرين▾

نقل بطاقة تقنية بين **أعمدة لوحة المطوّرين** بأسماء أعمدة الحساب نفسِها (مثل: لم تبدأ · قيد العمل · مراجعة ودمج · اختبار الجودة · تمت). استخدمها حين يطلب المستخدم نقل البطاقة إلى عمودٍ في لوحة التطوير. تحترم النقلات المسموحة، وتنقل الحالة العامّة تلقائياً (قيد التطوير، أو اختبار عند العمود الأخير).

الصلاحية المطلوبة لموظّف الربط: product.cards.devstate

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
statestringنعماسم العمود كما يظهر في اللوحة
reasonstring—سبب النقل (اختياري — يُحفظ في سجلّ البطاقة)
curl -X POST https://labeb.app/api/v1/tools/pm_move_dev_state \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…","state":"…"}'
تعديلPOST /api/v1/tools/pm_remove_from_releaseإخراج بطاقة من إصدار▾

إخراج بطاقة من إصدارها. تعود البطاقة إلى مرحلتها قبل الضمّ (أو «مقبولة» إن لم يُعرف).

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
curl -X POST https://labeb.app/api/v1/tools/pm_remove_from_release \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…"}'
تعديلPOST /api/v1/tools/pm_send_card_messageرسالة من بطاقة منتج▾

رسالة من داخل بطاقة منتج: internal=true (الافتراضي) ملاحظة للفريق؛ internal=false تُرسَل للعملاء الطالبين للبطاقة على واتساب.

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة من list_product_cards (معرّف)
contentstringنعمنص الرسالة
internalboolean—داخلية؟ (الافتراضي نعم)
curl -X POST https://labeb.app/api/v1/tools/pm_send_card_message \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…","content":"…"}'
تعديلPOST /api/v1/tools/pm_start_timerبدء عدّاد بطاقة▾

بدء عدّاد الوقت على بطاقة منتج للمستخدم الحالي. إن كان له عدّاد شغّال على بطاقة أخرى **لا يُشغَّل شيء** وتعود started=false مع بيانات العدّاد الشغّال: اسأل المستخدم هل يلغي، أو يوقف الحالي ويشغّل الجديد (أعد النداء بـ stopRunning=true و note لما أُنجز).

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
stopRunningboolean—true فقط بعد موافقة المستخدم على إيقاف عدّاده الشغّال
notestring—ما أُنجز في العدّاد الذي سيُوقف (اختياري)
curl -X POST https://labeb.app/api/v1/tools/pm_start_timer \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…"}'
تعديلPOST /api/v1/tools/pm_stop_timerإيقاف عدّاد بطاقة▾

إيقاف عدّاد وقت المستخدم الحالي أياً كانت بطاقته، مع بيان ما أُنجز (اختياري).

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
notestring—بيان ما أُنجز
curl -X POST https://labeb.app/api/v1/tools/pm_stop_timer \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"note":"…"}'
قراءةPOST /api/v1/tools/pm_time_summaryتجميع أوقات العمل▾

تجميعُ أوقات العمل بين تاريخين: إجماليٌّ عامّ + حسب الإصدار + حسب الموظف. يُحسب على **كلّ** صفوف الفترة بلا قصّ. يميّز الدقائقَ المُدخلة يدوياً (تقديرٌ لا قياس).

الصلاحية المطلوبة لموظّف الربط: product.time.report.team

الوسيطالنوعمطلوبالوصف
fromstring—ISO date
tostring—ISO date
employeeIdstring—معرّف الموظف أو اسمه
releaseIdstring—معرّف الإصدار أو رقمه
categoryIdstring—
curl -X POST https://labeb.app/api/v1/tools/pm_time_summary \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"from":"…","to":"…"}'
قراءةPOST /api/v1/tools/pm_time_vs_attendanceالوقت مقابل الحضور▾

مقارنة الوقت المسجّل على البطاقات بساعات الحضور لكل موظف خلال آخر days يوماً (افتراضياً 7): الحاضر، المسجّل، الفجوة، ونسبة التغطية. employeeId لموظف واحد.

الصلاحية المطلوبة لموظّف الربط: product.time.report.team

الوسيطالنوعمطلوبالوصف
daysinteger—عدد الأيام
employeeIdstring—الموظف (معرّف)
curl -X POST https://labeb.app/api/v1/tools/pm_time_vs_attendance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10,"employeeId":"…"}'
تعديلPOST /api/v1/tools/pm_update_cardتعديل بطاقة منتج▾

تعديل بطاقة منتج قائمة: العنوان/الوصف/النوع/الأولوية/النظام. الحقول غير المذكورة تبقى كما هي. cardType: bug|feature|improvement|suggestion · priority: low|normal|high|critical.

الصلاحية المطلوبة لموظّف الربط: product.cards.update.all

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
titlestring—
descriptionstring—
cardTypestring—
prioritystring—
systemstring—
curl -X POST https://labeb.app/api/v1/tools/pm_update_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…"}'
تعديلPOST /api/v1/tools/pm_update_card_statusنقل مرحلة بطاقة▾

نقل بطاقة منتج إلى مرحلة جديدة في **الحالة العامّة** (مسار مدير المنتج). **يُطلق رسالة التريغر للعملاء الطالبين** إن كان لتلك المرحلة تريغر فعّال. ⚠️ لا تغيّر عمود لوحة المطوّرين (لم تبدأ · قيد العمل · مراجعة…) — لذلك استخدم pm_move_dev_state. status: new|reviewing|accepted|rejected|in_release|in_progress|testing|done · reason إلزامي عند rejected.

الصلاحية المطلوبة لموظّف الربط: product.cards.manage

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
statusstringنعم
reasonstring—سبب النقل — إلزامي عند rejected واختياري لغيره (يُحفظ في سجلّ البطاقة)
curl -X POST https://labeb.app/api/v1/tools/pm_update_card_status \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"cardId":"…","status":"…"}'
قراءةPOST /api/v1/tools/preview_release_launchمعاينة إطلاق إصدار▾

معاينة إطلاق إصدار قبل الموافقة: أيّ البطاقات ستُطلق، ومن سيصله إشعار الإطلاق من العملاء الطالبين وعلى أيّ قناة، ومن لن يصله ولماذا. قراءةٌ فقط.

الصلاحية المطلوبة لموظّف الربط: product.releases.update

الوسيطالنوعمطلوبالوصف
releaseIdstringنعممعرّف الإصدار من list_releases (معرّف)
onlyReviewedboolean—المُراجَعة نهائياً فقط (الافتراضي نعم)
curl -X POST https://labeb.app/api/v1/tools/preview_release_launch \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"releaseId":"…"}'
قراءةPOST /api/v1/tools/release_status_summaryحالة الإصدار▾

عدّادات إصدار منتجٍ واحد على أعمدة اللوحة كما يراها المستأجر (أعمدة لوحة المطوّر بأسمائها عنده)، مع فصل «تمّ التطوير» عن «تمّت ورُفعت للإصدار». مرّر نسخة الإصدار أو عنوانه في releaseId.

الصلاحية المطلوبة لموظّف الربط: product.cards.view

الوسيطالنوعمطلوبالوصف
releaseIdstringنعممعرّف إصدار المنتج أو نسخته أو عنوانه — إصدارات المنتج لا نشرات النظام
curl -X POST https://labeb.app/api/v1/tools/release_status_summary \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"releaseId":"…"}'

الموارد البشرية33

إضافةPOST /api/v1/tools/add_coaching_note_messageردّ على ملاحظة تدريب▾

ردّ في نقاش ملاحظة تدريب.

الصلاحية المطلوبة لموظّف الربط: coaching.notes.update

الوسيطالنوعمطلوبالوصف
noteIdstringنعممعرّف ملاحظة التدريب (من list_coaching_notes)
contentstringنعم
curl -X POST https://labeb.app/api/v1/tools/add_coaching_note_message \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"noteId":"…","content":"…"}'
تعديلPOST /api/v1/tools/attendance_check_inتسجيل حضور▾

تسجيل حضوري أنا الآن (يتطلب أن يكون لحسابك سجل موظف). اقتبس الوقت من checkInAt في النتيجة حرفياً — ولا تذكر وقتاً غيره.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.create.own

الوسيطالنوعمطلوبالوصف
notesstring—
curl -X POST https://labeb.app/api/v1/tools/attendance_check_in \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"notes":"…"}'
تعديلPOST /api/v1/tools/attendance_check_outتسجيل انصراف▾

تسجيل انصرافي أنا الآن. اقتبس الوقت من checkOutAt في النتيجة حرفياً — ولا تذكر وقتاً غيره.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.create.own

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/attendance_check_out \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
تعديلPOST /api/v1/tools/correct_attendance_recordتصحيح حضور▾

تصحيح سجل حضور يوم سابق: وقت الدخول/الخروج (ISO مع الإزاحة، مثل 2026-10-20T09:00:00+03:00) والحالة (Present · Absent · Late · Remote) والملاحظات. الحقول غير المذكورة تبقى. يُدقَّق التعديل ويُرفض إن كان راتب الشهر معتمداً.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.update.team

الوسيطالنوعمطلوبالوصف
attendanceIdstringنعممعرّف يوم الحضور (من get_employee_attendance أو get_attendance_report)
checkInstring—
checkOutstring—
status"Present" | "Absent" | "Late" | "Remote"—
notesstring—
curl -X POST https://labeb.app/api/v1/tools/correct_attendance_record \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"attendanceId":"…"}'
إضافةPOST /api/v1/tools/create_coaching_noteملاحظة تدريب▾

كتابة ملاحظة تدريب (كوتشينغ) لموظف (assignedToUserId من list_users): العنوان والوصف وتوجيه المدير والأولوية (low · medium · high · critical)، مع ربط اختياري بمحادثة عميل.

الصلاحية المطلوبة لموظّف الربط: coaching.notes.create

الوسيطالنوعمطلوبالوصف
assignedToUserIdstringنعم
titlestringنعم
descriptionstring—
managerNotestring—
priority"low" | "medium" | "high" | "critical"—
customerPhonestring—
customerNamestring—
curl -X POST https://labeb.app/api/v1/tools/create_coaching_note \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"assignedToUserId":"…","title":"…"}'
إضافةPOST /api/v1/tools/create_employeeإضافة موظف▾

إضافة موظف جديد إلى سجل الموارد البشرية بلا حساب دخول (الاسم والهاتف مطلوبان؛ المنصب والقسم وتاريخ التعيين اختيارية). الراتب يُضبط من شاشة الرواتب.

الصلاحية المطلوبة لموظّف الربط: hr.employee.create

الوسيطالنوعمطلوبالوصف
fullNamestringنعم
phonestringنعم
emailstring—
positionstring—
departmentstring—
hireDatestring—YYYY-MM-DD
curl -X POST https://labeb.app/api/v1/tools/create_employee \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"…","phone":"…"}'
تعديلPOST /api/v1/tools/decide_coaching_noteبتّ ملاحظة تدريب▾

البتّ في ملاحظة تدريب سلّمها الموظف: approve اعتمادها وإغلاقها (مع تعليق اختياري) أو send_back إعادتها له مع ملاحظة (مطلوبة).

الصلاحية المطلوبة لموظّف الربط: coaching.notes.update

الوسيطالنوعمطلوبالوصف
noteIdstringنعممعرّف ملاحظة التدريب (من list_coaching_notes)
decision"approve" | "send_back"نعم
feedbackstring—
curl -X POST https://labeb.app/api/v1/tools/decide_coaching_note \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"noteId":"…","decision":"approve"}'
تعديلPOST /api/v1/tools/decide_leaveقرار إجازة▾

الموافقة على طلب إجازة أو رفضه. استخدم get_leaves_report أولاً — يعيد id لكل طلب مع اسم صاحبه.

الصلاحية المطلوبة لموظّف الربط: hr.leave.approve.direct

الوسيطالنوعمطلوبالوصف
leaveIdstringنعممعرّف طلب الإجازة أو اسم صاحبه
approvebooleanنعم
curl -X POST https://labeb.app/api/v1/tools/decide_leave \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leaveId":"…","approve":true}'
تعديلPOST /api/v1/tools/excuse_late_attendanceعذر تأخير▾

قبول عذر تأخير موظف في يومٍ بعينه: يُلغى وسم التأخير وخصمه مع سبب يُحفظ في السجل. يُرفض إن كان راتب الشهر معتمداً.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.update.team

الوسيطالنوعمطلوبالوصف
attendanceIdstringنعممعرّف يوم الحضور (من get_employee_attendance أو get_attendance_report)
reasonstringنعم
curl -X POST https://labeb.app/api/v1/tools/excuse_late_attendance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"attendanceId":"…","reason":"…"}'
قراءةPOST /api/v1/tools/get_attendance_reportتقرير الحضور▾

تقرير الحضور لفترة (الافتراضي 14 يوماً): حضور/غياب/تأخير لكل موظف.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.read.all

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_attendance_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_coaching_note_messagesنقاش ملاحظة تدريب▾

نقاش ملاحظة تدريب بين المدير والموظف (الأقدم أولاً).

الصلاحية المطلوبة لموظّف الربط: coaching.notes.view

الوسيطالنوعمطلوبالوصف
noteIdstringنعممعرّف ملاحظة التدريب (من list_coaching_notes)
curl -X POST https://labeb.app/api/v1/tools/get_coaching_note_messages \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"noteId":"…"}'
قراءةPOST /api/v1/tools/get_employee_attendanceحضور موظف▾

تقرير حضور موظف واحد بالاسم أو المعرّف خلال فترة (الافتراضي 30 يوماً): ملخص (حضور، تأخير، غياب، عن بعد، دقائق التأخير، ساعات العمل، نسبة الالتزام) + الإجازات + كل يوم بوقت الدخول والخروج بتوقيت الشركة. من يملك قراءة حضور الجميع يرى أي موظف، وغيره يرى نفسه ومن تحته فقط.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.read.team

الوسيطالنوعمطلوبالوصف
employeestringنعماسم الموظف أو جزء منه، أو معرّف الموظف أو المستخدم
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_employee_attendance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"employee":"…"}'
قراءةPOST /api/v1/tools/get_employee_team_attendanceحضور فريق موظف▾

تقرير حضور فريق موظف (من تحته في الخط الإداري) خلال فترة (الافتراضي 30 يوماً): ملخص الفريق + لكل عضو ملخصه وحالته اليوم + من لم يسجّل دخوله اليوم. بلا employee يعيد فريقك أنت. من يملك قراءة حضور الجميع يرى فريق أي مدير، وغيره يرى فريقه أو فريق مدير تحته فقط.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.read.team

الوسيطالنوعمطلوبالوصف
employeestring—اسم المدير أو معرّفه — اختياري
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_employee_team_attendance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"employee":"…","days":10}'
قراءةPOST /api/v1/tools/get_employees_workloadحِمل الموظفين▾

حِمل كل موظف من المهام: المفتوحة والمتأخرة (استحقاقها قبل اليوم)، الأثقل أولاً. أساس «لمن أُسند هذه المهمة؟».

الصلاحية المطلوبة لموظّف الربط: hr.employee.read.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_employees_workload \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_leave_impactأثر إجازة▾

أثر إجازة: ما سيتوقّف خلالها (متابعات · مواعيد · تذاكر مفتوحة · عملاء نشطون، مع أمثلة) — لمن يبتّ في الإجازات — وتقرير التسليم بعد النقل: البديل وما أُعيد وما تُخطّي وهل اطّلع العائد. صاحب الإجازة يرى تقرير تسليمه.

الصلاحية المطلوبة لموظّف الربط: hr.leave.read.own

الوسيطالنوعمطلوبالوصف
leaveIdstringنعممعرّف طلب الإجازة (من get_leaves_report)
curl -X POST https://labeb.app/api/v1/tools/get_leave_impact \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leaveId":"…"}'
قراءةPOST /api/v1/tools/get_leaves_reportتقرير الإجازات▾

طلبات الإجازات (معلقة وموافَقة) ضمن فترة.

الصلاحية المطلوبة لموظّف الربط: hr.leave.read.all

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_leaves_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_my_attendanceسجل حضوري▾

سجل حضوري خلال فترة (الافتراضي 14 يوماً).

الصلاحية المطلوبة لموظّف الربط: hr.attendance.read.own

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_my_attendance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_my_teamفريقي▾

مَن في فريقي: الموظفون الذين أديرهم مباشرةً أو عبر الخطّ الإداري، بأسمائهم ومناصبهم.

الصلاحية المطلوبة لموظّف الربط: hr.employee.read.team

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_my_team \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_org_chartالهيكل الإداري▾

الهيكل الإداري: المناصب وشجرتها + الموظفون ومناصبهم ومدراؤهم المباشرون.

الصلاحية المطلوبة لموظّف الربط: hr.employee.read.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_org_chart \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_team_attendanceحضور فريقي▾

حضور فريقي خلال فترة (الافتراضي 14 يوماً): حضور وغياب وتأخير لكل فرد أديره.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.read.team

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_team_attendance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_team_member_profileبطاقة موظف في فريقي▾

البطاقة الوظيفية لموظف في فريقي بالاسم: المنصب والقسم وتاريخ التوظيف والمدير المباشر.

الصلاحية المطلوبة لموظّف الربط: hr.profile.read.team

الوسيطالنوعمطلوبالوصف
namestringنعم
curl -X POST https://labeb.app/api/v1/tools/get_team_member_profile \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"…"}'
قراءةPOST /api/v1/tools/list_checkout_requestsطلبات الانصراف▾

طلبات تصحيح وقت الانصراف (status: pending معلّق · approved · rejected) ومن لم يسجّل انصرافه بعد. canReview: هل تستطيع البتّ فيه. كلٌّ يرى ما يخصّه أو فريقه بحسب صلاحيته.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.create.own

الوسيطالنوعمطلوبالوصف
employeeIdstring—
status"pending" | "approved" | "rejected"—
curl -X POST https://labeb.app/api/v1/tools/list_checkout_requests \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"employeeId":"…","status":"pending"}'
قراءةPOST /api/v1/tools/list_coaching_notesملاحظات التدريب▾

ملاحظات التدريب (الكوتشينغ) للموظفين: العنوان والأولوية والحالة والمُسنَد إليه.

الصلاحية المطلوبة لموظّف الربط: coaching.notes.view

الوسيطالنوعمطلوبالوصف
statusstring—new|seen|started|submitted|resolved
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_coaching_notes \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"…","limit":10}'
قراءةPOST /api/v1/tools/list_employeesقراءة الموظفين▾

قائمة الموظفين: id (معرّف الموظف)، userId (معرّف المستخدم — هذا ما تطلبه أدوات الإسناد)، الاسم، المنصب، القسم، الحالة.

الصلاحية المطلوبة لموظّف الربط: hr.employee.read.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_employees \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_holidaysالعطل الرسمية▾

العطل الرسمية المُعلنة (التاريخ والاسم والسبب) لسنة (افتراضياً كلّها).

الصلاحية المطلوبة لموظّف الربط: hr.attendance.read.own

الوسيطالنوعمطلوبالوصف
yearinteger—
curl -X POST https://labeb.app/api/v1/tools/list_holidays \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"year":10}'
قراءةPOST /api/v1/tools/list_payroll_grievancesتظلّمات الرواتب▾

تظلّمات الرواتب: الموضوع والحالة ومن فتحها ومتى روجعت.

الصلاحية المطلوبة لموظّف الربط: payroll.grievance.review

الوسيطالنوعمطلوبالوصف
statusstring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_payroll_grievances \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"…","limit":10}'
قراءةPOST /api/v1/tools/list_payroll_runsدورات الرواتب▾

دورات الرواتب: الفترة والحالة واعتمادات المدير والموارد البشرية وحاجة إعادة الاحتساب.

الصلاحية المطلوبة لموظّف الربط: payroll.run.read

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_payroll_runs \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
تعديلPOST /api/v1/tools/mark_employee_attendanceتسجيل حضور موظف▾

تسجيل حضور موظف آخر بالنيابة عنه اليوم (للمدير أو الموارد البشرية): action واحدة من present حاضر · late متأخر · absent غائب · remote عن بعد · check_out انصراف الآن. employee بالاسم أو المعرّف.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.update.all

الوسيطالنوعمطلوبالوصف
employeestringنعم
action"present" | "late" | "absent" | "remote" | "check_out"نعم
notesstring—
workLocationstring—
curl -X POST https://labeb.app/api/v1/tools/mark_employee_attendance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"employee":"…","action":"present"}'
تعديلPOST /api/v1/tools/reassign_leave_tasksنقل عمل المُجاز▾

نقل عمل الموظف المُجاز إلى زميل طوال الإجازة: بطاقات العملاء (ومتابعاتها) والمواعيد والتذاكر — كلٌّ اختياري (افتراضياً الكل). يُرجَع ما لم يمسّه البديل تلقائياً عند انتهاء الإجازة. approve: true يعتمد الإجازة في الخطوة نفسها.

الصلاحية المطلوبة لموظّف الربط: hr.leave.approve.direct

الوسيطالنوعمطلوبالوصف
leaveIdstringنعممعرّف طلب الإجازة (من get_leaves_report)
toUserIdstringنعمالمستخدم البديل (من list_users)
leadsboolean—
appointmentsboolean—
ticketsboolean—
approveboolean—
curl -X POST https://labeb.app/api/v1/tools/reassign_leave_tasks \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leaveId":"…","toUserId":"…"}'
إضافةPOST /api/v1/tools/request_leaveطلب إجازة▾

تقديم طلب إجازة لي: النوع (annual|sick|unpaid|other) وتاريخا البداية والنهاية.

الصلاحية المطلوبة لموظّف الربط: hr.leave.request.own

الوسيطالنوعمطلوبالوصف
leaveTypestringنعم
startDatestringنعم
endDatestringنعم
reasonstring—
curl -X POST https://labeb.app/api/v1/tools/request_leave \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leaveType":"…","startDate":"…","endDate":"…"}'
تعديلPOST /api/v1/tools/review_checkout_requestبتّ طلب انصراف▾

قبول أو رفض طلب تصحيح وقت الانصراف (approve: true يقبل) مع سبب. لموظفي فريقك أو للكل بحسب صلاحيتك.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.update.team

الوسيطالنوعمطلوبالوصف
requestIdstringنعممن list_checkout_requests
approvebooleanنعم
reasonstring—
curl -X POST https://labeb.app/api/v1/tools/review_checkout_request \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"requestId":"…","approve":true}'
تعديلPOST /api/v1/tools/update_employeeتعديل موظف▾

تعديل بيانات موظف: الاسم والهاتف والبريد والمنصب والقسم والمدير المباشر (directManagerUserId — معرّف مستخدم؛ "none" للإزالة) أو إدراجه في منصبٍ من الهيكل (positionId). postSaleOwnGroupMode: inherit السلوك السابق، off لا يضاف لعملائه، member عضو، admin مشرف. الراتب والحالة لا يتغيّران هنا.

الصلاحية المطلوبة لموظّف الربط: hr.employee.update.all

الوسيطالنوعمطلوبالوصف
employeeIdstringنعممن list_employees
fullNamestring—
phonestring—
emailstring—
positionstring—
departmentstring—
directManagerUserIdstring—
positionIdstring—منصب من get_org_chart
postSaleOwnGroupMode"inherit" | "off" | "member" | "admin"—
curl -X POST https://labeb.app/api/v1/tools/update_employee \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"employeeId":"…"}'
تعديلPOST /api/v1/tools/upsert_holidayعطلة رسمية▾

إعلان عطلة رسمية (تاريخ واسم وسبب)، أو تعديلها بتمرير holidayId. اليوم المُعلن لا يُحسب غياباً.

الصلاحية المطلوبة لموظّف الربط: hr.attendance.update.all

الوسيطالنوعمطلوبالوصف
holidayIdstring—
datestringنعمYYYY-MM-DD
namestringنعم
reasonstring—
curl -X POST https://labeb.app/api/v1/tools/upsert_holiday \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"date":"…","name":"…"}'

الاستراتيجية والأهداف21

إضافةPOST /api/v1/tools/add_goal_commentتعليق على هدف▾

تعليق على هدف: entityType annual_goal (سنوي) أو operational_goal (شهري). لقراءة التعليقات: list_goal_comments.

الصلاحية المطلوبة لموظّف الربط: strategy.comments.create

الوسيطالنوعمطلوبالوصف
entityType"annual_goal" | "operational_goal"نعم
entityIdstringنعم
contentstringنعم
curl -X POST https://labeb.app/api/v1/tools/add_goal_comment \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"entityType":"annual_goal","entityId":"…","content":"…"}'
تعديلPOST /api/v1/tools/check_in_annual_goalنبض هدف▾

تسجيل نبض الأسبوع لهدف سنوي: الثقة (green على المسار · yellow قلق · red متعثّر) وقيمة المؤشّر الآن وتعليق — يُسجَّل على هدف الشهر الحالي التابع له.

الصلاحية المطلوبة لموظّف الربط: strategy.monthly.checkin

الوسيطالنوعمطلوبالوصف
goalIdstringنعممعرّف الهدف السنوي (من list_annual_goals)
confidence"green" | "yellow" | "red"نعم
kpiValuenumber—
commentstring—
curl -X POST https://labeb.app/api/v1/tools/check_in_annual_goal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"goalId":"…","confidence":"green"}'
إضافةPOST /api/v1/tools/create_annual_goalإنشاء هدف سنوي▾

إنشاء هدف سنوي تحت ركيزة استراتيجية (pillarId من list_strategic_pillars): العنوان والسنة (افتراضياً الحالية) والمؤشّر وقيمته المستهدفة والمسؤول والاستحقاق. الحالة افتراضياً active.

الصلاحية المطلوبة لموظّف الربط: strategy.objectives.create

الوسيطالنوعمطلوبالوصف
pillarIdstringنعم
titlestringنعم
descriptionstring—
yearinteger—
status"draft" | "active" | "achieved" | "missed" | "cancelled"—
targetMetricstring—
kpiNamestring—
kpiTargetnumber—
kpiCurrentnumber—
kpiUnitstring—
ownerUserIdstring—
dueDatestring—YYYY-MM-DD
curl -X POST https://labeb.app/api/v1/tools/create_annual_goal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"pillarId":"…","title":"…"}'
إضافةPOST /api/v1/tools/create_monthly_goalإنشاء هدف شهري▾

إنشاء هدف شهري مرتبط بهدف سنوي (استخدم list_annual_goals للحصول على annualObjectiveId).

الصلاحية المطلوبة لموظّف الربط: strategy.monthly.create

الوسيطالنوعمطلوبالوصف
annualObjectiveIdstringنعممعرّف الهدف السنوي أو عنوانه
yearintegerنعم
monthintegerنعم
titlestringنعم
descriptionstring—
kpiNamestring—
kpiTargetnumber—
kpiUnitstring—
curl -X POST https://labeb.app/api/v1/tools/create_monthly_goal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"annualObjectiveId":"…","year":10,"month":10,"title":"…"}'
إضافةPOST /api/v1/tools/create_projectإنشاء مشروع▾

إنشاء مشروع جديد، مع ربط اختياري بأهداف سنوية/شهرية.

الصلاحية المطلوبة لموظّف الربط: strategy.projects.create

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring—
prioritystring—low|medium|high
dueDatestring—
objectiveIdsstring[]—
goalIdsstring[]—
curl -X POST https://labeb.app/api/v1/tools/create_project \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"…"}'
إضافةPOST /api/v1/tools/create_strategic_riskتسجيل خطر▾

تسجيل خطر استراتيجي: العنوان والتصنيف والاحتمال والأثر (1-5) وخطة التخفيف والمسؤول وموعد المراجعة، وربطه بركيزة أو هدف.

الصلاحية المطلوبة لموظّف الربط: strategy.risks.create

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring—
category"operational" | "financial" | "market" | "regulatory" | "technology" | "people" | "strategic" | "reputation"نعم
probabilityintegerنعم
impactintegerنعم
status"open" | "mitigated" | "realized" | "closed"—
mitigationPlanstring—
ownerUserIdstring—
linkedPillarIdstring—
linkedObjectiveIdstring—
nextReviewDatestring—YYYY-MM-DD
curl -X POST https://labeb.app/api/v1/tools/create_strategic_risk \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"…","category":"operational","probability":10,"impact":10}'
حذفPOST /api/v1/tools/delete_monthly_goalحذف هدف شهري▾

حذف هدف شهري.

الصلاحية المطلوبة لموظّف الربط: strategy.monthly.delete.all

الوسيطالنوعمطلوبالوصف
goalIdstringنعممعرّف الهدف الشهري أو عنوانه
curl -X POST https://labeb.app/api/v1/tools/delete_monthly_goal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"goalId":"…"}'
حذفPOST /api/v1/tools/delete_projectحذف مشروع▾

حذف مشروع.

الصلاحية المطلوبة لموظّف الربط: strategy.projects.delete.all

الوسيطالنوعمطلوبالوصف
projectIdstringنعممعرّف المشروع أو عنوانه
curl -X POST https://labeb.app/api/v1/tools/delete_project \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"…"}'
قراءةPOST /api/v1/tools/list_annual_goalsقراءة الأهداف السنوية▾

الأهداف السنوية (الاستراتيجية) مع حالتها وتقدمها.

الصلاحية المطلوبة لموظّف الربط: strategy.objectives.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_annual_goals \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_goal_commentsتعليقات الأهداف▾

تعليقات الأهداف (سنوية/شهرية) — للاطلاع على نقاش الفريق حول هدف.

الصلاحية المطلوبة لموظّف الربط: strategy.comments.view

الوسيطالنوعمطلوبالوصف
entityIdstring—معرّف الهدف
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_goal_comments \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"entityId":"…","limit":10}'
قراءةPOST /api/v1/tools/list_monthly_goalsقراءة الأهداف الشهرية▾

الأهداف الشهرية (التشغيلية) لشهر محدد مع KPI والتقدم. الافتراضي الشهر الحالي.

الصلاحية المطلوبة لموظّف الربط: strategy.monthly.view

الوسيطالنوعمطلوبالوصف
yearinteger—
monthinteger—
curl -X POST https://labeb.app/api/v1/tools/list_monthly_goals \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"year":10,"month":10}'
قراءةPOST /api/v1/tools/list_project_milestonesعرض محطّات مشروع▾

محطّات مشروع: العنوان والاستحقاق والحالة (pending منتظرة · done أُنجزت) بالترتيب.

الصلاحية المطلوبة لموظّف الربط: strategy.projects.view.own

الوسيطالنوعمطلوبالوصف
projectIdstringنعممعرّف المشروع (من list_projects)
curl -X POST https://labeb.app/api/v1/tools/list_project_milestones \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"…"}'
قراءةPOST /api/v1/tools/list_projectsقراءة المشاريع▾

المشاريع مع الحالة والتقدم والصحة وعدد المهام.

الصلاحية المطلوبة لموظّف الربط: strategy.projects.view

الوسيطالنوعمطلوبالوصف
statusstring—planning|active|on_hold|done|cancelled (اختياري)
curl -X POST https://labeb.app/api/v1/tools/list_projects \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"…"}'
قراءةPOST /api/v1/tools/list_strategic_pillarsالركائز الاستراتيجية▾

الركائز الاستراتيجية للشركة — الإطار الذي تُنسب إليه الأهداف والمخاطر.

الصلاحية المطلوبة لموظّف الربط: strategy.pillars.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_strategic_pillars \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_strategic_risksالمخاطر الاستراتيجية▾

سجلّ المخاطر الاستراتيجية مرتّباً بدرجة الخطورة: الاحتمال والأثر والحالة وخطة التخفيف.

الصلاحية المطلوبة لموظّف الربط: strategy.risks.view

الوسيطالنوعمطلوبالوصف
statusstring—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_strategic_risks \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"…","limit":10}'
تعديلPOST /api/v1/tools/set_project_healthصحّة مشروع▾

تعيين صحّة المشروع مع سببها: on_track على المسار · at_risk في خطر · off_track متعثّر.

الصلاحية المطلوبة لموظّف الربط: strategy.projects.update.own

الوسيطالنوعمطلوبالوصف
projectIdstringنعممعرّف المشروع (من list_projects)
health"on_track" | "at_risk" | "off_track"نعم
notestring—السبب
curl -X POST https://labeb.app/api/v1/tools/set_project_health \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"…","health":"on_track"}'
تعديلPOST /api/v1/tools/update_annual_goalتعديل هدف سنوي▾

تعديل هدف سنوي: العنوان والوصف والحالة والمؤشّر (القيمة الحالية والمستهدفة) والمسؤول والاستحقاق. الحقول غير المذكورة تبقى.

الصلاحية المطلوبة لموظّف الربط: strategy.objectives.update.own

الوسيطالنوعمطلوبالوصف
goalIdstringنعممعرّف الهدف السنوي (من list_annual_goals)
titlestring—
descriptionstring—
yearinteger—
status"draft" | "active" | "achieved" | "missed" | "cancelled"—
targetMetricstring—
kpiNamestring—
kpiTargetnumber—
kpiCurrentnumber—
kpiUnitstring—
ownerUserIdstring—
dueDatestring—YYYY-MM-DD
curl -X POST https://labeb.app/api/v1/tools/update_annual_goal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"goalId":"…"}'
تعديلPOST /api/v1/tools/update_monthly_goalتعديل هدف شهري▾

تعديل هدف شهري (عنوان/وصف/حالة/KPI). الحقول غير المذكورة تبقى كما هي.

الصلاحية المطلوبة لموظّف الربط: strategy.monthly.update.all

الوسيطالنوعمطلوبالوصف
goalIdstringنعممعرّف الهدف الشهري أو عنوانه
titlestring—
descriptionstring—
statusstring—new|in_progress|done|cancelled
kpiTargetnumber—
kpiCurrentnumber—
curl -X POST https://labeb.app/api/v1/tools/update_monthly_goal \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"goalId":"…"}'
تعديلPOST /api/v1/tools/update_projectتعديل مشروع▾

تعديل مشروع (عنوان/وصف/حالة/أولوية/استحقاق). الحقول غير المذكورة تبقى.

الصلاحية المطلوبة لموظّف الربط: strategy.projects.update.all

الوسيطالنوعمطلوبالوصف
projectIdstringنعممعرّف المشروع أو عنوانه
titlestring—
descriptionstring—
statusstring—planning|active|on_hold|done|cancelled
prioritystring—
dueDatestring—
curl -X POST https://labeb.app/api/v1/tools/update_project \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"…"}'
تعديلPOST /api/v1/tools/update_strategic_riskتحديث خطر▾

تحديث خطر استراتيجي: إعادة تقييم الاحتمال والأثر، أو تغيير الحالة (open مفتوح · mitigated خُفّف · realized وقع · closed أُغلق)، أو الخطة والمسؤول. الحقول غير المذكورة تبقى. للقائمة: list_strategic_risks.

الصلاحية المطلوبة لموظّف الربط: strategy.risks.update.own

الوسيطالنوعمطلوبالوصف
riskIdstringنعم
titlestring—
descriptionstring—
category"operational" | "financial" | "market" | "regulatory" | "technology" | "people" | "strategic" | "reputation"—
probabilityinteger—
impactinteger—
status"open" | "mitigated" | "realized" | "closed"—
mitigationPlanstring—
ownerUserIdstring—
linkedPillarIdstring—
linkedObjectiveIdstring—
nextReviewDatestring—YYYY-MM-DD
curl -X POST https://labeb.app/api/v1/tools/update_strategic_risk \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"riskId":"…"}'
تعديلPOST /api/v1/tools/upsert_project_milestoneمحطّة مشروع▾

إضافة محطّة لمشروع، أو تعديلها بتمرير milestoneId (العنوان والاستحقاق والحالة pending/done).

الصلاحية المطلوبة لموظّف الربط: strategy.projects.update.own

الوسيطالنوعمطلوبالوصف
projectIdstringنعممعرّف المشروع (من list_projects)
milestoneIdstring—
titlestringنعم
dueDatestring—YYYY-MM-DD
status"pending" | "done"—
curl -X POST https://labeb.app/api/v1/tools/upsert_project_milestone \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"…","title":"…"}'

المستشار والذكاء11

تعديلPOST /api/v1/tools/forget_memoryنسيان معلومة محفوظة▾

نسيان معلومة محفوظة خاطئة أو قديمة (id من list_memories) — تختفي من الذاكرة فوراً.

الصلاحية المطلوبة لموظّف الربط: advisor.use

الوسيطالنوعمطلوبالوصف
idstringنعم
curl -X POST https://labeb.app/api/v1/tools/forget_memory \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…"}'
قراءةPOST /api/v1/tools/get_ai_agentقراءة برومبت وكيل▾

تفاصيل وكيل ذكاء واحد بما فيها البرومبت الكامل — للمراجعة أو التحسين.

الصلاحية المطلوبة لموظّف الربط: ai.prompt.manage

الوسيطالنوعمطلوبالوصف
agentKeystringنعم
curl -X POST https://labeb.app/api/v1/tools/get_ai_agent \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"agentKey":"…"}'
قراءةPOST /api/v1/tools/get_business_profileقراءة ملفّ الشركة▾

ملفّ الشركة (النشاط · المنتجات · الجمهور · النبرة · اللهجة · السياسات · الباقات · الأسئلة الشائعة …) مع **قائمة الحقول الناقصة** و**هل يصل الملفّ للبوت فعلاً** أم يحجبه برومبتٌ يدويّ. ابدأ بها قبل أي نصيحة عن ردود البوت: برومبتٌ ضعيف سببه غالباً ملفٌّ ناقص لا قالبٌ خاطئ.

الصلاحية المطلوبة لموظّف الربط: ai.prompt.manage

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_business_profile \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_advisor_findingsنتائج عدسات المستشار▾

نتائج عدسات المستشار (فحوص التحليل الجاهزة): العنوان والتفصيل والخطورة والاقتباس الدال والإجراء المقترح والحالة (new جديدة · accepted قُبلت · dismissed استُبعدت). فلاتر: lens · status.

الصلاحية المطلوبة لموظّف الربط: advisor.use

الوسيطالنوعمطلوبالوصف
lensstring—
status"new" | "accepted" | "dismissed"—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_advisor_findings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"lens":"…","status":"new"}'
قراءةPOST /api/v1/tools/list_ai_agentsقائمة وكلاء الذكاء▾

وكلاء الذكاء القابلون للضبط في الشركة (المبيعات، ما بعد البيع...) مع النموذج والحالة.

الصلاحية المطلوبة لموظّف الربط: ai.prompt.manage

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_ai_agents \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_memoriesذاكرة المستشار▾

ما حفظه المستشار عنك وعن شركتك بأداة remember: الحقائق والقرارات والتفضيلات مع تاريخها ومعرّفها.

الصلاحية المطلوبة لموظّف الربط: advisor.use

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_memories \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/plan_missionتفكيك إلى مهمة▾

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

الصلاحية المطلوبة لموظّف الربط: advisor.mission

الوسيطالنوعمطلوبالوصف
stepsobject[]نعم
curl -X POST https://labeb.app/api/v1/tools/plan_mission \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"steps":[]}'
قراءةPOST /api/v1/tools/test_ai_agent_replyاختبار برومبت▾

اختبار برومبت وكيل: أرسل رسالة عميل تجريبية واحصل على ردّ الوكيل الفعلي (يُخصم من رصيد الذكاء).

الصلاحية المطلوبة لموظّف الربط: ai.prompt.manage

الوسيطالنوعمطلوبالوصف
agentKeystringنعم
sampleMessagestringنعم
curl -X POST https://labeb.app/api/v1/tools/test_ai_agent_reply \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"agentKey":"…","sampleMessage":"…"}'
تعديلPOST /api/v1/tools/update_advisor_findingتحديث نتيجة عدسة▾

تحديث حالة نتيجة عدسة: accepted قبول (سأعالجها) · dismissed استبعاد · new إرجاعها جديدة.

الصلاحية المطلوبة لموظّف الربط: advisor.use

الوسيطالنوعمطلوبالوصف
idstringنعم
status"new" | "accepted" | "dismissed"نعم
curl -X POST https://labeb.app/api/v1/tools/update_advisor_finding \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…","status":"new"}'
تعديلPOST /api/v1/tools/update_ai_agentتعديل وكيل ذكاء▾

تعديل وكيل ذكاء: البرومبت أو النموذج أو الإعدادات أو التفعيل. يسري فوراً على ردود البوت. لتعديل جزءٍ من البرومبت **لا ترسله كاملاً**: مرّر edits (قائمة find/replace، المقطع منسوخ حرفيّاً من get_ai_agent ويظهر مرّة واحدة) أو append لإضافة نصّ في آخره. systemPrompt يستبدل البرومبت كلّه ولا يُجمع مع edits/append. أيّ تعديلٍ فاشل ⇒ لا يُحفظ شيء.

الصلاحية المطلوبة لموظّف الربط: ai.prompt.manage

الوسيطالنوعمطلوبالوصف
agentKeystringنعم
systemPromptstring—
editsobject[]—تعديلات جزئية: كل عنصر find مقطع منسوخ حرفيا من النص الحالي يظهر فيه مرة واحدة، وreplace بديله (فارغ = حذف)
appendstring—نص يضاف في آخر النص الحالي
modelstring—
temperaturenumber—
maxTokensinteger—
isEnabledboolean—
curl -X POST https://labeb.app/api/v1/tools/update_ai_agent \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"agentKey":"…"}'
تعديلPOST /api/v1/tools/update_business_profileتعديل ملفّ الشركة▾

تعديل جزئيّ لملفّ الشركة ثم **إعادة بناء برومبت الوكلاء المبنيّين منه تلقائياً**. مرّر الحقول التي تريد تغييرها فقط؛ الحقل غير المُمرَّر لا يُلمس، والقيمة الفارغة تفريغٌ صريح. الوكيل ذو البرومبت اليدويّ لا يتأثّر (تُعاد نتيجةُ الأداة بذلك صراحةً).

الصلاحية المطلوبة لموظّف الربط: ai.prompt.manage

الوسيطالنوعمطلوبالوصف
companyNamestring—
activitystring—
productsstring—
audiencestring—
tonestring—
dialectstring—
cityCountrystring—
differentiatorsstring—
policiesstring—
notServedstring—
escalationTargetstring—
workingHoursstring—
valueLinestring—
packagesstring—
competitorsstring—
officialLinksstring—
faqsstring—
objectionsstring—
examplesstring—
curl -X POST https://labeb.app/api/v1/tools/update_business_profile \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"companyName":"…","activity":"…"}'

الإعدادات والتقارير30

تعديلPOST /api/v1/tools/apply_labeeb_prompt_simulationاعتماد مسودة المحاكاة▾

يعتمد مسودة محاكاة مكتملة برومبتا محفوظا للموظف لبيب عبر مسار الحفظ الرسمي (نسخة احتياطية + سجل نسخ). لا تستعملها إلا بعد أن يرى المستخدم النتيجة ويوافق صراحة.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
idstringنعم
curl -X POST https://labeb.app/api/v1/tools/apply_labeeb_prompt_simulation \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…"}'
تعديلPOST /api/v1/tools/cancel_labeeb_prompt_simulationإيقاف محاكاة برومبت▾

إيقاف محاكاة برومبت جارية (من simulate_labeeb_prompt) لوقف استهلاك الرصيد.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
idstringنعم
curl -X POST https://labeb.app/api/v1/tools/cancel_labeeb_prompt_simulation \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…"}'
تعديلPOST /api/v1/tools/cancel_stale_follow_upsإلغاء المتابعات اليتيمة▾

إلغاء المتابعات المعلّقة اليتيمة دفعة واحدة: متابعات مجدولة تشير لخطوة حُذفت من خطّتها. templateId اختياري لقصرها على خطّة واحدة.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
templateIdstring—
curl -X POST https://labeb.app/api/v1/tools/cancel_stale_follow_ups \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"templateId":"…"}'
قراءةPOST /api/v1/tools/estimate_labeeb_prompt_simulationتقدير محاكاة البرومبت▾

تقدير محاكاة برومبت لبيب قبل بدئها: كم دورا حقيقيا في النطاق (range: today اليوم · yesterday أمس · 7d آخر 7 أيام · 24h · 48h · custom مع fromDate/toDate بساعة الحساب) أو في محادثات بعينها (threadKeys من list_labeeb_prompt_simulation_conversations) سيعاد، كم نداء ذكاء، وكم ستكلف من رصيد الذكاء الاصطناعي للحساب وهل الرصيد يكفي. اقرأ البرومبت الحالي أولا بـ get_ai_agent (sales) واكتب المسودة كاملة في draftPrompt. لا تكلف شيئا.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
draftPromptstringنعم
range"today" | "yesterday" | "7d" | "24h" | "48h" | "custom"—
fromDatestring—YYYY-MM-DD بساعة الحساب — مع custom
toDatestring—
threadKeysstring[]—
maxTurnsinteger—
modelstring—موديل للتجربة بدل موديل لبيب الحالي، بلا أي تغيير على الردود الحية
curl -X POST https://labeb.app/api/v1/tools/estimate_labeeb_prompt_simulation \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"draftPrompt":"…"}'
قراءةPOST /api/v1/tools/get_ai_creditsرصيد الذكاء ومتى ينفد▾

رصيد الذكاء الاصطناعي بالدولار: المتبقّي والمشحون والمصروف، ومتوسط الصرف اليومي، وكم يوماً يكفي بالمعدّل الحالي، وحدّ التنبيه، وآخر حركات الشحن والخصم.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

الوسيطالنوعمطلوبالوصف
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_ai_credits \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"limit":10}'
قراءةPOST /api/v1/tools/get_automation_rule_executionsسجلّ تنفيذ قواعد الأتمتة▾

أثر قواعد الأتمتة الفعلي: متى انطلقت كل قاعدة وعلى أي عميل وماذا فعلت (إسناد · تذكرة · رسالة…) ونجحت أم فشلت ولماذا، مع ملخّص آخر 7 أيام لكل قاعدة (عدد · نجاح · فشل · آخر تنفيذ). فلاتر: ruleId (من list_automation_rules) · outcome success|failed · phone · days.

الصلاحية المطلوبة لموظّف الربط: tenant.rules.view

الوسيطالنوعمطلوبالوصف
ruleIdstring—
outcome"success" | "failed"—
phonestring—
daysinteger—آخر كم يوماً (افتراضياً 7)
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_automation_rule_executions \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ruleId":"…","outcome":"success"}'
قراءةPOST /api/v1/tools/get_campaign_roiعائد الحملات▾

الحملاتُ والعائد في المدى: لكلّ حملة إنفاقُ ميتا بالدولار (بسعر صرف كلّ يوم) وبعملة الحساب · العملاء · المتفاعلون · الجلسات · الرابحون المعتمدون · الإيراد · كلفةُ العميل والمتفاعل والرابح · roi = الإيراد ÷ الإنفاق. الإنفاق يُسحب من ميتا كلّ 3 ساعات منذ 2026-07-01، وspendSyncedAt آخرُ تحديث. التعريفات (نفسُها في صفحة تقارير المبيعات): «جديد» = بطاقةٌ أُنشئت في المدى · «تفاعل» = كتب رسالتين فأكثر · «جلسة» = له موعدٌ أو خُسر بعد الجلسة · «تجربة» = وصل مرحلة التجربة ولا يعني أنه فتح حساباً · «بانتظار الاعتماد» = حُوِّل رابحاً ولم يُعتمد · «رابح معتمد» = اعتمده مدير المبيعات أو المالك، والرابحون قبل ميزة الاعتماد يُحسبون معتمدين · الإيراد = قيمة الباقة بالدولار للمعتمدين فقط (القدامى بلا مبلغ). المدى بتواريخ من/إلى، الافتراضي من أول الشهر حتى اليوم، وأقصاه 400 يوم.

الصلاحية المطلوبة لموظّف الربط: reports.sales.view

الوسيطالنوعمطلوبالوصف
fromDatestring—YYYY-MM-DD — الافتراضي أول الشهر الحالي
toDatestring—YYYY-MM-DD شاملاً — الافتراضي اليوم
sourcestring—meta_ctwa|whatsapp|tenant_data|manual
countrystring—رمز الدولة: SY|TR|JO|LB|IQ|SA|AE|OM|EG
campaignstring—معرّف الحملة أو اسمها
ownerUserIdstring—الموظف المسؤول: معرّفه أو اسمه
curl -X POST https://labeb.app/api/v1/tools/get_campaign_roi \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"fromDate":"…","toDate":"…"}'
قراءةPOST /api/v1/tools/get_customer_objectionsاعتراضات العملاء▾

اعتراضات العملاء مجمّعة بالمفتاح (السعر، الثقة، التوقيت، …) في فترة: عددها وكم منها قبل البيع وبعده، والعملاء تحت كل اعتراض (الاسم والرقم ومقتطف ما قالوه)، ثم اعتراضات كتبها لَبيب بنصّها ولا تطابق أيّ مفتاح.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

الوسيطالنوعمطلوبالوصف
daysinteger—افتراضياً 60
curl -X POST https://labeb.app/api/v1/tools/get_customer_objections \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_labeeb_decision_logسجلّ قرارات لَبيب▾

سجلّ قرارات لَبيب الأخيرة: لكل رسالة عميل ماذا قرّر (replied ردّ · silent صمت · escalated تحويل لموظف · blocked منعه حارس · tool_only استدعى أداة بلا نص) وسببه، ونصّ رسالة العميل وردّ لَبيب والأدوات التي استدعاها، مع ملخّص الأعداد لكل قرار، وkbImages: صور قاعدة المعرفة في الدور — لكل صورة imageId والمقال (articleId/articleTitle) والوصف وشرط إرسالها، وreason (auto_article المقال على «كل الصور» ووافق السؤال · labeeb_chose لَبيب اختارها) وstatus (sent أُرسلت · failed فشلت · skipped_clarifying_question حُجبت لأن الردّ سؤال توضيحي · skipped_sent_within_24h أُرسلت قبل قليل · skipped_condition مرجع داخلي). فلاتر: days · decision · reason · phone. مع messageId (معرّف ردّ لَبيب أو معرّف رسالة صورة أرسلها): «ليش ردّ هيك؟» — تفسير الردّ بالمقالات التي اعتمدها وقوّتها والأدوات والحرّاس ومرحلة العميل، ولرسالة الصورة: من أي مقال ولماذا أُرسلت.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

الوسيطالنوعمطلوبالوصف
daysinteger—آخر كم يوماً (افتراضياً 7)
decisionstring—
reasonstring—
phonestring—
messageIdstring—معرّف رسالة ردّ لَبيب لتفسيرها
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_labeeb_decision_log \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10,"decision":"…"}'
قراءةPOST /api/v1/tools/get_labeeb_group_returnرجوع لَبيب للمجموعات▾

بعد كم دقيقة يرجع لَبيب للردّ بعد أن حوّل المحادثة لموظف وسكت الموظف (0 = لا يرجع): في مجموعات واتساب (minutes)، وفي المحادثات الخاصة (privateMinutes — لَبيب بيردّ والإسناد باقي، privateIsDefault = افتراض النشاط: المطعم والمتجر 5 دقايق)، وكم مجموعة ومحادثة محوّلة تلقائياً الآن.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_labeeb_group_return \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_labeeb_prompt_simulationنتيجة محاكاة البرومبت▾

نتيجة محاكاة برومبت لبيب: الحالة والتقدم، عدد الردود التي تحسنت أو ساءت أو بقيت، متوسط درجة الرد القديم مقابل الجديد، التكلفة الفعلية، ولكل دور رسالة العميل والرد القديم (before) والرد الجديد (after) ودرجتاهما وسبب المحكم. بلا id تعيد آخر المحاكاات.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
idstring—
includeItemsboolean—
takeinteger—
curl -X POST https://labeb.app/api/v1/tools/get_labeeb_prompt_simulation \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…","includeItems":true}'
قراءةPOST /api/v1/tools/get_labeeb_reportتقرير لبيب▾

تقرير لبيب لفترة (days الافتراضي 1 = اليوم، حتى 31): عدد المحادثات والردود والتحويلات للموظفين والمتابعات والمواعيد، التوزيع اليومي، ما يحتاج انتباهاً، المحادثات المنتظرة، الأسئلة التي لم يعرف جوابها، وزمن الاستجابة. channel اختياري: whatsapp · messenger · website.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

الوسيطالنوعمطلوبالوصف
daysinteger—
channel"all" | "whatsapp" | "messenger" | "website"—
curl -X POST https://labeb.app/api/v1/tools/get_labeeb_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10,"channel":"all"}'
قراءةPOST /api/v1/tools/get_labeeb_settingsإعدادات لبيب▾

إعدادات الموظف لبيب كاملة: persona هويته (الاسم والنبرة واللهجة وطول الرد والإفصاح والإيموجي) · selling أسلوب البيع · limits حدود المتابعة · handoff قواعد التحويل للبشر · powers قدراته المفعلة · trial إعدادات التجربة · model نموذج الذكاء المستعمل · branches الفروع · rules قواعد رحلة العميل · hours الدوام (أيامه وساعاته ورسالة خارج الدوام) · channels على أي رقم يرد · guidance قواعد كلامه القصيرة · journeys رحلات المتابعة وخطواتها · materials المواد والأسعار · voice الردّ الصوتي (الوضع والصوت والأصوات المتاحة) · وchannels تشمل aiReplyScope (هل يردّ على العملاء الجدد فقط). بلا section تعيد الأقسام القياسية، والفروع والقواعد تقرأ بقسمها صراحة لأنها قد تكون مئات الصفوف. وترد مع كل حقل قيمه المسموحة.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

الوسيطالنوعمطلوبالوصف
section"persona" | "selling" | "limits" | "handoff" | "powers" | "trial" | "model" | "branches" | "rules" | "hours" | "channels" | "guidance" | "knowledge" | "journeys" | "materials" | "voice"—
curl -X POST https://labeb.app/api/v1/tools/get_labeeb_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"section":"persona"}'
قراءةPOST /api/v1/tools/get_quality_reportتقرير الجودة▾

تقرير جودة المحادثات (تدقيق البوت): درجات المحادثات، النتائج، مستوى الإحباط، الأسئلة المكررة، أبطأ استجابة.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

الوسيطالنوعمطلوبالوصف
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_quality_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"limit":10}'
قراءةPOST /api/v1/tools/get_sales_funnelقمع المبيعات▾

قمعُ المبيعات شهراً بشهر ومجموعُه: جديد · تفاعل · جلسة · تجربة · بانتظار الاعتماد · رابح معتمد · خسارة · مفتوح · الإيراد. التعريفات (نفسُها في صفحة تقارير المبيعات): «جديد» = بطاقةٌ أُنشئت في المدى · «تفاعل» = كتب رسالتين فأكثر · «جلسة» = له موعدٌ أو خُسر بعد الجلسة · «تجربة» = وصل مرحلة التجربة ولا يعني أنه فتح حساباً · «بانتظار الاعتماد» = حُوِّل رابحاً ولم يُعتمد · «رابح معتمد» = اعتمده مدير المبيعات أو المالك، والرابحون قبل ميزة الاعتماد يُحسبون معتمدين · الإيراد = قيمة الباقة بالدولار للمعتمدين فقط (القدامى بلا مبلغ). المدى بتواريخ من/إلى، الافتراضي من أول الشهر حتى اليوم، وأقصاه 400 يوم.

الصلاحية المطلوبة لموظّف الربط: reports.sales.view

الوسيطالنوعمطلوبالوصف
fromDatestring—YYYY-MM-DD — الافتراضي أول الشهر الحالي
toDatestring—YYYY-MM-DD شاملاً — الافتراضي اليوم
sourcestring—meta_ctwa|whatsapp|tenant_data|manual
countrystring—رمز الدولة: SY|TR|JO|LB|IQ|SA|AE|OM|EG
campaignstring—معرّف الحملة أو اسمها
ownerUserIdstring—الموظف المسؤول: معرّفه أو اسمه
curl -X POST https://labeb.app/api/v1/tools/get_sales_funnel \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"fromDate":"…","toDate":"…"}'
قراءةPOST /api/v1/tools/get_sales_loss_reportتقرير الخسارة▾

تقريرُ الخسارة لمن دخلوا في المدى: لكلّ سبب مجموعتُه (out_of_target خارج الاستهداف · silence صمت يُسجَّل آلياً · objection اعتراض صريح · our_fault خسرناه بخطئنا · unspecified) وعددُه ومقارنتُه بالفترة السابقة بنفس الطول، ونقطةُ الخسارة (after_ad بعد رسالة الإعلان فقط · before_price · after_price · after_link بعد رابط التجربة · after_session بعد الجلسة)، وقائمةُ ما خسرناه بخطئنا، واقتباساتُ ما قاله العميل في الاعتراضات. التعريفات (نفسُها في صفحة تقارير المبيعات): «جديد» = بطاقةٌ أُنشئت في المدى · «تفاعل» = كتب رسالتين فأكثر · «جلسة» = له موعدٌ أو خُسر بعد الجلسة · «تجربة» = وصل مرحلة التجربة ولا يعني أنه فتح حساباً · «بانتظار الاعتماد» = حُوِّل رابحاً ولم يُعتمد · «رابح معتمد» = اعتمده مدير المبيعات أو المالك، والرابحون قبل ميزة الاعتماد يُحسبون معتمدين · الإيراد = قيمة الباقة بالدولار للمعتمدين فقط (القدامى بلا مبلغ). المدى بتواريخ من/إلى، الافتراضي من أول الشهر حتى اليوم، وأقصاه 400 يوم.

الصلاحية المطلوبة لموظّف الربط: reports.sales.view

الوسيطالنوعمطلوبالوصف
fromDatestring—YYYY-MM-DD — الافتراضي أول الشهر الحالي
toDatestring—YYYY-MM-DD شاملاً — الافتراضي اليوم
sourcestring—meta_ctwa|whatsapp|tenant_data|manual
countrystring—رمز الدولة: SY|TR|JO|LB|IQ|SA|AE|OM|EG
campaignstring—معرّف الحملة أو اسمها
ownerUserIdstring—الموظف المسؤول: معرّفه أو اسمه
curl -X POST https://labeb.app/api/v1/tools/get_sales_loss_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"fromDate":"…","toDate":"…"}'
قراءةPOST /api/v1/tools/get_staff_performanceأداء الموظفين▾

أداءُ الموظفين في المدى: العملاء · التفاعل · الجلسات · الرابحون · الإيراد · الخسارة وما خسرناه بخطئنا. العميلُ بلا موظف يُنسب لأوّل موظف كتب في محادثته، والباقي صفُّ «لَبيب وحده» (userId = null). سرعةُ الرد = وسيطُ الدقائق من لحظة نداء لَبيب للموظف حتى أوّل ردّه (calls عددُ النداءات · repliedWithin30 · neverReplied) — لا من أوّل رسالة العميل، لأن لَبيب يردّ أولاً. التعريفات (نفسُها في صفحة تقارير المبيعات): «جديد» = بطاقةٌ أُنشئت في المدى · «تفاعل» = كتب رسالتين فأكثر · «جلسة» = له موعدٌ أو خُسر بعد الجلسة · «تجربة» = وصل مرحلة التجربة ولا يعني أنه فتح حساباً · «بانتظار الاعتماد» = حُوِّل رابحاً ولم يُعتمد · «رابح معتمد» = اعتمده مدير المبيعات أو المالك، والرابحون قبل ميزة الاعتماد يُحسبون معتمدين · الإيراد = قيمة الباقة بالدولار للمعتمدين فقط (القدامى بلا مبلغ). المدى بتواريخ من/إلى، الافتراضي من أول الشهر حتى اليوم، وأقصاه 400 يوم.

الصلاحية المطلوبة لموظّف الربط: reports.sales.view

الوسيطالنوعمطلوبالوصف
fromDatestring—YYYY-MM-DD — الافتراضي أول الشهر الحالي
toDatestring—YYYY-MM-DD شاملاً — الافتراضي اليوم
sourcestring—meta_ctwa|whatsapp|tenant_data|manual
countrystring—رمز الدولة: SY|TR|JO|LB|IQ|SA|AE|OM|EG
campaignstring—معرّف الحملة أو اسمها
ownerUserIdstring—الموظف المسؤول: معرّفه أو اسمه
curl -X POST https://labeb.app/api/v1/tools/get_staff_performance \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"fromDate":"…","toDate":"…"}'
قراءةPOST /api/v1/tools/get_weekly_reportقراءة تقرير أسبوعي▾

محتوى تقرير أسبوعي كامل لتلخيصه: إمّا بمعرّفه reportId (من list_weekly_reports)، أو بالنطاق وأوّل يوم في الأسبوع. scope: personal شخصي (scopeUserId اختياري — افتراضياً أنت) · department قسم (scopeDepartment) · company الشركة.

الصلاحية المطلوبة لموظّف الربط: reports.weekly.read.own

الوسيطالنوعمطلوبالوصف
reportIdstring—
scope"personal" | "department" | "company"—
weekStartstring—YYYY-MM-DD
scopeUserIdstring—
scopeDepartmentstring—
curl -X POST https://labeb.app/api/v1/tools/get_weekly_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"reportId":"…","scope":"personal"}'
قراءةPOST /api/v1/tools/get_working_hoursساعات العمل▾

ساعات عمل الشركة والمنطقة الزمنية وإعدادات المواعيد — مرجع لأي تحليل عن زمن الاستجابة.

الصلاحية المطلوبة لموظّف الربط: tenant.settings.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_working_hours \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_automation_rulesقواعد الأتمتة▾

قواعد الأتمتة/التحويل المفعّلة: الاسم والنطاق والحالة والأولوية ومنطق المطابقة — لفهم «لماذا تصرّف النظام هكذا».

الصلاحية المطلوبة لموظّف الربط: tenant.rules.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_automation_rules \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_labeeb_prompt_simulation_conversationsمحادثات لمحاكاة البرومبت▾

المحادثات التي رد عليها لبيب في نطاق زمني (range: today · yesterday · 7d · 24h · 48h · custom مع fromDate/toDate) مع اسم العميل إن عُرف وعدد الأدوار وآخر رسالة — لتختار منها محادثة أو أكثر تمررها في threadKeys لمحاكاة البرومبت عليها بعينها. query للبحث بالاسم أو الرقم.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
range"today" | "yesterday" | "7d" | "24h" | "48h" | "custom"—
fromDatestring—YYYY-MM-DD بساعة الحساب — مع custom
toDatestring—
querystring—
takeinteger—
curl -X POST https://labeb.app/api/v1/tools/list_labeeb_prompt_simulation_conversations \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"range":"today","fromDate":"…"}'
قراءةPOST /api/v1/tools/list_labeeb_rule_suggestionsاقتراحات قواعد لَبيب▾

قواعد تحويل جاهزة لم تُضف بعد لهذه الشركة (مثل: باحث عن عمل ⇒ خسارة، طالب تجربة ⇒ تجريبي): اسمها ونتيجتها ومن أي مرحلة لأي مرحلة وما ترصده وأمثلتها.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_labeeb_rule_suggestions \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_open_escalationsالتحويلات المفتوحة بلا ردّ▾

التحويلات المفتوحة: محادثات حوّلها لَبيب لموظف خلال آخر 72 ساعة ولم يردّ فيها إنسان بعد، الأقدم أولاً — العميل ورقمه والمُسنَد إليه وكم دقيقة ينتظر وآخر ما كتبه وهل صُعّدت للمشرف.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.usage.view

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_open_escalations \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_report_subscriptionsاشتراكات التقارير▾

اشتراكات التقرير الأسبوعي: من يستلم أي نطاق وهل اشتراكه مفعّل.

الصلاحية المطلوبة لموظّف الربط: reports.weekly.subscribe

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_report_subscriptions \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_weekly_reportsالتقارير الأسبوعية▾

التقارير الأسبوعية المولَّدة: النطاق والأسبوع ومتى قُرئت.

الصلاحية المطلوبة لموظّف الربط: reports.weekly.read.own

الوسيطالنوعمطلوبالوصف
scopestring—personal|department|company
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_weekly_reports \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"scope":"…","limit":10}'
تعديلPOST /api/v1/tools/manage_automation_ruleتفعيل/إيقاف قاعدة أتمتة▾

تفعيل قاعدة أتمتة أو إيقافها أو حذفها (id من list_automation_rules). action=set_status مع status: active مفعّلة · trial تجربة · disabled موقوفة · draft مسودّة · archived مؤرشفة (لا تُفعَّل قاعدة بلا محفّز وإجراء). action=delete يحذفها.

الصلاحية المطلوبة لموظّف الربط: tenant.rules.manage

الوسيطالنوعمطلوبالوصف
idstringنعم
action"set_status" | "delete"نعم
status"draft" | "active" | "trial" | "disabled" | "archived"—
curl -X POST https://labeb.app/api/v1/tools/manage_automation_rule \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"id":"…","action":"set_status"}'
تعديلPOST /api/v1/tools/set_labeeb_group_returnضبط رجوع لَبيب للمجموعات▾

ضبط بعد كم دقيقة يرجع لَبيب للردّ بعد تحويل المحادثة لموظف وسكوته: minutes للمجموعات، private_minutes للمحادثات الخاصة (لَبيب بيردّ والإسناد باقي؛ الطلب مع السائق وشكوى «ما وصل/ناقص» بيردّ عليها دائماً). من 0 (لا يرجع) حتى 43200 (30 يوماً). مرّر واحد منهما على الأقل.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
minutesinteger—
private_minutesinteger—
curl -X POST https://labeb.app/api/v1/tools/set_labeeb_group_return \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"minutes":10,"private_minutes":10}'
تعديلPOST /api/v1/tools/set_labeeb_signal_decisionقرار على إشارة لَبيب▾

قرار المدير على إشارة نقص في «حسّن لَبيب» كي لا تعود تظهر كأنّ شيئاً لم يكن. kind: kb_gap سؤال بلا جواب قريب · handoff_skipped نداء موظف لم يقع · failed_question سؤال لم يعرفه · objection اعتراض. key: مفتاح الإشارة كما يظهر (نصّ السؤال أو مفتاح الاعتراض). status: ignored تجاهل · watching راقب · handled عولجت · clear رفع القرار.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
kind"kb_gap" | "handoff_skipped" | "failed_question" | "objection"نعم
keystringنعم
status"ignored" | "watching" | "handled" | "clear"نعم
notestring—
curl -X POST https://labeb.app/api/v1/tools/set_labeeb_signal_decision \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"kind":"kb_gap","key":"…","status":"ignored"}'
تعديلPOST /api/v1/tools/simulate_labeeb_promptبدء محاكاة البرومبت▾

يبدأ محاكاة حقيقية لمسودة برومبت لبيب: يعيد توليد رد لبيب على محادثات العملاء الحقيقية في النطاق (range اليوم/أمس/7d/24h/48h/custom) أو في محادثات بعينها (threadKeys) بالمسودة عبر نفس مسار الإنتاج، ويقارن كل رد جديد بالرد الذي وصل العميل فعلا بمحكم أعمى. **تكلف من رصيد الذكاء الاصطناعي للحساب** — قدرها أولا بـ estimate_labeeb_prompt_simulation وأخبر المستخدم بالتكلفة قبل البدء. لا تحفظ المسودة ولا ترسل شيئا للعملاء. تعمل في الخلفية دقائق؛ اقرأ النتيجة بـ get_labeeb_prompt_simulation.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
draftPromptstringنعم
range"today" | "yesterday" | "7d" | "24h" | "48h" | "custom"—
fromDatestring—YYYY-MM-DD بساعة الحساب — مع custom
toDatestring—
threadKeysstring[]—
maxTurnsinteger—
modelstring—موديل للتجربة بدل موديل لبيب الحالي، بلا أي تغيير على الردود الحية
curl -X POST https://labeb.app/api/v1/tools/simulate_labeeb_prompt \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"draftPrompt":"…"}'
تعديلPOST /api/v1/tools/update_labeeb_settingsتعديل إعدادات لبيب▾

تعديل إعدادات لبيب: مرر section وvalues بالحقول المراد تغييرها فقط — وما لا ترسله لا يمس. persona: displayName tone dialect replyLength disclosure emojiLevel. selling: priceTiming questionDensity. limits: fuMaxPerLead fuQuietStartHour fuQuietEndHour fuRespectOptOut fuSkipWhenAssigned. handoff: staffReplyPauseMinutes (وقفة لبيب بعد رد الموظف بالدقائق، 0 بلا وقفة، للمطعم والمتجر) أو situation ثم isEnabled assignConversation assigneeUserIds assigneeUserIdsPostSale sendReassurance reassuranceText cooldownMinutes dailyCap slaMinutes slaEscalateToUserIds. powers: يلزمه toolKey وisEnabled. trial: replyTriggerEnabled replyTriggerMsgCount successStage successAssign successAssigneeIds. model: modelKey من الكتالوج. hours: isEnabled timezone workingDays (0=الأحد..6=السبت) dayStartHour dayEndHour withinHoursMinutes outsideHoursText. powers للتذكير: toolKey=schedule_reminder مع reminderAssignMode (lead_owner|specific) reminderUserIds reminderNotifyText. channels: instanceId ثم labeebEnabled و/أو aiReplyScope (all · new_only = يردّ على العملاء الجدد فقط). voice: mode (off · voice_only يردّ بصوت على الصوت · always) و/أو voice (مفتاح صوت من القراءة). guidance: add أو removeIndex أو index مع text. knowledge: deleteArticleId. journeys: templateId ثم isActive name stepGoals. materials: quantityMode useDescriptors sendImages أو sourceId مع labeebEnabled intervalMinutes، أو groupId (أو groupName) مع groupVisible لتشغيل مجموعة مواد كاملة بفروعها للبيب أو إخفائها، والإخفاء يسري على ما يصلها لاحقا. branches: بلا id ينشئ فرعا ومعه id يعدله، وحقوله name city phone address workingHours mapsUrl isActive sortOrder notes، والحذف بتمرير id مع delete صواب. rules: بلا id ينشئ قاعدة وتولد بوضع مراقبة ما لم تمرر mode بقيمة active، وحقولها name outcome targetStage fromStage detectDescription examplePhrases counterExamplePhrases priority isActive stopFollowUps sendFarewell successAssign successAssigneeIds، والحذف بتمرير id مع delete صواب. اقرأ الإعدادات أولا لترى القيم المسموحة.

الصلاحية المطلوبة لموظّف الربط: tenant.ai.manage

الوسيطالنوعمطلوبالوصف
section"persona" | "selling" | "limits" | "handoff" | "powers" | "trial" | "model" | "branches" | "rules" | "hours" | "channels" | "guidance" | "knowledge" | "journeys" | "materials" | "voice"نعم
valuesobjectنعم
curl -X POST https://labeb.app/api/v1/tools/update_labeeb_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"section":"persona","values":"…"}'

عامّ47

تعديلPOST /api/v1/tools/alert_restaurant_driverتنبيه سائق▾

تنبيه سائق بإشعار التطبيق: kind=urge مع orderId لاستعجال طلب معه، أو kind=return ليرجع. driverId من get_restaurant_drivers.

الصلاحية المطلوبة لموظّف الربط: restaurant.orders.edit.all

الوسيطالنوعمطلوبالوصف
driverIdstring—
kind"urge" | "return"—
orderIdstring—
curl -X POST https://labeb.app/api/v1/tools/alert_restaurant_driver \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"driverId":"…","kind":"urge"}'
تعديلPOST /api/v1/tools/apply_restaurant_menu_importاعتماد المنيو المراجع▾

اعتماد المسودة بعد مراجعة الأصناف والأسعار والصور مع المالك. request نفس جسم المعاينة تماماً مع previewToken. mode=merge|replace وcurrency وitems وreplaceImages مرتبطة بالمعاينة؛ أي تغيير يتطلب plan جديداً.. يتطلب صلاحيتي إضافة وتعديل المنيو، ويعيد مهمة بنتيجتها، لا يعيد قراءة الرابط.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.edit.all

الوسيطالنوعمطلوبالوصف
requestobjectنعم
curl -X POST https://labeb.app/api/v1/tools/apply_restaurant_menu_import \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"request":"…"}'
تعديلPOST /api/v1/tools/cancel_restaurant_menu_importإلغاء استيراد المنيو▾

إلغاء مهمة الاستيراد الجارية؛ لا يحذف أصنافاً حفظت سابقاً ولا يولد حدث تغيير منيو دون حفظ.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.add.all

الوسيطالنوعمطلوبالوصف
jobIdstringنعم
curl -X POST https://labeb.app/api/v1/tools/cancel_restaurant_menu_import \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"jobId":"…"}'
تعديلPOST /api/v1/tools/complete_restaurant_orderتسليم وقبض طلب▾

تسليم الطلب وتسجيل المقبوض الفعلي بعملية واحدة. orderId وreceipt={requestId,amountReceived,method:cash|transfer,note,changeReturned,keepAsTipReason}. الزيادة على الإجمالي تحتاج changeReturned (الباقي المُعاد) أو keepAsTipReason. بعملة الطلب؛ لا تكرر القبض عند إعادة المحاولة، استعمل نفس requestId. التحويل يحتاج مرجعاً والصفر يحتاج سبباً إذا غير مدفوع.

الصلاحية المطلوبة لموظّف الربط: restaurant.collection.edit.all

الوسيطالنوعمطلوبالوصف
orderIdstringنعم
receiptobjectنعم
curl -X POST https://labeb.app/api/v1/tools/complete_restaurant_order \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"orderId":"…","receipt":"…"}'
تعديلPOST /api/v1/tools/connect_store_productsربط منتجات المتجر▾

ربط منتجات المتجر من رابط موقعه وتطبيقها فوراً، مع فاصل المزامنة التلقائية. المنتج الذي يختفي من الموقع يُطفأ ولا يُحذف. بعد المعاينة وموافقة المالك فقط.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.edit.all

الوسيطالنوعمطلوبالوصف
urlstringنعم
interval_minutes0 | 15 | 30 | 60 | 360 | 1440نعم0 = تحديث يدوي فقط · 15 · 30 دقيقة · 60 ساعة · 360 ست ساعات · 1440 يومياً
curl -X POST https://labeb.app/api/v1/tools/connect_store_products \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"url":"…","interval_minutes":0}'
إضافةPOST /api/v1/tools/create_meetingإنشاء اجتماع مع عميل▾

إنشاء اجتماع صوت/فيديو مع عميل (leadId لعميل محتمل أو postSaleId لعميل ما بعد البيع) بموعدٍ ومدة، وإرسال رابط الدعوة له على واتساب (sendLink، الافتراضي نعم؛ خارج نافذة 24 ساعة يُرسَل بقالب الدعوة المعتمد). scheduledAt بتوقيت الشركة مثل 2026-10-25T15:30 — بدونه يبدأ فوراً.

الصلاحية المطلوبة لموظّف الربط: meetings.create

الوسيطالنوعمطلوبالوصف
leadIdstring—العميل المحتمل (معرّف)
postSaleIdstring—عميل ما بعد البيع (معرّف)
scheduledAtstring—الموعد بتوقيت الشركة
durationMinutesinteger—المدة بالدقائق
titlestring—العنوان
sendLinkboolean—إرسال الرابط للعميل
curl -X POST https://labeb.app/api/v1/tools/create_meeting \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"leadId":"…","postSaleId":"…"}'
إضافةPOST /api/v1/tools/create_restaurant_menuإضافة للمنيو▾

إضافة صنف target=item مع item={name,groupId,newGroupName,price,description,isAvailable,publicVisible,options,special,aliases} أو قسم target=group مع name. نفس شروط المنيو اليدوي. special=true «إضافة خاصة» (الاستيراد والمقارنة مع موقع المطعم ما بيلمسوها) · publicVisible=false «لَبيب بس» (مخفي من صفحة المنيو العامة ولَبيب بيعرفه وبينطلب) · aliases أسماء تانية للصنف بيفهمها لَبيب (ما بتتكرّر على صنفين).

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.add.all

الوسيطالنوعمطلوبالوصف
target"item" | "group"نعم
itemobject—
namestring—
curl -X POST https://labeb.app/api/v1/tools/create_restaurant_menu \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"target":"item"}'
إضافةPOST /api/v1/tools/create_restaurant_orderإضافة طلب مطعم▾

تسجيل طلب هاتفي: phone، order مطابق OrderDraftInput في API. لا تعدّل طلباً قيد التحضير.

الصلاحية المطلوبة لموظّف الربط: restaurant.orders.add.all

الوسيطالنوعمطلوبالوصف
phonestringنعم
orderobjectنعم
curl -X POST https://labeb.app/api/v1/tools/create_restaurant_order \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"phone":"…","order":"…"}'
حذفPOST /api/v1/tools/delete_restaurant_menuحذف من المنيو▾

حذف صنف أو قسم بالمعرف. لا يحذف بيانات الطلبات القديمة. الإضافة الخاصة بتتأرشف وبترجع بـupdate_restaurant_menu restore=true.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.delete.all

الوسيطالنوعمطلوبالوصف
target"item" | "group"نعم
idstringنعم
curl -X POST https://labeb.app/api/v1/tools/delete_restaurant_menu \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"target":"item","id":"…"}'
قراءةPOST /api/v1/tools/find_toolsبحث عن أدوات▾

ابحث عن أدوات إضافية في النظام بالعربية حين لا تجد بين أدواتك الحالية ما ينجز الطلب (ما بعد البيع، الرواتب، المنتجات، قواعد الأتمتة، الفرص، الأداء، الهيكل الإداري…). الأدوات المطابقة **تُتاح لك فوراً** فاستدعِها في ردّك التالي. لا تستدعِها إن كانت أدواتك الحالية تكفي.

الوسيطالنوعمطلوبالوصف
querystringنعموصف ما تريد فعله بالعربية
curl -X POST https://labeb.app/api/v1/tools/find_tools \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"query":"…"}'
قراءةPOST /api/v1/tools/get_advisor_self_reportمراجعة ذاتية▾

تقرير المستشار عن نفسه خلال فترة: عدد الطلبات وأزمنتها وتكلفتها، الأدوات التي فشلت ولماذا، حالات المهام، ونسبة الملاحظات التي وسمها المستخدم «غير دقيقة» (مقياس دقّتي الفعلي).

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_advisor_self_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_ai_usage_reportتقرير استهلاك الذكاء▾

تقرير استهلاك الذكاء الاصطناعي للشركة خلال فترة: الإجمالي وبحسب الوكيل. days الافتراضي 30.

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_ai_usage_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_csat_reportعرض تقرير رضا العملاء▾

رضا العملاء في فترة: كم سُئل وكم أجاب، متوسط التقييم من 10، الراضون وغير الراضين، أكثر المشاكل تكراراً، ولكل موظف أرقامه، وآخر تقييمات العملاء (الأحدث أولاً). من لا يملك «الكل» يرى تقييمات عملائه هو فقط.

الصلاحية المطلوبة لموظّف الربط: csat.view.own

الوسيطالنوعمطلوبالوصف
daysinteger—آخر كم يوماً (افتراضياً 30)
curl -X POST https://labeb.app/api/v1/tools/get_csat_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_csat_settingsإعدادات قياس الرضا▾

إعدادات قياس رضا العملاء: هل هو مفعّل، ومتى يُسأل العميل (بعد موعد قبل البيع · عند الربح · عند الخسارة اليدوية · بعد حلّ تذكرة · بعد موعد ما بعد البيع)، وفترة التهدئة، وتأخير السؤال بعد الموعد، ونصّ السؤال، وحالة قالب التقييم على كل رقم واتساب.

الصلاحية المطلوبة لموظّف الربط: csat.settings.manage

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_csat_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_follow_up_queueطابور المتابعات▾

طابور متابعاتي المستحقّة التي تحتاجني (تذكير أو نافذة مسكّرة) مرتّباً بالسخونة: من ردّ عليّ أوّلاً، ثم فرصة الردّ خلال يوم (chance)، والمتأخّر الأقدم يصعد تدريجياً — مع سببٍ قصير لكلّ عميل.

الصلاحية المطلوبة لموظّف الربط: followups.view.own

الوسيطالنوعمطلوبالوصف
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/get_follow_up_queue \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"limit":10}'
قراءةPOST /api/v1/tools/get_my_restaurant_deliveryطلباتي والتوصيل▾

حالة السائق الحالي وطلباته وحركات الكاش الخاصة به. days لسجل الفترة، لا تقبل هوية سائق آخر.

الصلاحية المطلوبة لموظّف الربط: restaurant.delivery.view.own

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_my_restaurant_delivery \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_restaurant_customersعملاء المطعم▾

دليل عملاء المطعم ببحث وصفحات. phone يرجع بطاقة وطلبات عميل محدد، بلا اشتراك CRM.

الصلاحية المطلوبة لموظّف الربط: restaurant.orders.view.all

الوسيطالنوعمطلوبالوصف
searchstring—
pageinteger—
phonestring—
curl -X POST https://labeb.app/api/v1/tools/get_restaurant_customers \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"search":"…","page":10}'
قراءةPOST /api/v1/tools/get_restaurant_driversسائقو المطعم▾

حالة سائقي المطعم الآن: متاح وتوصيل وعودة وخارج الدوام.

الصلاحية المطلوبة لموظّف الربط: restaurant.orders.edit.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_restaurant_drivers \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_restaurant_kitchenإعدادات المطبخ▾

إعدادات تشغيل وطباعة المطبخ فقط بلا تعليمات المساعد أو بيانات التحويل.

الصلاحية المطلوبة لموظّف الربط: restaurant.kitchen.view.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_restaurant_kitchen \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_restaurant_menuعرض منيو المطعم▾

منيو المطعم: الأقسام بترتيبها، ولكل صنف السعر والوصف وهل «خلص اليوم» والأحجام والإضافات بأسعارها، وisSpecial «إضافة خاصة» (ما بيلمسها الاستيراد من الموقع) وpublicVisible (false = «لَبيب بس») وaliases أسماءه التانية. archived = الإضافات الخاصة المحذوفة (بترجع).

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.view.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_restaurant_menu \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_restaurant_menu_importحالة استيراد المنيو▾

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

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.add.all

الوسيطالنوعمطلوبالوصف
jobIdstringنعم
curl -X POST https://labeb.app/api/v1/tools/get_restaurant_menu_import \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"jobId":"…"}'
قراءةPOST /api/v1/tools/get_restaurant_menu_site_diffsفروقات منيو الموقع▾

فروقات الأسعار والأصناف بين منيو النظام وموقع المطعم، ورابط الموقع وآخر مقارنة. منيو النظام هو المرجع ولا يتغير سعر تلقائياً.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.view.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_restaurant_menu_site_diffs \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_restaurant_reportعرض تقرير المطعم▾

تقرير المطعم لآخر days يوماً (افتراضياً 7): عدد الطلبات والمسلَّم والملغي والمبيعات ومتوسط الطلب · كم طلب جاء من لَبيب وكم من الموظفين وكم مسودّة لم تكتمل · متوسط دقائق التأكيد والتحضير والتوصيل والكلّي وعدد المتأخّر · المبيعات يوماً بيوم وساعات الذروة · الأكثر مبيعاً · السائقون (المسلَّم والوقت والكاش غير المسلَّم) · طرق الدفع · التقييم وآخر التقييمات المنخفضة · وللمتجر: linkShares روابط المنتجات التي أرسلها لَبيب (= طلب تمّ في وضع الرابط أوّلاً) وtopLinked أكثرها، وbyCampaign لكل حملة: المحادثات الجديدة والروابط والطلبات والمسلَّم والمبيعات.

الصلاحية المطلوبة لموظّف الربط: restaurant.reports.view.all

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_restaurant_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_restaurant_satisfactionرضا زبائن المطعم▾

رضا زبائن المطعم من تقييمات الطلبات حصراً، بلا قبل/بعد البيع أو موظفين.

الصلاحية المطلوبة لموظّف الربط: restaurant.reports.view.all

الوسيطالنوعمطلوبالوصف
daysinteger—
pageinteger—
lowOnlyboolean—
curl -X POST https://labeb.app/api/v1/tools/get_restaurant_satisfaction \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10,"page":10}'
قراءةPOST /api/v1/tools/get_restaurant_settingsعرض إعدادات المطعم▾

إعدادات المطعم: تأكيد الطلب (staff يدوي · auto تلقائي) · التوصيل والاستلام · مناطق التوصيل وأجرتها · الحدّ الأدنى · طرق الدفع وبيانات التحويل · توزيع الطلبات على السائقين (manager المدير · first أوّل من يقبل · auto تلقائي) · طريقة الموقع (pin · live · text) · وقت التحضير · ضغط المطبخ · إيقاف الطلبات · سؤال التقييم · العملة (currency — تغييرها ينقل كل أسعار المنيو لها) · صور الأصناف على واتساب (imagesMode: always دائماً · on_request حسب طلب الزبون · never لا) · رابط المنيو العامّ (publicMenuEnabled). وللمتجر الإلكتروني (activity=store): storeOrderMode (labeeb لَبيب يكمل الطلب · link_first يرسل رابط المنتج أوّلاً ثمّ يكمل إن تعثّر الزبون) · freeDeliveryOver توصيل مجاني فوق مبلغ (0 يلغيه) · carriers شركات الشحن · storeLinkUrl الرابط اللي بيبعته لَبيب لمّا الزبون يطلب رابط المتجر (موقع المتجر الأصلي؛ "" = صفحة لَبيب). وطلبات صفحة المنتجات العامّة webOrderChannel (whatsapp رسالة واتساب · platform تنزل بالمنصّة مباشرة · both الزبون يختار).

الصلاحية المطلوبة لموظّف الربط: restaurant.settings.view.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_restaurant_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_store_products_sourceحالة ربط منتجات المتجر▾

حالة ربط منتجات المتجر الإلكتروني أو منيو المطعم من رابط موقعه: الرابط والمنصّة (tajir · shopify · woocommerce) وعدد المنتجات ووقت آخر تحديث ونتيجته وفاصل المزامنة.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.view.all

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_store_products_source \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/get_usage_by_userاستخدام النظام لكل موظف▾

استخدام النظام لكل موظف في فترة: كم شاشة فتح وكم مرة وآخر دخول وأكثر الشاشات استخداماً، ومن من الموظفين النشطين لم يفتح النظام إطلاقاً.

الصلاحية المطلوبة لموظّف الربط: admin.usage.read

الوسيطالنوعمطلوبالوصف
daysinteger—افتراضياً 30
curl -X POST https://labeb.app/api/v1/tools/get_usage_by_user \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_usage_summaryاستعمال الشاشات▾

أكثر شاشات النظام فتحاً في مؤسستي خلال فترة (الافتراضي 30 يوماً): المسار وعدد الفتحات وعدد المستخدمين المختلفين وآخر مرّة.

الصلاحية المطلوبة لموظّف الربط: admin.usage.read

الوسيطالنوعمطلوبالوصف
daysinteger—
curl -X POST https://labeb.app/api/v1/tools/get_usage_summary \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءةPOST /api/v1/tools/get_workspace_overviewنظرة عامة▾

نظرة عامة على وضع المستخدم الآن: عدّادات الأهداف السنوية والشهرية والمشاريع النشطة ومهامه المفتوحة، مع التاريخ الحالي.

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/get_workspace_overview \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
قراءةPOST /api/v1/tools/list_meetingsعرض الاجتماعات وملخّصاتها▾

اجتماعات الصوت والفيديو مع العملاء: الموعد والحالة (scheduled مجدول · live جارٍ · ended انتهى · cancelled ملغى) والعميل والمضيف والمدة، ورابط الدخول، وملخّص الاجتماع حين سُجّل وفُرّغ. من لا يملك «الكل» يرى اجتماعاته فقط.

الصلاحية المطلوبة لموظّف الربط: meetings.view.own

الوسيطالنوعمطلوبالوصف
status"scheduled" | "live" | "ended" | "cancelled"—
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_meetings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"status":"scheduled","limit":10}'
قراءةPOST /api/v1/tools/list_restaurant_ordersعرض طلبات المطعم▾

طلبات المطعم: الرقم والحالة (draft استلام الطلب: لَبيب أو الموظف يتفاهم مع الزبون · new جديد بانتظار التأكيد · preparing قيد التحضير · ready جاهز · delivering قيد التوصيل · delivered تم التسليم · cancelled ملغي) والزبون ورقمه والأصناف والمجموع والدفع والسائق والأوقات. scope=board الطلبات المفتوحة واليوم (الافتراضي) · history سجلّ آخر days يوماً.

الصلاحية المطلوبة لموظّف الربط: restaurant.orders.view.all

الوسيطالنوعمطلوبالوصف
scope"board" | "history"—
daysinteger—
statusstring—
qstring—رقم الطلب أو اسم الزبون أو رقمه
limitinteger—
curl -X POST https://labeb.app/api/v1/tools/list_restaurant_orders \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"scope":"board","days":10}'
قراءةPOST /api/v1/tools/list_usersقائمة الفريق▾

قائمة مستخدمي النظام (الفريق) بالمعرّف والاسم — استخدمها للحصول على userId قبل إسناد مهمة.

بلا وسائط — أرسل {}.

curl -X POST https://labeb.app/api/v1/tools/list_users \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{}'
تعديلPOST /api/v1/tools/manage_sales_opportunityإدارة فرصة بيعية▾

الفرص البيعية (لوحة المبيعات). action: create إنشاء (title + value، واختيارياً assignedTo وexpectedCloseDate وnotes) · update تعديل الحقول (opportunityId) · stage نقل المرحلة (stage: New · Contacted · Proposal · Negotiation · Won · Lost مع lossReason للخسارة). من لا يملك «كل الفرص» يعدّل فرصه فقط. للعرض list_sales_opportunities.

الصلاحية المطلوبة لموظّف الربط: sales.opportunity.update.own

الوسيطالنوعمطلوبالوصف
action"create" | "update" | "stage"نعمالإجراء
opportunityIdstring—الفرصة (معرّف)
titlestring—العنوان
valuenumber—القيمة
assignedTostring—المسؤول (معرّف)
expectedCloseDatestring—تاريخ الإغلاق المتوقّع yyyy-MM-dd
notesstring—ملاحظات
stage"New" | "Contacted" | "Proposal" | "Negotiation" | "Won" | "Lost"—المرحلة
lossReasonstring—سبب الخسارة
curl -X POST https://labeb.app/api/v1/tools/manage_sales_opportunity \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"create"}'
قراءةPOST /api/v1/tools/plan_restaurant_menu_importمعاينة تغييرات المنيو▾

معاينة مقارنة قبل حفظ المنيو. request={items:[{key,name,group,price,description,options,imageRef,existingId,convertSpecial}],mode:merge|replace,currency,replaceImages:false}. الدمج يحتفظ بغير المذكور؛ الاستبدال يؤرشف غير المذكور من الأصناف اليدوية ولا يحذف الطلبات أو الأصناف الخارجية. الإضافات الخاصة ما بتتأثر أبداً (action=special)، وإذا الموقع فيه نفس الإضافة الخاصة (action=special_match) بتضل خاصة إلا إذا convertSpecial=true على صفها (سعرها من الموقع وأسماؤها التانية بتضل) — اسأل المالك. يعيد previewToken وفروقاً مفصلة؛ أطلع المالك عليها قبل apply.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.edit.all

الوسيطالنوعمطلوبالوصف
requestobjectنعم
curl -X POST https://labeb.app/api/v1/tools/plan_restaurant_menu_import \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"request":"…"}'
قراءةPOST /api/v1/tools/preview_store_productsمعاينة منتجات المتجر▾

يقرأ موقع المتجر ويقارنه بالمنتجات الحالية دون حفظ: كم منتج جديد وكم تغيّر سعره أو كميته أو صورته وكم اختفى، مع عيّنة. url فارغ = رابط المتجر المربوط. اعرض النتيجة على المالك قبل connect.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.edit.all

الوسيطالنوعمطلوبالوصف
urlstring—
curl -X POST https://labeb.app/api/v1/tools/preview_store_products \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"url":"…"}'
قراءةPOST /api/v1/tools/rememberحفظ في الذاكرة▾

احفظ حقيقة أو قراراً أو تفضيلاً **دائماً** عن المستخدم أو الشركة ذكره في المحادثة وسينفع في محادثات قادمة (مثل: «قرّرنا تأجيل كذا»، «أحمد يفضّل التقارير مختصرة»). لا تحفظ تفاصيل عابرة ولا أرقاماً متغيّرة ولا ما يمكن قراءته بالأدوات. جملة واحدة موجزة.

الوسيطالنوعمطلوبالوصف
kindstringنعمfact|decision|preference
textstringنعم
curl -X POST https://labeb.app/api/v1/tools/remember \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"kind":"…","text":"…"}'
إرسالPOST /api/v1/tools/send_csat_requestطلب تقييم رضا▾

طلب تقييم رضا الآن من عميل محدّد (بعد تذكرة أو موعد أو لعميل محتمل/ما بعد البيع) عبر واتساب. مرّر واحداً: ticketId · appointmentId · postSaleId · leadId. يعيد سبب عدم الإرسال إن لم يُرسَل (already_pending طلبٌ معلّق · already_asked سُئل مؤخراً · disabled القياس مطفأ · no_template لا قالب · channel_down القناة مقطوعة).

الصلاحية المطلوبة لموظّف الربط: csat.add.own

الوسيطالنوعمطلوبالوصف
ticketIdstring—التذكرة (معرّف)
appointmentIdstring—الموعد (معرّف)
postSaleIdstring—عميل ما بعد البيع (معرّف)
leadIdstring—العميل المحتمل (معرّف)
curl -X POST https://labeb.app/api/v1/tools/send_csat_request \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"…","appointmentId":"…"}'
تعديلPOST /api/v1/tools/set_menu_item_availabilityتوفّر صنف بالمنيو▾

تعليم صنف «خلص اليوم» (available=false) أو «رجع» (available=true) — لَبيب يعتذر عن الخالص فوراً.

الصلاحية المطلوبة لموظّف الربط: restaurant.availability.edit.all

الوسيطالنوعمطلوبالوصف
itemstringنعماسم الصنف أو معرّفه
availablebooleanنعم
curl -X POST https://labeb.app/api/v1/tools/set_menu_item_availability \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"item":"…","available":true}'
تعديلPOST /api/v1/tools/start_restaurant_menu_importقراءة منيو للاستيراد▾

قراءة منيو المطعم إلى مسودة للمراجعة دون اعتماده. url يستخدم نفس حارس الروابط؛ أو files:[{fileName,contentType,base64}] حتى 8MB بعد فك الترميز. للملفات الأكبر استخدم POST /api/restaurant/menu/import/files multipart (حدود الخدمة الأصلية). ترجع jobId وتُقرأ النتيجة بأداة get_restaurant_menu_import. لا حفظ قبل apply.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.add.all

الوسيطالنوعمطلوبالوصف
urlstring—
filesobject[]—
curl -X POST https://labeb.app/api/v1/tools/start_restaurant_menu_import \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"url":"…","files":[]}'
تعديلPOST /api/v1/tools/sync_store_productsتحديث منتجات المتجر▾

action=sync تحديث المنتجات الآن من الموقع المربوط · interval تغيير فاصل المزامنة (interval_minutes) · disconnect فكّ الربط (المنتجات تختفي عن لَبيب والطلبات القديمة تبقى).

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.edit.all

الوسيطالنوعمطلوبالوصف
action"sync" | "interval" | "disconnect"نعم
interval_minutes0 | 15 | 30 | 60 | 360 | 1440—0 = تحديث يدوي فقط · 15 · 30 دقيقة · 60 ساعة · 360 ست ساعات · 1440 يومياً
curl -X POST https://labeb.app/api/v1/tools/sync_store_products \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"sync"}'
تعديلPOST /api/v1/tools/update_csat_settingsتعديل إعدادات قياس الرضا▾

تعديل إعدادات قياس الرضا — مرّر ما تريد تغييره فقط: enabled، onPresaleAppointment، onWon، onLostManual، onPostsaleTicket، onPostsaleAppointment، cooldownDays (ألّا يُسأل العميل نفسه قبل N يوماً)، appointmentDelayMinutes، questionText (فارغ = النصّ الافتراضي).

الصلاحية المطلوبة لموظّف الربط: csat.settings.manage

الوسيطالنوعمطلوبالوصف
enabledboolean—تفعيل القياس
onPresaleAppointmentboolean—بعد موعد قبل البيع
onWonboolean—عند الربح
onLostManualboolean—عند الخسارة اليدوية
onPostsaleTicketboolean—بعد حلّ تذكرة
onPostsaleAppointmentboolean—بعد موعد ما بعد البيع
cooldownDaysinteger—أيام التهدئة
appointmentDelayMinutesinteger—تأخير السؤال بعد الموعد
questionTextstring—نصّ السؤال
curl -X POST https://labeb.app/api/v1/tools/update_csat_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"onPresaleAppointment":true}'
تعديلPOST /api/v1/tools/update_my_restaurant_deliveryتحديث توصيلي▾

إجراءات السائق لنفسه: checkin مع lat/lng الفعليين، off، start، reorder مع ids، accept أو arrived مع orderId. remind_customer مع orderId يذكّر الزبون بعد إشعار الوصول (60 ثانية بين كل تذكير وتذكيران فقط). complete يتطلب orderId وreceipt={requestId,amountReceived,method:cash|transfer,note,changeReturned,keepAsTipReason}. الزيادة على الإجمالي تحتاج changeReturned (الباقي المُعاد) أو keepAsTipReason. القبض بعملة الطلب فقط؛ الصفر يحتاج سبباً إذا عليه متبق، والتحويل يحتاج مرجعاً. أعد نفس requestId والبيانات عند المحاولة. arrived يرسل إشعاراً حقيقياً للزبون.

الصلاحية المطلوبة لموظّف الربط: restaurant.delivery.edit.own

الوسيطالنوعمطلوبالوصف
action"checkin" | "off" | "start" | "reorder" | "accept" | "arrived" | "complete"نعم
orderIdstring—
idsstring[]—
latnumber—
lngnumber—
receiptobject—
curl -X POST https://labeb.app/api/v1/tools/update_my_restaurant_delivery \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"checkin"}'
تعديلPOST /api/v1/tools/update_restaurant_kitchenضغط المطبخ▾

تحديد ضغط المطبخ بالدقائق (0 إلغاء) دون تعديل إعدادات الإدارة.

الصلاحية المطلوبة لموظّف الربط: restaurant.kitchen.edit.all

الوسيطالنوعمطلوبالوصف
minutesintegerنعم
curl -X POST https://labeb.app/api/v1/tools/update_restaurant_kitchen \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"minutes":10}'
تعديلPOST /api/v1/tools/update_restaurant_menuتعديل المنيو▾

تعديل صنف/قسم أو ترتيبه. target=item|group، id مع item أو name، أو ids للترتيب الكامل. الأسعار المدعومة من برنامج خارجي تُعدّل في مصدرها؛ قسم صنفٍ من مصدر يُغيَّر بـgroupId أو newGroupName ويثبت على الاختيار، وgroupFromSource=true يرجّع قسم المصدر. item.aliases (أسماء تانية لأي صنف) وitem.special وitem.publicVisible متل الإضافة؛ ما بتنبعت = بتضل كما هي. special=true|false مع id بلا item يعلّم الصنف «إضافة خاصة» أو يرجّعه عادي بضغطة، وrestore=true مع id يرجّع إضافة خاصة محذوفة (الحذف بيأرشفها).

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.edit.all

الوسيطالنوعمطلوبالوصف
target"item" | "group"نعم
idstring—
itemobject—
namestring—
idsstring[]—
specialboolean—
restoreboolean—
curl -X POST https://labeb.app/api/v1/tools/update_restaurant_menu \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"target":"item"}'
تعديلPOST /api/v1/tools/update_restaurant_menu_site_diffsقرار فرق منيو الموقع▾

action=set_url مع url لضبط رابط منيو الموقع (فارغ يلغيه) · compare مقارنة الآن بلا كلفة ذكاء · apply مع id لاعتماد سعر الموقع لهذا الفرق · ignore مع id لتجاهله.

الصلاحية المطلوبة لموظّف الربط: restaurant.menu.edit.all

الوسيطالنوعمطلوبالوصف
action"set_url" | "compare" | "apply" | "ignore"نعم
urlstring—
idstring—
curl -X POST https://labeb.app/api/v1/tools/update_restaurant_menu_site_diffs \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"set_url"}'
تعديلPOST /api/v1/tools/update_restaurant_orderتحريك طلب مطعم▾

dismiss_receipt يرفض إيصالاً غير مؤكد وnote سبب إلزامي. resolve_delivery_dispute يغلق بلاغ عدم الاستلام بعد المراجعة، note سبب/نتيجة إلزامية ولا يغيّر التسليم أو المال. تحريك طلب مطعم. collect مع collection={requestId,lines:[{currency,amount,method:cash|transfer,kind:received|returned}],note} — method وkind إلزاميان، وكاش على طلب تحويل يحتاج note. settle مع driver_user_id وsettlement={requestId,currency,amount,note,orderIds}. مرر requestId نفسه عند إعادة المحاولة. confirm تأكيد ودخول المطبخ · ready جاهز · out_for_delivery طلع مع السائق · delivered تم التسليم (cash_collected المبلغ المستلم نقداً) · cancel إلغاء (note السبب يصل الزبون) · assign_driver إسناد سائق (driver_user_id) · mark_paid تأكيد الدفع · payment_to_cash إرجاع طلب تحويل غير مدفوع إلى كاش · set_eta تعديل الوقت المتوقّع (minutes) · ship شحن طلب المتجر مع شركة توصيل (carrier إلزامي · tracking_number رقم التتبّع) بدل السائق، أو تحديث رقم التتبّع وهو بالطريق. الزبون تصله رسالة واتساب بالحالة الجديدة. set_payment_terms يغيّر طريقة الدفع (payment_method: cash · transfer_now · transfer_on_delivery من المفعّل بالإعدادات) و/أو العملة (currency) قبل أي دفع، والعملة تعيد تسعير الطلب كله والزبون يوصله الحساب الجديد. to_pickup يحوّل طلب توصيل ما طلع لسا إلى استلام من المطعم (ينشال عن السائق، والأجرة تنلغى إلا مع keep_fee=true). waive_delivery_fee يلغي أجرة التوصيل قبل أي دفع. to_delivery يحوّل طلب استلام ما طلع لسا إلى توصيل (zone المنطقة، أو fee يدوياً بلا مناطق) ويأخذ آخر موقع بعته الزبون؛ بعدها assign_driver.

الصلاحية المطلوبة لموظّف الربط: restaurant.orders.edit.all

الوسيطالنوعمطلوبالوصف
orderstringنعمرقم الطلب (مثل 12) أو معرّفه
action"confirm" | "ready" | "out_for_delivery" | "delivered" | "cancel" | "assign_driver" | "mark_paid" | "payment_to_cash" | "set_payment_terms" | "to_pickup" | "to_delivery" | "waive_delivery_fee" | "dismiss_receipt" | "set_eta" | "resolve_delivery_dispute" | "collect" | "settle" | "ship"نعم
amountnumber—mark_paid لطلب تحويل: المبلغ كما بالإيصال
transaction_refstring—mark_paid لطلب تحويل: رقم العملية من الإيصال، إلزامي
notestring—
keep_feeboolean—
zonestring—منطقة التوصيل (to_delivery)
feenumber—أجرة توصيل يدوية بلا مناطق (to_delivery)
payment_method"cash" | "transfer_now" | "transfer_on_delivery"—
currencystring—رمز العملة كما بالإعدادات
carrierstring—
tracking_numberstring—
driver_user_idstring—
minutesinteger—
cash_collectednumber—
collectionobject—
settlementobject—
curl -X POST https://labeb.app/api/v1/tools/update_restaurant_order \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"order":"…","action":"confirm"}'
تعديلPOST /api/v1/tools/update_restaurant_settingsتعديل إعدادات المطعم▾

تعديل إعدادات المطعم — invoiceRounding=[{currency,mode:none|up|down|nearest,step}] تقريب إجمالي الفاتورة لكل عملة؛ zones[].boundary=[{latitude,longitude}] حدود المنطقة على الخريطة (3 نقاط فأكثر) فتُحسب أجرتها من موقع الزبون؛ zones[].verify={radiusMeters,nearRestaurant,places:[{name,latitude,longitude}]} لمنطقة لا تُعتمد إلا إذا موقع الزبون عند أماكنها أو جانب المطعم؛ ruleEdits=[{key,text,deleted}] القائمة الكاملة للقواعد المحفوظة المعدّلة أو المحذوفة (المفاتيح من orderRules في get_restaurant_settings، والمقفولة ترفض، وما غاب يرجع أصلياً)؛ customerNotifications={enabled,events:{received|preparing|pickup_ready|dispatched|arrival|delivered|cancelled|eta_updated:{enabled,template}},ratingTemplate} لإشعارات العملاء؛ مفاتيح ورسائل الحالة لا توقف الرد الحواري المعتاد، والتقييم بمفتاح ratingEnabled وratingDelayMinutes. متغيرات النص {order_number} و{customer_name}، وللتحضير/تحديث الوقت {eta_minutes}، وللتسليم {payment_summary} من سجل القبض. مرّر الحقول المراد تغييرها فقط بنفس أسماء get_restaurant_settings (مثل confirmMode · prepMinutes · paymentMethods · zones · dispatchMode · locationMode · ordersPaused · minOrder · transferInfo · currency · imagesMode · publicMenuEnabled). print={kitchen:{fields:{number:{scale:1.4,bold:true,align:center,spacing:8}}}} لتنسيق الطباعة؛ kitchen وreceipt مستقلان، scale من0.5 إلى2 وalign=start|center|end وspacing من0 إلى32 بكسل، وx/y من-60 إلى60. تعديل حقل يحتفظ ببقية التصميم. collection={baseCurrency,currencies:[{currency,rate,decimals,quoteMode,quoteValue}],delayGraceMinutes} لتسعير متعدد العملات؛ التحصيل بعملة الطلب فقط (كل 1 أجنبية=rate أساسية؛ لا تغيير للعملة الأساسية بعد البيع). busy_minutes يعلّم المطبخ مضغوطاً لدقائق (0 إلغاء).

الصلاحية المطلوبة لموظّف الربط: restaurant.settings.edit.all

الوسيطالنوعمطلوبالوصف
changesobject—الحقول المراد تغييرها
busy_minutesinteger—
collectionobject—
curl -X POST https://labeb.app/api/v1/tools/update_restaurant_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"changes":"…","busy_minutes":10}'

اسأل لَبيب من تطبيقك — والجواب في نفس الطلب

أنشئ «قناة الموقع» بنوع الربط بالمفتاح، وخذ مفتاح الخادم (يبدأ بـ wk_sk_). تطبيقك يرسل سؤال المستخدم وينتظر ثوانيَ فيأخذ جواب لَبيب من معرفة شركتك. ويمكن إخفاء هذه المحادثات عن صندوق الوارد، وما لا يعرفه لَبيب يُسجَّل في «أسئلة بلا جواب» لتعلّمه إياه.

طلب واحد

POST https://labeb.app/api/web-chat/ask
Content-Type: application/json
{ "key": "wk_sk_...", "visitor": "user-42", "text": "كم سعر الباقة؟" }
# => { "ok": true, "answered": true, "answer": "...", "reason": "answered" }

ضع المفتاح في خادمك فقط. أطول انتظار 25 ثانية، والمعتاد بضع ثوانٍ. نفس «visitor» يُكمل المحادثة نفسها.

قيم reason

answeredأجاب لَبيب — النص في answer
no_answerلا يعرف الجواب أو طُلب موظّف — سُجّل السؤال ليتعلّمه
ai_offالرد الآلي مطفأ على هذه القناة
no_creditنفد رصيد الذكاء
no_replyلم يخرج ردّ لهذه الرسالة
timeoutلم يصل الجواب خلال 25 ثانية

رمز التحقق عبر واتساب — بدل SMS

فعّل «رمز التحقق» من قائمة ⋮ في بطاقة قناتك الرسمية، وخذ المفتاح (يبدأ بـ wko_ ويظهر مرّةً واحدة). القالب يُنشأ ويُعتمد تلقائياً، والرمز يصل عبر قالب واتساب الرسمي مع زرّ «نسخ الرمز». ضع المفتاح في خادمك فقط، لا في المتصفّح ولا في التطبيق.

طلبان فقط

# 1) أرسل رمزاً
POST https://labeb.app/api/v1/otp/send
Authorization: Bearer wko_...
{ "phone": "9665XXXXXXXX" }
# => { "ok": true, "data": { "requestId": "...", "expiresInSeconds": 600 } }

# 2) هل الرمز الذي كتبه العميل صحيح؟
POST https://labeb.app/api/v1/otp/verify
Authorization: Bearer wko_...
{ "phone": "9665XXXXXXXX", "code": "123456" }
# => { "ok": true, "data": { "valid": true } }

أمثلةٌ جاهزة بـ curl وJavaScript وPHP داخل نافذة «رمز التحقق» نفسها، بمفتاحك مضمَّناً. الأرقام العربية في الرمز (٠-٩) مقبولة. الرمز يُرسل عبر القالب الرسمي فقط — والأرقام السورية (+963) تحجب ميتا أغلبها، فوفّر لها بديلاً (بريداً مثلاً).

كلّ ردّ ممكن

HTTPcodeالمعنى وماذا تفعل
200valid: trueالرمز صحيح — يُقبل مرّةً واحدة فقط
200valid: false · wrong_codeرمزٌ خاطئ — attemptsLeft يقول كم بقي (5 محاولات لكلّ رمز)
200valid: false · expiredانتهت صلاحيته — اطلب رمزاً جديداً
200valid: false · too_many_attemptsاستُنفدت المحاولات الخمس — اطلب رمزاً جديداً
200valid: false · no_codeلا رمز فعّال لهذا الرقم (استُعمل أو لم يُطلب)
400bad_requestالجسم ناقص: send يحتاج phone، وverify يحتاج phone وcode
400bad_phoneالرقم ليس بصيغة دولية (أرقام فقط مع رمز الدولة)
401unauthorizedالمفتاح غائب أو خاطئ أو أُنشئ غيرُه
403disabledالخدمة متوقّفة على القناة
422no_routeقالب التحقق لم تعتمده ميتا بعد، أو القناة غير متّصلة
429too_many_requestsانتظر: 30 ثانية بين رمزين للرقم نفسه، و5 رموز في الساعة — الترويسة Retry-After تقول كم
502send_failedتعذّر الإرسال من واتساب — أعد المحاولة بعد قليل

الويبهوك — الأحداث تصلك فور وقوعها

بدل أن يسأل برنامجك كل دقيقة «هل من جديد؟»، سجّل عنوان HTTPS من الإعدادات ← المطوّرون ← Webhooks واختر الأحداث. كل حدث يصل موقّعاً، ويُعاد إرساله عند الفشل (1 · 5 · 30 · 120 · 480 دقيقة)، ويظهر في سجل التسليم داخل حسابك.

الأحداث

postsale.deal_createdصفقة إضافية لعميل▾

صفقة جديدة بانتظار الاعتماد على بطاقة عميل ما بعد البيع.

{
  "dealId": "…",
  "customerId": "…",
  "subscriptionName": "فرع حلب",
  "packageName": "القياسية",
  "amount": 190,
  "status": "pending"
}
postsale.deal_decidedقرار صفقة إضافية▾

اعتُمدت الصفقة الإضافية أو أُرجعت للتصحيح.

{
  "dealId": "…",
  "customerId": "…",
  "status": "approved",
  "reason": null
}
restaurant.order_createdطلب مطعم جديد▾

حدث محفوظ مع التغيير نفسه. راجع المورد عبر API بتصريح مناسب.

{
  "orderId": "…"
}
restaurant.order_changedتغير طلب المطعم▾

حدث محفوظ مع التغيير نفسه. راجع المورد عبر API بتصريح مناسب.

{
  "orderId": "…"
}
restaurant.payment_recordedقبض أو تسوية طلب مطعم▾

حدث محفوظ مع التغيير نفسه. راجع المورد عبر API بتصريح مناسب.

{
  "orderId": "…"
}
restaurant.driver_changedتغيرت حالة سائق المطعم▾

حدث محفوظ مع التغيير نفسه. راجع المورد عبر API بتصريح مناسب.

{
  "userId": "…"
}
restaurant.menu_changedتغير منيو المطعم▾

حدث محفوظ مع التغيير نفسه. راجع المورد عبر API بتصريح مناسب.

{
  "itemId": "…"
}
restaurant.settings_changedتغيرت إعدادات المطعم▾

حدث محفوظ مع التغيير نفسه. راجع المورد عبر API بتصريح مناسب.

{
  "tenantId": "…"
}
restaurant.rating_receivedتقييم طلب مطعم▾

حدث محفوظ مع التغيير نفسه. راجع المورد عبر API بتصريح مناسب.

{
  "orderId": "…"
}
lead.createdعميلٌ محتمل جديد▾

بطاقةُ عميلٍ أُنشئت (من واتساب أو يدويّاً أو عبر API).

{
  "leadId": "…",
  "phone": "9665…",
  "fullName": "…",
  "stage": "interested",
  "source": "whatsapp",
  "assignedTo": null
}
lead.stage_changedتغيّرت مرحلةُ عميل▾

انتقلت بطاقةٌ من مرحلةٍ إلى أخرى (interested → engaged → won/lost…).

{
  "leadId": "…",
  "phone": "9665…",
  "fromStage": "interested",
  "toStage": "engaged"
}
lead.assignedأُسند عميلٌ لموظّف▾

تغيّر المسؤولُ عن بطاقة عميل.

{
  "leadId": "…",
  "phone": "9665…",
  "fromAssignedTo": null,
  "toAssignedTo": "…"
}
ticket.createdتذكرةٌ جديدة▾

فُتحت تذكرةُ دعمٍ (من الموظّف أو من لَبيب أو عبر API).

{
  "ticketId": "…",
  "ticketNumber": 2031,
  "title": "…",
  "status": "new",
  "priority": "high",
  "customerId": "…",
  "sourcePhone": "9665…"
}
ticket.status_changedتغيّرت حالةُ تذكرة▾

new → in_progress → resolved / cancelled / converted.

{
  "ticketId": "…",
  "ticketNumber": 2031,
  "fromStatus": "new",
  "toStatus": "resolved",
  "resolvedAt": "2026-09-11T08:00:00Z"
}
ticket.assignedأُسندت تذكرة▾

تغيّر المسؤولُ عن تذكرة.

{
  "ticketId": "…",
  "ticketNumber": 2031,
  "fromAssignedTo": null,
  "toAssignedTo": "…"
}
appointment.createdموعدٌ جديد▾

أُنشئ موعدٌ (بانتظار وقتٍ أو مجدولٌ).

{
  "appointmentId": "…",
  "customerPhone": "9665…",
  "customerName": "…",
  "status": "scheduled",
  "scheduledAt": "2026-09-12T10:00:00Z",
  "assignedTo": "…",
  "leadId": "…"
}
appointment.status_changedتغيّر موعد▾

تغيّرت حالةُ موعدٍ أو وقتُه (scheduled / completed / cancelled / no_show…).

{
  "appointmentId": "…",
  "customerPhone": "9665…",
  "fromStatus": "scheduled",
  "toStatus": "completed",
  "scheduledAt": "2026-09-12T10:00:00Z"
}
message.receivedرسالةُ واتساب واردة▾

وصلت رسالةٌ من عميلٍ على أحد أرقامك (نصٌّ أو وسائط).

{
  "threadKey": "9665…@s.whatsapp.net",
  "fromPhone": "9665…",
  "instanceId": "…",
  "messageId": "…",
  "text": "…",
  "hasMedia": false,
  "isGroup": false
}
conversation.assignedأُسندت محادثة▾

تحوّلت محادثةٌ إلى موظّفٍ أو إلى لَبيب.

{
  "threadKey": "…",
  "assignedType": "human",
  "assignedUserId": "…",
  "reason": "…"
}
conversation.resolvedأُغلقت محادثة▾

أُقفلت محادثةٌ مُسندة.

{
  "threadKey": "…",
  "resolvedBy": "…"
}
conversation.handoffطلبُ تدخّلٍ بشريّ▾

لَبيب طلب تدخّل إنسان في محادثة.

{
  "threadKey": "…",
  "reason": "…"
}
csat.ratedقيّم عميلٌ الخدمة▾

أجاب عميلٌ على سؤال الرضا (من 10) — ومعه تعليقه والمشكلة إن ذكرها.

{
  "surveyId": "…",
  "score": 9,
  "comment": "…",
  "problem": null,
  "customerName": "…",
  "phone": "9665…",
  "employeeId": "…",
  "leadId": "…",
  "postSaleCustomerId": null,
  "trigger": "won"
}
meeting.endedانتهى اجتماع▾

انتهى اجتماعُ صوتٍ أو فيديو مع عميل.

{
  "meetingId": "…",
  "title": "…",
  "customerName": "…",
  "customerPhone": "9665…",
  "hostUserId": "…",
  "startedAt": "2026-10-23T10:00:00Z",
  "endedAt": "2026-10-23T10:30:00Z",
  "leadId": "…"
}
meeting.summary_readyملخّص اجتماعٍ جاهز▾

فُرّغ تسجيلُ الاجتماع ولُخّص.

{
  "meetingId": "…",
  "title": "…",
  "customerName": "…",
  "summary": "…",
  "leadId": "…"
}
broadcast.finishedانتهت حملةُ واتساب▾

اكتملت حملةٌ أو أُوقفت — ومعها سببُ الإيقاف إن وُجد.

{
  "broadcastId": "…",
  "name": "…",
  "status": "completed",
  "stopReason": null,
  "totalRecipients": 850,
  "finishedAt": "2026-10-23T12:00:00Z"
}

الغلاف والتوقيع

كل طلب POST بجسم JSON وثلاث ترويسات: X-Labeb-Event (اسم الحدث)، X-Labeb-Delivery (معرّف التسليم — يتكرّر عند الإعادة)، وX-Labeb-Signature.

{
  "id": "6f1c…",                 // معرّف الحدث — تجاهل التكرار به
  "event": "ticket.created",
  "occurredAt": "2026-09-11T08:00:00Z",
  "tenantId": "c1b3…",
  "data": { ... }                // حسب الحدث (انظر العيّنات)
}

X-Labeb-Signature: t=1757577600,v1=<hex>
v1 = HMAC-SHA256(secret, t + "." + rawBody)
// Node.js — التحقّق من التوقيع
const crypto = require("crypto");
function verify(secret, header, rawBody) {
  const { t, v1 } = Object.fromEntries(header.split(",").map(p => p.split("=")));
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;   // ارفض القديم
  const mac = crypto.createHmac("sha256", secret).update(t + "." + rawBody).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}
// ردّ 2xx خلال 10 ثوانٍ = وصل. غير ذلك يُعاد الإرسال.
  • • السرّ يبدأ بـ whsec_ ويظهر مرّةً عند الإنشاء — وتدوّره من الإعدادات متى شئت.
  • • العناوين الداخلية وغير HTTPS مرفوضة. بعد 20 فشلاً متتالياً تُطفأ الوجهة تلقائياً ويظهر السبب في الإعدادات.
  • • زر «أرسل اختباراً» يرسل test.ping فوراً ويعرض لك ردّ خادمك.