مساحات العمل
مساحة العمل هي المستأجر: كل قناة وجهة اتصال ومحادثة ومفتاح وفاتورة تخص واحدة بالضبط، ولا شيء يعبر بينها. وهي أيضًا مالكة الساعة التي تُقاس بها بقية المنصّة.
مساحة العمل
قد ينتمي الشخص إلى عدة مساحات، فرمز وصول المستخدم وحده لا يكفي لتحديد واحدة — بل X-Workspace-Id هو ما يحددها. أما مفتاح API فيسمّي مساحته أصلًا ويتجاهل الترويسة.
| الحقل | النوع | الوصف |
|---|---|---|
| id | string | المعرّف العام لمساحة العمل، وقيمة X-Workspace-Id. |
| name, slug | string | الاسم المعروض ومعرّفه النصي. |
| status | string | نشطة أو موقوفة. |
| is_personal | boolean | هل هي مساحة العمل الشخصية المنشأة مع الحساب. |
| locale | string | اللغة الافتراضية للنصوص التي تولّدها المنصّة. |
| timezone | string | الساعة الوحيدة. انظر أدناه. |
| role | string | دور المتصل فيها. يظهر في المسارات التي تحلّ عضوية. |
| permissions | string[] | تصاريح المتصل المحلولة. وهي إشارة للواجهة فقط — إذ يعيد الخادم اشتقاقها في كل طلب. |
المنطقة الزمنية ليست تفضيل عرض
هي الساعة التي تُقيَّم بها ساعات العمل، والساعة التي يقرر بها رد الغياب، والساعة التي تُقصّ بها كل فترة في التحليلات. وتغييرها يحرّك الثلاثة. وهي ليست منطقة متصفح المتصل أبدًا، واشتقاق واحدة محليًا هو الخطأ الذي وُجدت تلك الميزات لمنعه.
نقاط النهاية
curl -X POST https://whats.azzamkh.sa/api/v1/workspaces \
-H "Authorization: Bearer <access token>" \
-H "Content-Type: application/json" \
-d '{ "name": "Acme", "locale": "ar", "timezone": "Asia/Riyadh" }'
# 201 Created — role and permissions are resolved for THIS user.
# {
# "id": "ws_...",
# "name": "Acme",
# "slug": "acme",
# "status": "active",
# "is_personal": false,
# "locale": "ar",
# "timezone": "Asia/Riyadh",
# "created_at": "2026-08-14T09:00:00.000Z",
# "role": "owner",
# "permissions": ["workspace.read", "workspace.manage", ...]
# }- كل مسار في هذا القسم معلن لـ
sessionTokenوحده — فمفتاح API يخص مساحة عمل ولا يستطيع إنشاء واحدة ولا سردها ولا أرشفتها. انظر المصادقة. - الطلب
DELETEيؤرشف. ويجيب بالمعرّف والحالة الجديدة، ولا يتلف بيانات المستأجر. - إنشاء مساحة عمل محدود بـ 20 في الساعة لكل شخص.
- المسار
GET /v1/auth/meيعيد المستخدم فقط. أما العضويات فتأتي منGET /v1/workspaces، وهو أيضًا موضعroleوpermissionsالمحلولة.
تسمية مساحة العمل في الطلب
سياق المستأجر صريح في كل مكان. ولا يوجد افتراضي ضمني، عن قصد: فالمفتاح الذي صُكّ في مساحة العمل الخطأ لا يمكن استرجاعه. انظر المصادقة.
| بيانات الاعتماد | Header | النتيجة |
|---|---|---|
| API key | — | المفتاح يسمّي مساحته. والترويسة مُتجاهَلة. |
| Access token | X-Workspace-Id | الترويسة هي التي تقرر، وهي مطلوبة. |
| Access token | — | 400 WORKSPACE_CONTEXT_REQUIRED. |
الأشخاص والمال
الأعضاء والأدوار والدعوات والفرق كلها موارد فرعية لمساحة العمل ولها صفحتها: الفرق والدعوات. أما الاشتراك وكشوفه ففي الفوترة.
الأخطاء المهمة هنا
| الرمز | HTTP | متى يحدث |
|---|---|---|
| WORKSPACE_NOT_FOUND | 404 | لا توجد مساحة عمل بهذا المعرّف، أو أن المتصل ليس عضوًا فيها. والحالتان جواب واحد عن قصد. |
| WORKSPACE_CONTEXT_REQUIRED | 400 | استُخدم رمز وصول مستخدم بلا X-Workspace-Id في مسار يحتاجها. |
| WORKSPACE_SUSPENDED | 403 | مساحة العمل موقوفة. وقد تعمل القراءات، أما ما يترتب عليه إرسال فلا. |
| OWNER_REQUIRED | 403 | لا يجوز ذلك إلا لمالك مساحة العمل. |
كل رمز وحالته في صفحة الأخطاء.