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 не использует — это админка.