StickerAI-Front/API_DOCUMENTATION.md
2025-03-13 15:51:19 +03:00

16 KiB
Raw Blame History

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 для ComfyUI
  • tag (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"
}