Загрузка данных


API тикетов для Android-клиента (только client JWT). Base URL — ваш panel API (например https://test.api.core-gate.ru).

Auth
Authorization: Bearer <client_jwt>
Роль client. Чужие тикеты → 404 / 403.

Модели
Ticket (list item)

{
  "id": 12,
  "client_id": 5,
  "client_login": "pixel3",
  "subject": "Не коннектится",
  "status": "open",
  "conversation_status": "awaiting_client",
  "created_at": "2026-08-05T12:00:00Z",
  "updated_at": "2026-08-05T14:00:00Z",
  "last_message_at": "2026-08-05T14:00:00Z",
  "message_count": 3
}
status	смысл
open
открыт
archived
закрыт/в архиве
conversation_status	UI (как на портале)
new
Новый (ещё не было ответа support)
client_replied
Клиент ответил
awaiting_client
Поддержка ответила
Message

{
  "id": 101,
  "ticket_id": 12,
  "author_role": "client",
  "author_login": "pixel3",
  "body": "Текст",
  "created_at": "2026-08-05T12:01:00Z",
  "attachments": [
    {
      "id": 1,
      "uuid": "a1b2c3d4-…",
      "message_id": 101,
      "ticket_id": 12,
      "filename": "screen.png",
      "mime": "image/png",
      "size": 120000,
      "url": "/chatfile/a1b2c3d4-…",
      "created_at": "2026-08-05T12:01:00Z"
    }
  ]
}
author_role: client | staff
Полный URL файла: {API_BASE}/chatfile/{uuid} (+ Authorization).
?download=1 — принудительное скачивание.

Лимиты вложений: до 3 файлов на сообщение, каждый ≤ 5 MB.
Типы: images, pdf, zip/7z/rar, txt/csv/json/md/log, doc/docx, xls/xlsx.
Ошибки: attachment too large · too many attachments · file type not allowed.

GET /api/client/tickets
Список своих тикетов → SupportTicket[].

POST /api/client/tickets → 201
Создать тикет.

JSON:

{ "subject": "Тема", "message": "Текст" }
(body вместо message тоже ок)

Multipart (multipart/form-data):

subject (обязательно)
message или body (можно пусто, если есть файлы)
файлы: files / file / attachments (до 3)
Ответ: SupportTicketDetail = ticket + messages[].

GET /api/client/tickets/{id}
Деталь + все сообщения с attachments.

POST /api/client/tickets/{id}/messages
Ответ в тикет.

JSON: { "message": "…" } или { "body": "…" }
Multipart: message/body + файлы (те же поля).
Нужен текст или хотя бы один файл.

Ответ: обновлённый SupportTicketDetail.

GET /chatfile/{uuid}
Скачать/превью вложения. Auth: JWT владельца тикета.
Inline для image/pdf/text; иначе attachment. ?download=1 — всегда download.

Polling
Пока открыт чат — опрашивай GET /api/client/tickets/{id} каждые ~8 с (как портал).
Список — по необходимости / pull-to-refresh.

UI-статусы на клиенте
status == archived → «Закрыт»
иначе conversation_status == awaiting_client → «Поддержка ответила» (серый как «Открыт»)
иначе → «Открыт»
Staff archive/delete/client-info Android не использует — это админка.