Bedrud التوثيق

نقاط نهاية إدارة الغرف تحت /api/room/. جميع نقاط النهاية تتطلب المصادقة.

نظرة عامة

نقطة النهايةالطريقةالوصف
/api/room/createPOSTإنشاء غرفة جديدة
/api/room/joinPOSTالانضمام إلى غرفة والحصول على رمز LiveKit
/api/room/listGETعرض الغرف المتاحة
/api/room/:roomId/kick/:identityPOSTطرد مشارك (مشرف)
/api/room/:roomId/mute/:identityPOSTكتم مشارك (مشرف)
/api/room/:roomId/video/:identity/offPOSTتعطيل فيديو المشارك (مشرف)

نقاط النهاية

إنشاء غرفة

إنشاء غرفة اجتماع جديدة. يصبح المستخدم المُصدَّق مشرف الغرفة.

POST /api/room/create

الرؤوس: Authorization: Bearer <accessToken>

نص الطلب:

{
  "name": "team-standup",
  "isPublic": true,
  "mode": "standard",
  "settings": {
    "allowChat": true,
    "allowVideo": true,
    "allowAudio": true,
    "requireApproval": false,
    "e2ee": false
  }
}

ملاحظة: حقل name اختياري. إذا تم حذفه أو تركه فارغًا، سيُنشئ الخادم اسمًا عشوائيًا آمنًا للروابط بتنسيق xxx-xxxx-xxx (مثل bkf-qmzl-rja).

قواعد اسم الغرفة:

تظهر أسماء الغرف في الرابط كـ https://bedrud.xyz/m/NAME، لذا يجب أن تكون آمنة للروابط:

القاعدةالوصف
الأحرف المسموحةأحرف صغيرة (a-z)، أرقام (0-9)، وواصلات (-)
الحد الأدنى للطول٣ أحرف
الحد الأقصى للطول٦٣ حرفًا
بدون أحرف خاصة#، @، _، .، /، \، <، >، &، %، +، =، ;، :، '، "، ?، !، المسافات، إلخ غير مسموح بها
بدون واصلات في البداية/النهاية-room وroom- غير صالحة
بدون واصلات متتاليةroom--name غير صالح
أحرف صغيرة فقطالأحرف الكبيرة مرفوضة؛ يُحوَّل الإدخال تلقائيًا إلى أحرف صغيرة
فريديجب أن يكون كل اسم غرفة فريدًا

الاستجابة (200):

{
  "id": "uuid",
  "name": "team-standup",
  "createdBy": "user-uuid",
  "isActive": true,
  "isPublic": true,
  "maxParticipants": 0,
  "settings": {
    "allowChat": true,
    "allowVideo": true,
    "allowAudio": true,
    "requireApproval": false,
    "e2ee": false
  },
  "livekitHost": "wss://lk.bedrud.xyz",
  "mode": "standard"
}

الحقول

الحقلالنوعمطلوبالوصف
namestringلااسم الغرفة الآمن للروابط (يُنشأ تلقائيًا إذا تم حذفه)
isPublicbooleanلاهل تظهر الغرفة في القوائم العامة
modestringلاوضع الغرفة (مثل "standard")
maxParticipantsnumberلاالحد الأقصى لعدد المشاركين
settings.allowChatbooleanلاهل المحادثة النصية مُفعّلة
settings.allowVideobooleanلاهل الفيديو مُفعّل
settings.allowAudiobooleanلاهل الصوت مُفعّل
settings.requireApprovalbooleanلاهل يحتاج المشاركون لموافقة المشرف
settings.e2eebooleanلاهل التشفير من طرف إلى طرف مُفعّل

الانضمام إلى غرفة

الانضمام إلى غرفة موجودة واستلام رمز LiveKit للاتصال الوسائطي.

POST /api/room/join

الرؤوس: Authorization: Bearer <accessToken>

نص الطلب:

