Bedrud Belgeler

Oda yönetimi uç noktaları /api/room/ altındadır. Tüm uç noktalar kimlik doğrulaması gerektirir.

Genel Bakış

Uç NoktaYöntemAçıklama
/api/room/createPOSTYeni oda oluştur
/api/room/joinPOSTOdaya katıl ve LiveKit token al
/api/room/listGETKullanılabilir odaları listele
/api/room/:roomId/kick/:identityPOSTBir katılımcıyı at (yönetici)
/api/room/:roomId/mute/:identityPOSTBir katılımcıyı sessize al (yönetici)
/api/room/:roomId/video/:identity/offPOSTKatılımcı videosunu kapat (yönetici)

Uç Noktalar

Oda Oluştur

Yeni bir toplantı odası oluşturun. Kimliği doğrulanmış kullanıcı oda yöneticisi olur.

POST /api/room/create

Başlıklar: Authorization: Bearer <accessToken>

İstek Gövdesi:

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

Not: name alanı isteğe bağlıdır. Atlanır veya boş bırakılırsa, sunucu xxx-xxxx-xxx formatında rastgele bir URL uyumlu isim otomatik olarak oluşturur (ör. bkf-qmzl-rja).

Oda İsim Kuralları:

Oda isimleri URL’de https://bedrud.xyz/m/NAME şeklinde görünür, bu nedenle URL uyumlu olmalıdır:

KuralAçıklama
İzin verilen karakterlerKüçük harfler (a-z), rakamlar (0-9) ve tireler (-)
Minimum uzunluk3 karakter
Maksimum uzunluk63 karakter
Özel karakter yok#, @, _, ., /, \, <, >, &, %, +, =, ;, :, ', ", ?, !, boşluk vb. kullanılamaz
Başta/sonda tire olamaz-room ve room- geçersizdir
Ardışık tire olamazroom--name geçersizdir
Yalnızca küçük harfBüyük harfler reddedilir; giriş otomatik olarak küçük harfe dönüştürülür
BenzersizHer oda ismi benzersiz olmalıdır

Yanıt (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"
}

Alanlar

AlanTürZorunluAçıklama
namestringHayırURL uyumlu oda ismi (atlanırsa otomatik oluşturulur)
isPublicbooleanHayırOdanın genel listelemelerde görünmesi
modestringHayırOda modu (ör. "standard")
maxParticipantsnumberHayırMaksimum katılımcı sayısı
settings.allowChatbooleanHayırMetin sohbetinin etkin olup olmadığı
settings.allowVideobooleanHayırVideonun etkin olup olmadığı
settings.allowAudiobooleanHayırSesanın etkin olup olmadığı
settings.requireApprovalbooleanHayırKatılımcıların yönetici onayı gerektirip gerektirmediği
settings.e2eebooleanHayırUçtan uca şifrelemenin etkin olup olmadığı

Odaya Katıl

Var olan bir odaya katılın ve medya bağlantısı için bir LiveKit token alın.

POST /api/room/join

Başlıklar: Authorization: Bearer <accessToken>

İstek Gövdesi:

{
  "roomName": "team-standup"
}

Yanıt (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, imzalı bir LiveKit erişim token’ıdır. WebSocket üzerinden LiveKit sunucusuna bağlanmak için kullanın:

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

Odaları Listele

Kullanıcının oluşturduğu odaların listesini alın.

GET /api/room/list

Başlıklar: Authorization: Bearer <accessToken>

Yanıt (200):

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

Katılımcıyı At

Bir katılımcıyı odadan çıkarın. Bunu yalnızca oda yöneticisi yapabilir.

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

Başlıklar: Authorization: Bearer <accessToken>

Yanıt (200):

{
  "status": "success"
}

Katılımcıyı Sessize Al

Bir katılımcının mikrofonunu sessize alın. Bunu yalnızca oda yöneticisi yapabilir.

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

Başlıklar: Authorization: Bearer <accessToken>

Yanıt (200):

{
  "status": "success"
}

Katılımcı Videosunu Kapat

Bir katılımcının kamerasını kapatın. Bunu yalnızca oda yöneticisi yapabilir.

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

Başlıklar: Authorization: Bearer <accessToken>

Yanıt (200):

{
  "status": "success"
}

Yönetici Kontrolleri

Oda yöneticisi eylemleri (atma, sessize alma, video kapatma) yalnızca odayı oluşturan kullanıcıya (adminId) açıktır. Yönetici olmayan bir kullanıcı bu eylemleri denediğinde 403 hatası döner.

İzinler Matrisi

EylemOda YöneticisiSüper YöneticiNormal KullanıcıMisafir
Oda oluşturmaEvetEvetEvetHayır
Odaya katılmaEvetEvetEvetEvet
Odaları listelemeEvetEvetEvetEvet
AtmaEvetEvetHayırHayır
Sessize almaEvetEvetHayırHayır
Video kapatmaEvetEvetHayırHayır

Hata Yanıtları

Tüm hatalar tutarlı bir format izler:

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

Oda Oluşturma Hataları

DurumHata MesajıAçıklama
400"Invalid request body"Hatalı biçimlendirilmiş JSON
400"room name must contain only lowercase letters, numbers, and hyphens"İsim özel karakterler içeriyor (#, @, _ vb.)
400"room name must be at least 3 characters"İsim çok kısa
400"room name must be at most 63 characters"İsim çok uzun
409"a room with this name already exists"Yinelenen isim
500"Failed to create media room"LiveKit sunucu hatası
500"Failed to create room"Veritabanı hatası

Genel Hatalar

DurumAnlamı
400Hatalı istek (eksik/geçersiz veri)
401Kimlik doğrulaması yapılmamış
403Yetkisiz (yönetici olmayan, yönetici eylemi deniyor)
404Oda bulunamadı
409Çakışma (yinelenen kaynak)
500İç sunucu hatası

Ayrıca bakınız