623 lines
16 KiB
Markdown
623 lines
16 KiB
Markdown
# API Документация
|
||
|
||
## Обзор
|
||
|
||
API предоставляет функциональность для работы со стикерами в Telegram, включая генерацию изображений, создание стикерпаков и управление ими. Также API поддерживает отслеживание позиций задач в очереди.
|
||
|
||
Базовый URL: `http://localhost:8001`
|
||
|
||
## Эндпоинты
|
||
|
||
### Проверка работоспособности
|
||
|
||
#### GET /health
|
||
|
||
Проверяет работоспособность API.
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"status": "ok"
|
||
}
|
||
```
|
||
|
||
### Управление пользователями
|
||
|
||
#### POST /register
|
||
|
||
Регистрирует нового пользователя в системе.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"username": "example_user",
|
||
"chat_id": 123456789,
|
||
"balance": 0
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `user_id` (integer, обязательный): Уникальный ID пользователя (например, из Telegram)
|
||
- `username` (string, обязательный): Имя пользователя
|
||
- `chat_id` (integer, обязательный): ID чата
|
||
- `balance` (integer, опциональный, по умолчанию 0): Начальный баланс пользователя
|
||
|
||
**Ответ (201 Created):**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"username": "example_user",
|
||
"chat_id": 123456789,
|
||
"balance": 0
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 400 Bad Request: Пользователь с таким chat_id уже существует
|
||
|
||
#### GET /users/{user_id}
|
||
|
||
Получает информацию о пользователе по его ID.
|
||
|
||
**Параметры пути:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"username": "example_user",
|
||
"chat_id": 123456789,
|
||
"balance": 0
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 404 Not Found: Пользователь не найден
|
||
|
||
### Генерация изображений и управление очередью
|
||
|
||
#### POST /generate_image
|
||
|
||
Создает задачу на генерацию изображения с использованием ComfyUI.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"workflow": {
|
||
// Объект workflow для ComfyUI
|
||
},
|
||
"tag": "image_generation"
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
- `workflow` (object, обязательный): Объект workflow для ComfyUI
|
||
- `tag` (string, обязательный): Тег для типа задачи (допустимое значение: "image_generation")
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"message": "Ваше изображение генерируется, пожалуйста подождите, готовое изображение будет у вас в галереи",
|
||
"Task_ID": "123",
|
||
"queue_position": 5
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 400 Bad Request: Недопустимый тег
|
||
- 404 Not Found: Пользователь не найден
|
||
- 500 Internal Server Error: Ошибка при создании задачи или отправке сообщения
|
||
|
||
#### GET /user_pending_tasks/{user_id}
|
||
|
||
Получает список задач пользователя в статусе PENDING с их позициями в очереди.
|
||
|
||
**Параметры пути:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
[
|
||
{
|
||
"task_id": 123,
|
||
"prompt_id": "prompt_id_from_comfyui",
|
||
"status": "PENDING",
|
||
"created_at": "2025-03-13T11:15:00",
|
||
"queue_position": 3,
|
||
"updated_at": "2025-03-13T11:20:00"
|
||
},
|
||
{
|
||
"task_id": 124,
|
||
"prompt_id": "prompt_id_from_comfyui_2",
|
||
"status": "STARTED",
|
||
"created_at": "2025-03-13T11:10:00",
|
||
"queue_position": null,
|
||
"updated_at": "2025-03-13T11:20:00"
|
||
}
|
||
]
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 404 Not Found: Пользователь не найден
|
||
- 500 Internal Server Error: Внутренняя ошибка сервера
|
||
|
||
#### GET /task_position/{task_id}
|
||
|
||
Получает текущую позицию задачи в очереди.
|
||
|
||
**Параметры пути:**
|
||
- `task_id` (integer, обязательный): ID задачи
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"task_id": 123,
|
||
"status": "PENDING",
|
||
"queue_position": 3
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 404 Not Found: Задача не найдена
|
||
- 500 Internal Server Error: Внутренняя ошибка сервера
|
||
|
||
#### GET /images_links/{user_id}
|
||
|
||
Получает список ссылок на изображения пользователя.
|
||
|
||
**Параметры пути:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
[
|
||
{
|
||
"id": 1,
|
||
"link": "file_id_from_telegram",
|
||
"prompt_id": "prompt_id_from_comfyui",
|
||
"status": "COMPLETED",
|
||
"created_at": "2025-03-12T12:00:00",
|
||
"sticker_set_id": null
|
||
}
|
||
]
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 404 Not Found: Пользователь не найден
|
||
|
||
### Управление стикерами
|
||
|
||
#### POST /upload_sticker
|
||
|
||
Загружает файл стикера на сервер Telegram.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"link": "https://example.com/image.png"
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
- `link` (string, обязательный): URL или путь к файлу стикера
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"file_id": "file_id_from_telegram"
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при загрузке файла на сервер Telegram
|
||
|
||
#### POST /create_sticker_set
|
||
|
||
Создает новый набор стикеров.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"sticker_set_name": "example_set",
|
||
"title": "Example Sticker Set",
|
||
"file_id": "file_id_from_telegram",
|
||
"emojis": "😀",
|
||
"is_animated": false,
|
||
"is_video": false
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
- `sticker_set_name` (string, обязательный): Название набора стикеров (без суффикса _by_bot)
|
||
- `title` (string, обязательный): Заголовок набора стикеров
|
||
- `file_id` (string, обязательный): File_id загруженного стикера
|
||
- `emojis` (string, обязательный): Список эмодзи для стикера
|
||
- `is_animated` (boolean, опциональный, по умолчанию false): Флаг анимированного стикера
|
||
- `is_video` (boolean, опциональный, по умолчанию false): Флаг видео-стикера
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"message": "Новый набор стикеров успешно создан!",
|
||
"name": "example_set_by_bot_name"
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при создании набора стикеров
|
||
|
||
#### POST /add_sticker_to_set
|
||
|
||
Добавляет стикер в существующий набор.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"sticker_set_name": "example_set",
|
||
"file_id": "file_id_from_telegram",
|
||
"emojis": "😀",
|
||
"is_animated": false,
|
||
"is_video": false
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
- `sticker_set_name` (string, обязательный): Название набора стикеров (без суффикса _by_bot)
|
||
- `file_id` (string, обязательный): File_id загруженного стикера
|
||
- `emojis` (string, обязательный): Список эмодзи для стикера
|
||
- `is_animated` (boolean, опциональный, по умолчанию false): Флаг анимированного стикера
|
||
- `is_video` (boolean, опциональный, по умолчанию false): Флаг видео-стикера
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"message": "Стикер успешно добавлен в набор!"
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при добавлении стикера в набор
|
||
|
||
#### GET /check_sticker_set_name/{sticker_set_name}
|
||
|
||
Проверяет, существует ли набор стикеров с указанным именем.
|
||
|
||
**Параметры пути:**
|
||
- `sticker_set_name` (string, обязательный): Название набора стикеров
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"exists": true
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при проверке существования набора стикеров
|
||
|
||
#### POST /delete_sticker_from_set
|
||
|
||
Удаляет стикер из набора.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"file_id": "file_id_from_telegram"
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `file_id` (string, обязательный): File_id стикера
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"message": "Стикер успешно удален из набора!"
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при удалении стикера из набора
|
||
|
||
#### POST /set_sticker_position_in_set
|
||
|
||
Изменяет позицию стикера в наборе.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"sticker_file_id": "file_id_from_telegram",
|
||
"position": 0
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `sticker_file_id` (string, обязательный): File_id стикера
|
||
- `position` (integer, обязательный): Новая позиция стикера (0 - первая позиция)
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"message": "Позиция стикера успешно изменена!"
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при изменении позиции стикера
|
||
|
||
#### POST /delete_sticker_set
|
||
|
||
Удаляет набор стикеров.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"sticker_set_name": "example_set_by_bot_name"
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `sticker_set_name` (string, обязательный): Полное название набора стикеров (включая суффикс _by_bot)
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"message": "Набор стикеров успешно удален!"
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при удалении набора стикеров
|
||
|
||
#### POST /create_sticker_set_db
|
||
|
||
Создает запись о стикерпаке в базе данных.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"sticker_set_name": "example_set_by_bot_name"
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
- `sticker_set_name` (string, обязательный): Полное название набора стикеров (включая суффикс _by_bot)
|
||
|
||
**Ответ (201 Created):**
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"set_name": "example_set_by_bot_name",
|
||
"user_id": 123456789
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 404 Not Found: Пользователь не найден
|
||
- 400 Bad Request: Ошибка валидации
|
||
- 500 Internal Server Error: Внутренняя ошибка сервера
|
||
|
||
#### GET /user_sticker_sets/{user_id}
|
||
|
||
Возвращает список названий всех стикерпаков пользователя.
|
||
|
||
**Параметры пути:**
|
||
- `user_id` (integer, обязательный): ID пользователя
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
[
|
||
{
|
||
"id": 1,
|
||
"set_name": "example_set_by_bot_name",
|
||
"user_id": 123456789
|
||
}
|
||
]
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 404 Not Found: Пользователь не найден
|
||
- 500 Internal Server Error: Внутренняя ошибка сервера
|
||
|
||
### Прокси для Telegram API
|
||
|
||
#### GET /stickers/packs/{pack_name}
|
||
|
||
Получает информацию о стикерпаке из Telegram.
|
||
|
||
**Параметры пути:**
|
||
- `pack_name` (string, обязательный): Название стикерпака
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"name": "example_set_by_bot_name",
|
||
"title": "Example Sticker Set",
|
||
"sticker_type": "regular",
|
||
"thumbnail_url": "http://localhost:8001/stickers/proxy/sticker/file_id_from_telegram",
|
||
"share_url": "https://t.me/addstickers/example_set_by_bot_name",
|
||
"stickers": [
|
||
{
|
||
"file_id": "file_id_from_telegram",
|
||
"emoji": "😀",
|
||
"position": 0,
|
||
"file_url": "http://localhost:8001/stickers/proxy/sticker/file_id_from_telegram"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### GET /stickers/proxy/sticker/{file_id}
|
||
|
||
Прокси для получения изображения стикера без раскрытия токена бота.
|
||
|
||
**Параметры пути:**
|
||
- `file_id` (string, обязательный): File ID стикера
|
||
|
||
**Ответ (200 OK):**
|
||
Изображение стикера в формате WebP с заголовками:
|
||
- Content-Type: image/webp
|
||
- Content-Disposition: inline
|
||
- Cache-Control: public, max-age=86400
|
||
|
||
**Ошибки:**
|
||
- 404 Not Found: Стикер не найден
|
||
- 500 Internal Server Error: Ошибка при получении стикера
|
||
|
||
#### POST /stickers/test/upload
|
||
|
||
Тестовый эндпоинт для загрузки изображения в Telegram.
|
||
|
||
**Форма запроса:**
|
||
- `user_id` (integer, обязательный): Telegram ID пользователя
|
||
- `image_url` (string, обязательный): URL изображения для загрузки
|
||
|
||
**Ответ (200 OK):**
|
||
```json
|
||
{
|
||
"success": true,
|
||
"file_id": "file_id_from_telegram",
|
||
"file_url": "http://localhost:8001/stickers/proxy/sticker/file_id_from_telegram"
|
||
}
|
||
```
|
||
|
||
**Ошибки:**
|
||
- 500 Internal Server Error: Ошибка при загрузке изображения
|
||
|
||
## Модели данных
|
||
|
||
### UserBase
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"username": "example_user",
|
||
"chat_id": 123456789,
|
||
"balance": 0
|
||
}
|
||
```
|
||
|
||
### UserCreate
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"username": "example_user",
|
||
"chat_id": 123456789,
|
||
"balance": 0
|
||
}
|
||
```
|
||
|
||
### ImageBase
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"link": "file_id_from_telegram",
|
||
"prompt_id": "prompt_id_from_comfyui",
|
||
"status": "COMPLETED",
|
||
"created_at": "2025-03-12T12:00:00",
|
||
"sticker_set_id": null
|
||
}
|
||
```
|
||
|
||
### StickerUploadRequest
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"link": "https://example.com/image.png"
|
||
}
|
||
```
|
||
|
||
### StickerSetRequest
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"sticker_set_name": "example_set",
|
||
"title": "Example Sticker Set",
|
||
"file_id": "file_id_from_telegram",
|
||
"emojis": "😀",
|
||
"is_animated": false,
|
||
"is_video": false
|
||
}
|
||
```
|
||
|
||
### StickerFileID
|
||
```json
|
||
{
|
||
"file_id": "file_id_from_telegram"
|
||
}
|
||
```
|
||
|
||
### StickerSetPosition
|
||
```json
|
||
{
|
||
"sticker_file_id": "file_id_from_telegram",
|
||
"position": 0
|
||
}
|
||
```
|
||
|
||
### StickerSetName
|
||
```json
|
||
{
|
||
"sticker_set_name": "example_set_by_bot_name"
|
||
}
|
||
```
|
||
|
||
### GenerateImageRequest
|
||
```json
|
||
{
|
||
"tag": "image_generation",
|
||
"user_id": 123456789,
|
||
"workflow": {
|
||
// Объект workflow для ComfyUI
|
||
}
|
||
}
|
||
```
|
||
|
||
### CreateStickerSetDBRequest
|
||
```json
|
||
{
|
||
"user_id": 123456789,
|
||
"sticker_set_name": "example_set_by_bot_name"
|
||
}
|
||
```
|
||
|
||
### StickerSetResponse
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"set_name": "example_set_by_bot_name",
|
||
"user_id": 123456789
|
||
}
|
||
```
|
||
|
||
### TaskPosition
|
||
```json
|
||
{
|
||
"task_id": 123,
|
||
"status": "PENDING",
|
||
"queue_position": 3
|
||
}
|
||
```
|
||
|
||
### PendingTask
|
||
```json
|
||
{
|
||
"task_id": 123,
|
||
"prompt_id": "prompt_id_from_comfyui",
|
||
"status": "PENDING",
|
||
"created_at": "2025-03-13T11:15:00",
|
||
"queue_position": 3,
|
||
"updated_at": "2025-03-13T11:20:00"
|
||
}
|