{
  "roomName": "team-standup"
}

الاستجابة (200):

{
  "id": "uuid",
  "name": "team-standup",
  "token": "eyJ...",
  "createdBy": "user-uuid",
  "adminId": "user-uuid",
  "isActive": true,
  "isPublic": true,
  "maxParticipants": 20,
  "expiresAt": "2026-02-16T12:00:00Z",
  "settings": { ... },
  "livekitHost": "wss://lk.bedrud.xyz",
  "mode": "standard"
}

الرمز token هو رمز وصول LiveKit مُوقَّع. استخدمه للاتصال بخادم LiveKit عبر WebSocket:

import { Room } from 'livekit-client';
 
const room = new Room();
await room.connect(livekitUrl, token);

عرض الغرف

الحصول على قائمة بالغرف التي أنشأها المستخدم.

GET /api/room/list

الرؤوس: Authorization: Bearer <accessToken>

الاستجابة (200):

[
  {
    "id": "uuid",
    "name": "team-standup",
    "createdBy": "user-uuid",
    "isActive": true,
    "maxParticipants": 20,
    "expiresAt": "2026-02-16T12:00:00Z",
    "settings": { ... },
    "mode": "standard",
    "relationship": "creator"
  }
]

طرد مشارك

إزالة مشارك من الغرفة. يمكن فقط لمشرف الغرفة القيام بذلك.

POST /api/room/:roomId/kick/:identity

الرؤوس: Authorization: Bearer <accessToken>

الاستجابة (200):

{
  "status": "success"
}

كتم مشارك

كتم ميكروفون مشارك. يمكن فقط لمشرف الغرفة القيام بذلك.

POST /api/room/:roomId/mute/:identity

الرؤوس: Authorization: Bearer <accessToken>

الاستجابة (200):

{
  "status": "success"
}

تعطيل فيديو المشارك

إيقاف كاميرا مشارك. يمكن فقط لمشرف الغرفة القيام بذلك.

POST /api/room/:roomId/video/:identity/off

الرؤوس: Authorization: Bearer <accessToken>

الاستجابة (200):

{
  "status": "success"
}

أدوات المشرف

إجراءات مشرف الغرفة (الطرد، الكتم، إيقاف الفيديو) متاحة فقط للمستخدم الذي أنشأ الغرفة (adminId). محاولة تنفيذ هذه الإجراءات كمستخدم غير مشرف تُرجع خطأ 403.

مصفوفة الصلاحيات

الإجراءمشرف الغرفةالمشرف العاممستخدم عاديضيف
إنشاء غرفةنعمنعمنعملا
الانضمام لغرفةنعمنعمنعمنعم
عرض الغرفنعمنعمنعمنعم
الطردنعمنعملالا
الكتمنعمنعملالا
إيقاف الفيديونعمنعملالا

استجابات الخطأ

جميع الأخطاء تتبع تنسيقًا موحدًا:

{
  "error": "human-readable error message"
}

أخطاء إنشاء الغرفة

الحالةرسالة الخطأالوصف
400"Invalid request body"JSON مشوّه
400"room name must contain only lowercase letters, numbers, and hyphens"الاسم يحتوي على أحرف خاصة (#، @، _، إلخ)
400"room name must be at least 3 characters"الاسم قصير جدًا
400"room name must be at most 63 characters"الاسم طويل جدًا
409"a room with this name already exists"اسم مكرر
500"Failed to create media room"خطأ في خادم LiveKit
500"Failed to create room"خطأ في قاعدة البيانات

الأخطاء العامة

الحالةالمعنى
400طلب غير صالح (بيانات مفقودة/غير صالحة)
401غير مُصدَّق
403غير مُصرَّح (مستخدم غير مشرف يحاول تنفيذ إجراء مشرف)
404الغرفة غير موجودة
409تعارض (مورد مكرر)
500خطأ داخلي في الخادم

انظر أيضًا