Tarkibga o'tish

Xabarlar API

Barcha endpointlar Authorization: Bearer <token> talab qiladi.

Real vaqtli xabarlar Socket.IO orqali ham uzatiladi — bu sahifa faqat REST API ni qamraydi.


Foydalanuvchi qidirish

Yangi suhbat boshlash uchun foydalanuvchi qidirish:

GET /api/v1/messages/users?q=<nom_yoki_username>
Authorization: Bearer <token>

Javob:

{
  "ok": true,
  "users": [
    {
      "id": 55,
      "username": "vali5678",
      "first_name": "Vali",
      "last_name": "Karimov",
      "avatar_url": null
    }
  ]
}


Suhbatlar

Suhbatlar ro'yxati

GET /api/v1/messages/conversations
Authorization: Bearer <token>

Javob:

{
  "ok": true,
  "conversations": [
    {
      "id": 10,
      "other_user": {
        "id": 55,
        "username": "vali5678",
        "first_name": "Vali",
        "avatar_url": null
      },
      "last_message": {
        "body": "Salom!",
        "sender_id": 55,
        "created_at": "2026-06-11T09:00:00Z"
      },
      "unread_count": 2
    }
  ]
}

Suhbat boshlash / mavjud suhbatni olish

POST /api/v1/messages/conversations
Authorization: Bearer <token>
Content-Type: application/json
{ "user_id": 55 }

Agar bu ikkala foydalanuvchi o'rtasidagi suhbat allaqachon mavjud bo'lsa — mavjud suhbatni qaytaradi.

Javob (200 yoki 201):

{
  "ok": true,
  "conversation": {
    "id": 10,
    "other_user": { ... }
  }
}


Xabarlar

Xabarlar ro'yxati

GET /api/v1/messages/conversations/<conversation_id>/messages?limit=50&before=<message_id>
Authorization: Bearer <token>
Parametr Tavsif
limit Xabarlar soni (standart: 50, maks: 100)
before Paginatsiya — bu ID dan oldingi xabarlar

Javob:

{
  "ok": true,
  "messages": [
    {
      "id": 200,
      "sender_id": 42,
      "body": "Salom!",
      "media_url": null,
      "reply_to_id": null,
      "is_edited": false,
      "reactions": [],
      "created_at": "2026-06-11T09:00:00Z"
    }
  ],
  "has_more": true
}

Xabar yuborish (matn)

POST /api/v1/messages/conversations/<conversation_id>/messages
Authorization: Bearer <token>
Content-Type: application/json
{
  "body": "Salom, qalaysan?",
  "reply_to_id": null
}

reply_to_id belgilansa — o'sha xabarga reply bo'ladi.

Rasm xabar yuborish

POST /api/v1/messages/conversations/<conversation_id>/media
Authorization: Bearer <token>
Content-Type: multipart/form-data
Maydon Turi Tavsif
file File JPEG, PNG, WebP, GIF — maks. 5 MB
body string Ixtiyoriy matn

Javob:

{
  "ok": true,
  "message": {
    "id": 201,
    "body": null,
    "media_url": "/static/uploads/messages/201.jpg",
    "created_at": "2026-06-11T09:01:00Z"
  }
}

Xabar tahrirlash

PATCH /api/v1/messages/messages/<message_id>
Authorization: Bearer <token>
Content-Type: application/json
{ "body": "Tahrirlangan xabar matni" }

Faqat o'z xabarlarini tahrirlash mumkin.

Xabar o'chirish

DELETE /api/v1/messages/messages/<message_id>
Authorization: Bearer <token>

Xabarni o'qilgan deb belgilash

POST /api/v1/messages/conversations/<conversation_id>/read
Authorization: Bearer <token>
Content-Type: application/json
{ "message_id": 200 }

Suhbatni tozalash

Barcha xabarlarni o'chiradi (faqat o'z tomoni uchun):

POST /api/v1/messages/conversations/<conversation_id>/clear
Authorization: Bearer <token>

Xabarlarda qidiruv

GET /api/v1/messages/conversations/<conversation_id>/search?q=<so'rov>
Authorization: Bearer <token>

Emoji reaksiyalar

Reaksiya qo'shish

POST /api/v1/messages/messages/<message_id>/reactions
Authorization: Bearer <token>
Content-Type: application/json
{ "emoji": "👍" }

Reaksiya olib tashlash

DELETE /api/v1/messages/messages/<message_id>/reactions
Authorization: Bearer <token>
Content-Type: application/json
{ "emoji": "👍" }

Video / Ovozli qo'ng'iroqlar

Qo'ng'iroqlar WebRTC texnologiyasi bilan amalga oshiriladi. Signal almashish Socket.IO orqali bo'ladi — bu API hujjatida qamralgan emas.

Android ilovasi uchun: - Kiruvchi qo'ng'iroq FCM data xabari orqali yuboriladi - Qabul qiluvchi qurilmada IncomingCallService foreground service sifatida ishga tushadi - Kamera va mikrofon faqat qo'ng'iroq vaqtida ishlatiladi


Xato kodlari

Kod Sabab
conversation_not_found Suhbat topilmadi yoki sizga tegishli emas
message_not_found Xabar topilmadi
not_message_owner Faqat o'z xabarlarini tahrirlash/o'chirish mumkin
user_blocked Foydalanuvchi sizni bloklagan yoki siz uni
message_permission_denied Foydalanuvchining maxfiylik sozlamasiga ko'ra xabar yuborib bo'lmaydi