16 KiB
API Документация
Обзор
API предоставляет функциональность для работы со стикерами в Telegram, включая генерацию изображений, создание стикерпаков и управление ими. Также API поддерживает отслеживание позиций задач в очереди.
Базовый URL: http://localhost:8001
Эндпоинты
Проверка работоспособности
GET /health
Проверяет работоспособность API.
Ответ:
{
"status": "ok"
}
Управление пользователями
POST /register
Регистрирует нового пользователя в системе.
Тело запроса:
{
"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):
{
"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):
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
Ошибки:
- 404 Not Found: Пользователь не найден
Генерация изображений и управление очередью
POST /generate_image
Создает задачу на генерацию изображения с использованием ComfyUI.
Тело запроса:
{
"user_id": 123456789,
"workflow": {
// Объект workflow для ComfyUI
},
"tag": "image_generation"
}
Параметры:
user_id(integer, обязательный): ID пользователяworkflow(object, обязательный): Объект workflow для ComfyUItag(string, обязательный): Тег для типа задачи (допустимое значение: "image_generation")
Ответ (200 OK):
{
"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):
[
{
"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):
{
"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):
[
{
"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.
Тело запроса:
{
"user_id": 123456789,
"link": "https://example.com/image.png"
}
Параметры:
user_id(integer, обязательный): ID пользователяlink(string, обязательный): URL или путь к файлу стикера
Ответ (200 OK):
{
"file_id": "file_id_from_telegram"
}
Ошибки:
- 500 Internal Server Error: Ошибка при загрузке файла на сервер Telegram
POST /create_sticker_set
Создает новый набор стикеров.
Тело запроса:
{
"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):
{
"message": "Новый набор стикеров успешно создан!",
"name": "example_set_by_bot_name"
}
Ошибки:
- 500 Internal Server Error: Ошибка при создании набора стикеров
POST /add_sticker_to_set
Добавляет стикер в существующий набор.
Тело запроса:
{
"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):
{
"message": "Стикер успешно добавлен в набор!"
}
Ошибки:
- 500 Internal Server Error: Ошибка при добавлении стикера в набор
GET /check_sticker_set_name/{sticker_set_name}
Проверяет, существует ли набор стикеров с указанным именем.
Параметры пути:
sticker_set_name(string, обязательный): Название набора стикеров
Ответ (200 OK):
{
"exists": true
}
Ошибки:
- 500 Internal Server Error: Ошибка при проверке существования набора стикеров
POST /delete_sticker_from_set
Удаляет стикер из набора.
Тело запроса:
{
"file_id": "file_id_from_telegram"
}
Параметры:
file_id(string, обязательный): File_id стикера
Ответ (200 OK):
{
"message": "Стикер успешно удален из набора!"
}
Ошибки:
- 500 Internal Server Error: Ошибка при удалении стикера из набора
POST /set_sticker_position_in_set
Изменяет позицию стикера в наборе.
Тело запроса:
{
"sticker_file_id": "file_id_from_telegram",
"position": 0
}
Параметры:
sticker_file_id(string, обязательный): File_id стикераposition(integer, обязательный): Новая позиция стикера (0 - первая позиция)
Ответ (200 OK):
{
"message": "Позиция стикера успешно изменена!"
}
Ошибки:
- 500 Internal Server Error: Ошибка при изменении позиции стикера
POST /delete_sticker_set
Удаляет набор стикеров.
Тело запроса:
{
"sticker_set_name": "example_set_by_bot_name"
}
Параметры:
sticker_set_name(string, обязательный): Полное название набора стикеров (включая суффикс _by_bot)
Ответ (200 OK):
{
"message": "Набор стикеров успешно удален!"
}
Ошибки:
- 500 Internal Server Error: Ошибка при удалении набора стикеров
POST /create_sticker_set_db
Создает запись о стикерпаке в базе данных.
Тело запроса:
{
"user_id": 123456789,
"sticker_set_name": "example_set_by_bot_name"
}
Параметры:
user_id(integer, обязательный): ID пользователяsticker_set_name(string, обязательный): Полное название набора стикеров (включая суффикс _by_bot)
Ответ (201 Created):
{
"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):
[
{
"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):
{
"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):
{
"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
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
UserCreate
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
ImageBase
{
"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
{
"user_id": 123456789,
"link": "https://example.com/image.png"
}
StickerSetRequest
{
"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
{
"file_id": "file_id_from_telegram"
}
StickerSetPosition
{
"sticker_file_id": "file_id_from_telegram",
"position": 0
}
StickerSetName
{
"sticker_set_name": "example_set_by_bot_name"
}
GenerateImageRequest
{
"tag": "image_generation",
"user_id": 123456789,
"workflow": {
// Объект workflow для ComfyUI
}
}
CreateStickerSetDBRequest
{
"user_id": 123456789,
"sticker_set_name": "example_set_by_bot_name"
}
StickerSetResponse
{
"id": 1,
"set_name": "example_set_by_bot_name",
"user_id": 123456789
}
TaskPosition
{
"task_id": 123,
"status": "PENDING",
"queue_position": 3
}
PendingTask
{
"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"
}