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

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

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

أداة
131
منها كتابة
53
إصدار المواصفة
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 ↗
131 أداة

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

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

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

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

الوسيطالنوعمطلوبالوصف
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.manage

الوسيطالنوعمطلوبالوصف
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/cancel_lead_follow_upsإيقاف متابعات عميل

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

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

الوسيطالنوعمطلوبالوصف
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إقفال متابعة

إقفال تذكير متابعة بـ«تمّت المتابعة» بعد أن تواصل الموظف فعلاً. للتذكيرات الداخلية لا لرسائل القناة.

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

الوسيطالنوعمطلوبالوصف
followUpIdstringنعممعرّف المتابعة (GUID من قائمة المتابعات)
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/get_campaign_funnelقمع الحملة

قمعُ حملةٍ واحدة: كم عميلاً جلبت وماذا حدث لهم (interested · engaged · trial · won · lost)، مع نسبة التحويل وأسباب الخسارة وتكلفة العميل وتكلفة الصفقة من إنفاق الحملة.

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

الوسيطالنوعمطلوبالوصف
campaignstringنعممعرّف الحملة أو معرّفها في ميتا أو اسمها كاملاً أو جزءاً منه
periodstringtoday|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تقرير العملاء

تقرير العملاء المحتملين: توزيعهم على المراحل + الجدد خلال فترة + آخر العملاء. days الافتراضي 30.

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

الوسيطالنوعمطلوبالوصف
daysinteger
curl -X POST https://labeb.app/api/v1/tools/get_crm_report \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"days":10}'
قراءة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.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.view

الوسيطالنوعمطلوبالوصف
periodstringtoday|yesterday|last24h|last7d|last30d|all — الافتراضي last24h
fromDatestringYYYY-MM-DD بتوقيت حساب المستأجر
toDatestringYYYY-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نعممعرّف الحملة أو معرّفها في ميتا أو اسمها كاملاً أو جزءاً منه
periodstringtoday|yesterday|last24h|last7d|last30d|all — الافتراضي all
fromDatestringYYYY-MM-DD بتوقيت حساب المستأجر
toDatestringYYYY-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.manage

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

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المتابعات

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

الصلاحية المطلوبة لموظّف الربط: 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_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.manage

الوسيطالنوعمطلوبالوصف
followUpIdstringنعممعرّف المتابعة (GUID من قائمة المتابعات)
scheduledAtstringالموعد الجديد بصيغة ISO — في المستقبل
messageTextstring
titlestring
statusstringpending|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.manage

الوسيطالنوعمطلوبالوصف
customerIdstringنعممعرّف العميل أو اسمه أو هاتفه
messageTextstringنعمنص الرسالة أو التذكير
scheduledAtstringنعمالموعد بصيغة ISO مثل 2026-08-05T09:00:00Z — يجب أن يكون في المستقبل
titlestring
kindstringchannel|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_lead_stageنقل مرحلة عميل

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

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

الوسيطالنوعمطلوبالوصف
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":"…"}'

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

تعديلPOST /api/v1/tools/cancel_appointmentإلغاء موعد

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

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

الوسيطالنوعمطلوبالوصف
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/create_appointmentحجز موعد

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

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

الوسيطالنوعمطلوبالوصف
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_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.instance.manage

الوسيطالنوعمطلوبالوصف
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.instance.manage

الوسيطالنوعمطلوبالوصف
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إعدادات المواعيد

إعدادات وكيل المواعيد: التفعيل، المدة، القوالب، كلمات الكشف.

الصلاحية المطلوبة لموظّف الربط: appointments.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_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قراءة محادثة

رسائل محادثة واتساب لرقم محدد أو لمجموعة (الأحدث أولاً) — للتحليل العميق للمحادثة: الاتجاه والنص والوقت. للمجموعة مرّر معرّفها الكامل (…@g.us من list_whatsapp_groups) في phone، فتعيد لكلّ رسالة من أرسلها: لَبيب أو موظّف أو رقم المشارك.

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

الوسيطالنوعمطلوبالوصف
phonestringنعمرقم العميل، أو معرّف مجموعة كامل بلاحقة @g.us
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_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.instance.manage

الوسيطالنوعمطلوبالوصف
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 يوماً) مع الحالة والعميل.

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

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

محادثات واتساب الخاصة مع فلاتر: نافذة زمنية بتوقيت الحساب (period أو fromDate/toDate)، ومرحلة العميل (stage)، والقناة باسمها أو رقمها (channel)، وunanswered للمحادثات التي آخر رسالة فيها من العميل ولم يُردّ عليها. لكل محادثة: الرقم والاسم والمرحلة والقناة وعدد الرسائل في النافذة وآخر رسالة ومن أرسلها وهل تنتظر ردّاً، مع العدد الكلي المطابق. نقطة البداية لتحليل المحادثات.

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

