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 اختیاری است. اگر حذف شود یا خالی باشد، سرور یک نام تصادفی امن برای URL به صورت خودکار با فرمت xxx-xxxx-xxx (مثلاً bkf-qmzl-rja) تولید می‌کند.

قوانین نام اتاق:

نام‌های اتاق در URL به صورت https://bedrud.xyz/m/NAME نمایش داده می‌شوند، بنابراین باید امن برای URL باشند:

قانونتوضیحات
کاراکترهای مجازحروف کوچک (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خیرنام اتاق امن برای URL (در صورت حذف به صورت خودکار تولید می‌شود)
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 malformed
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خطای داخلی سرور

مشاهده همچنین