الوسيطالنوعمطلوبالوصف
periodstringtoday|yesterday|last24h|last7d|last30d|all — الافتراضي last30d
fromDatestringYYYY-MM-DD بتوقيت الحساب
toDatestringYYYY-MM-DD شاملاً
stagestringinterested|engaged|trial|won|lost
channelstringاسم القناة أو رقمها
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 والاسم وعدد الرسائل وآخر نشاط، مرتبة بالأحدث نشاطاً. هذا المعرف هو ما يوضع في حقل phone عند send_whatsapp_message أو send_whatsapp_media للإرسال إلى مجموعة. الحساب قد يكون في مئات المجموعات، فمرر query بجزء من اسم المجموعة للبحث عنها بالاسم بدل تصفح الأحدث. ومع period أو fromDate/toDate تعيد فقط المجموعات التي تحرّكت في تلك الفترة مع عدد رسائلها فيها وآخر رسالة ومن أرسلها (لَبيب · موظّف · رقم المشارك) — لسؤال «أيّ مجموعات تحرّكت اليوم». ولقراءة رسائل مجموعة مرّر معرّفها إلى get_whatsapp_conversation. limit الافتراضي 20 وأقصاه 50.

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

الوسيطالنوعمطلوبالوصف
querystringاختياري: جزء من اسم المجموعة للبحث — بلا حساسية لحالة الأحرف
periodstringاختياري: today|yesterday|last24h|last7d|last30d
fromDatestringYYYY-MM-DD بتوقيت الحساب
toDatestringYYYY-MM-DD شاملاً
limitinteger
curl -X POST https://labeb.app/api/v1/tools/list_whatsapp_groups \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"query":"…","period":"…"}'
قراءةPOST /api/v1/tools/list_whatsapp_official_templatesقوالب واتساب الرسمية

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

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

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

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.manage

الوسيطالنوعمطلوبالوصف
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إرسال مرفق واتساب

إرسال ملف أو صورة أو مستند عبر واتساب إلى رقم أو إلى مجموعة — وللمجموعة مرر معرفها الكامل بصيغة @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إرسال رسالة واتساب

إرسال رسالة واتساب نصية إلى رقم أو إلى مجموعة. للرقم: أرقام فقط مع رمز الدولة بلا + ولا مسافات. وللمجموعة: مرر معرفها الكامل في نفس حقل 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/update_appointment_settingsتعديل إعدادات المواعيد

تعديل إعدادات المواعيد: تفعيل/مدة/أقصى أيام/قوالب الرسائل.

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

الوسيطالنوعمطلوبالوصف
isEnabledboolean
durationMinutesinteger
maxDaysAheadinteger
askTimeMessagestring
confirmationTemplatestring
curl -X POST https://labeb.app/api/v1/tools/update_appointment_settings \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"isEnabled":true,"durationMinutes":10}'
تعديل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":"…"}'

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

تعديلPOST /api/v1/tools/assign_ticketإسناد تذكرة

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

الصلاحية المطلوبة لموظّف الربط: quality.ticket.assign

الوسيطالنوعمطلوبالوصف
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/create_kb_articleإضافة مقال معرفة

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

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

الوسيطالنوعمطلوبالوصف
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_ticketفتح تذكرة

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

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

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring
prioritystringlow|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_postsale_customerتفاصيل عميل ما بعد البيع

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

الصلاحية المطلوبة لموظّف الربط: 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تقرير التذاكر

تقرير تذاكر الدعم: توزيع الحالات + أحدث التذاكر المفتوحة.

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

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

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

قائمة مقالات قاعدة المعرفة (منشورة ومسودات) مع التصنيف.

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

الوسيطالنوعمطلوبالوصف
searchstring
limitinteger
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_postsale_customersعملاء ما بعد البيع

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

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

الوسيطالنوعمطلوبالوصف
statusstringpending|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/search_knowledge_baseبحث قاعدة المعرفة

بحث دلالي في قاعدة المعرفة — نفس البحث الذي يستخدمه بوت الدعم.

الصلاحية المطلوبة لموظّف الربط: 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تعديل مقال معرفة

تعديل مقال معرفة قائم (عنوان/محتوى/تصنيف/نشر).

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

الوسيطالنوعمطلوبالوصف
articleIdstringنعممعرّف المقال أو عنوانه
titlestring
contentstring
categorystring
isPublishedboolean
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_ticket_statusتغيير حالة تذكرة

تغيير حالة تذكرة: in_progress | waiting_customer | testing | resolved | cancelled.

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

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

المهامّ7

إضافةPOST /api/v1/tools/create_taskإنشاء مهمة

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

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

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring
assignedToUserIdstring
prioritystringlow|normal|high|urgent
dueDatestringISO 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نعممعرّف المهمة أو عنوانها
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/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

الوسيطالنوعمطلوبالوصف
statusstringopen|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_statusتغيير حالة مهمة

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

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

الوسيطالنوعمطلوبالوصف
taskIdstringنعممعرّف المهمة أو عنوانها
statusstringنعم
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/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":"…"}'

المنتج19

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

تفاصيل بطاقة تقنية بعنوانها: الوصف والحالة والأولوية والنظام وعدد الطالبين + آخر التعليقات.

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

الوسيطالنوعمطلوبالوصف
titlestringنعم
curl -X POST https://labeb.app/api/v1/tools/get_product_card \
  -H "Authorization: Bearer wkm_…" \
  -H "Content-Type: application/json" \
  -d '{"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
cardTypestringfeature|bug
limitinteger
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/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معرّف المستخدم أو اسمه — اتركه فارغاً لإلغاء الإسناد
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نعممعرّف الإصدار أو رقمه
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
prioritystringlow|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

الوسيطالنوعمطلوبالوصف
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

الوسيطالنوعمطلوبالوصف
fromstringISO date
tostringISO 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_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_start_timerبدء عدّاد بطاقة

بدء عدّاد الوقت على بطاقة منتج للمستخدم الحالي — يوقف عدّاده الجاري (إن وُجد) تلقائياً.

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

الوسيطالنوعمطلوبالوصف
cardIdstringنعممعرّف البطاقة أو عنوانها
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

الوسيطالنوعمطلوبالوصف
fromstringISO date
tostringISO 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_update_cardتعديل بطاقة منتج

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

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

الوسيطالنوعمطلوبالوصف
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نقل مرحلة بطاقة

نقل بطاقة منتج إلى مرحلة جديدة. **يُطلق رسالة التريغر للعملاء الطالبين** إن كان لتلك المرحلة تريغر فعّال. 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/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":"…"}'

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

تعديل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/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/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_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_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_coaching_notesملاحظات التدريب

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

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

الوسيطالنوعمطلوبالوصف
statusstringnew|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_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/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":"…"}'

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

إضافةPOST /api/v1/tools/create_monthly_goalإنشاء هدف شهري

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

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

الوسيطالنوعمطلوبالوصف
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.manage

الوسيطالنوعمطلوبالوصف
titlestringنعم
descriptionstring
prioritystringlow|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/delete_monthly_goalحذف هدف شهري

حذف هدف شهري.

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

الوسيطالنوعمطلوبالوصف
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.manage

الوسيطالنوعمطلوبالوصف
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.manage

الوسيطالنوعمطلوبالوصف
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_projectsقراءة المشاريع

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

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

الوسيطالنوعمطلوبالوصف
statusstringplanning|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/update_monthly_goalتعديل هدف شهري

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

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

الوسيطالنوعمطلوبالوصف
goalIdstringنعممعرّف الهدف الشهري أو عنوانه
titlestring
descriptionstring
statusstringnew|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.manage

الوسيطالنوعمطلوبالوصف
projectIdstringنعممعرّف المشروع أو عنوانه
titlestring
descriptionstring
statusstringplanning|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":"…"}'

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

قراءة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_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/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_ai_agentتعديل وكيل ذكاء

تعديل وكيل ذكاء: البرومبت أو النموذج أو الإعدادات أو التفعيل. يسري فوراً على ردود البوت.

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

الوسيطالنوعمطلوبالوصف
agentKeystringنعم
systemPromptstring
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":"…"}'

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

تعديل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/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"
fromDatestringYYYY-MM-DD بساعة الحساب — مع custom
toDatestring
threadKeysstring[]
maxTurnsinteger
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_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 قواعد رحلة العميل. بلا section تعيد الأقسام القياسية، والفروع والقواعد تقرأ بقسمها صراحة لأنها قد تكون مئات الصفوف. وترد مع كل حقل قيمه المسموحة.

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

الوسيطالنوعمطلوبالوصف
section"persona" | "selling" | "limits" | "handoff" | "powers" | "trial" | "model" | "branches" | "rules"
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_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"
fromDatestringYYYY-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_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

الوسيطالنوعمطلوبالوصف
scopestringpersonal|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/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"
fromDatestringYYYY-MM-DD بساعة الحساب — مع custom
toDatestring
threadKeysstring[]
maxTurnsinteger
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: يلزمه situation ثم isEnabled assignConversation assigneeUserIds assigneeUserIdsPostSale sendReassurance reassuranceText cooldownMinutes dailyCap slaMinutes slaEscalateToUserIds. powers: يلزمه toolKey وisEnabled. trial: replyTriggerEnabled replyTriggerMsgCount successStage successAssign successAssigneeIds. model: modelKey من الكتالوج. 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"نعم
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":"…"}'

عامّ7

قراءة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_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_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/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":"…"}'

رمز التحقق عبر واتساب — بدل 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 دقيقة)، ويظهر في سجل التسليم داخل حسابك.

الأحداث

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": "…"
}

الغلاف والتوقيع

كل طلب 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 فوراً ويعرض لك ردّ خادمك.