Базовый URL: http://<host>:8081
173 эндпоинта — полная поддержка Bot API 9.4.
Все ответы — JSON. При ошибке: {"detail": "описание ошибки"}.
Проверка работоспособности сервиса.
Ответ:
{"status": "ok", "time": "2025-01-01T12:00:00Z"}Статистика сообщений по статусам.
Ответ:
{"sent": 42, "error": 1, "deleted": 5, "dry_run": 3}Отправка текстового сообщения.
Тело запроса:
{
"chat_id": -100123456,
"text": "<b>Привет!</b>",
"template": "fleet_status",
"variables": {"title": "Статус"},
"parse_mode": "HTML",
"reply_to_message_id": 101,
"message_thread_id": 5,
"disable_web_page_preview": true,
"reply_markup": {
"inline_keyboard": [[{"text": "OK", "callback_data": "ok"}]]
},
"request_id": "external-uuid",
"live": false,
"dry_run": false
}Обязательно: chat_id + (text или template).
| Поле | Тип | Описание |
|---|---|---|
chat_id |
int/str | ID чата |
text |
str | Текст сообщения (до 4096 символов) |
template |
str | Имя Jinja2-шаблона (вместо text) |
variables |
object | Переменные для шаблона |
parse_mode |
str | HTML / MarkdownV2 |
reply_to_message_id |
int | ID сообщения для ответа |
message_thread_id |
int | ID топика (для форумов) |
disable_web_page_preview |
bool | Отключить превью ссылок |
reply_markup |
object | Inline/Reply клавиатура |
request_id |
str | Внешний ID для идемпотентности |
live |
bool | Пометка для прогресс-сообщений |
dry_run |
bool | Не отправлять в Telegram |
Ответ:
{
"message": {
"id": 1,
"chat_id": "-100123456",
"telegram_message_id": 42,
"status": "sent",
"text": "Привет!",
"parse_mode": "HTML",
"created_at": "...",
"sent_at": "..."
},
"result": {"message_id": 42}
}Редактирование сообщения по внутреннему ID.
Тело:
{
"text": "Новый текст",
"parse_mode": "HTML",
"reply_markup": null
}Удаление сообщения по внутреннему ID.
Получение сообщения по ID.
Список сообщений.
| Параметр | Тип | Описание |
|---|---|---|
chat_id |
str | Фильтр по чату |
status |
str | Фильтр по статусу (sent, error, deleted, dry_run) |
limit |
int | Количество (по умолчанию 50, макс. 500) |
offset |
int | Смещение |
Пересылка сообщения.
{
"chat_id": -100123456,
"from_chat_id": -100654321,
"message_id": 42
}Копирование сообщения (без пометки «Переслано»).
{
"chat_id": -100123456,
"from_chat_id": -100654321,
"message_id": 42,
"caption": "Новая подпись",
"parse_mode": "HTML"
}Отправка фото по URL или file_id (JSON).
{
"chat_id": -100123456,
"photo": "https://example.com/image.jpg",
"caption": "<b>Описание</b>",
"parse_mode": "HTML",
"reply_markup": null
}Загрузка фото файлом (multipart/form-data).
| Поле | Тип | Описание |
|---|---|---|
chat_id |
form | ID чата (обязательно) |
file |
file | Файл изображения (обязательно) |
caption |
form | Подпись |
parse_mode |
form | HTML / MarkdownV2 |
reply_to_message_id |
form | ID сообщения для ответа |
dry_run |
form | true — не отправлять |
curl -X POST http://127.0.0.1:8081/v1/media/upload-photo \
-F "chat_id=-100123456" \
-F "caption=Описание фото" \
-F "parse_mode=HTML" \
-F "file=@photo.jpg"Отправка документа по URL или file_id.
{
"chat_id": -100123456,
"document": "https://example.com/file.pdf",
"caption": "Документ"
}Отправка видео по URL или file_id.
{
"chat_id": -100123456,
"video": "https://example.com/video.mp4",
"caption": "Видео"
}Создание или обновление шаблона.
{
"name": "report",
"body": "<b>{{ title }}</b>\n{{ content }}",
"parse_mode": "HTML",
"description": "Шаблон отчёта"
}Список всех шаблонов.
Получение шаблона по имени.
Рендеринг шаблона с переменными (без отправки).
{"variables": {"title": "Отчёт", "content": "Содержимое"}}Ответ:
{"text": "<b>Отчёт</b>\nСодержимое", "parse_mode": "HTML"}Загрузка шаблонов из директории templates/.
Создание или обновление набора команд.
{
"scope_type": "chat_member",
"chat_id": -100123456,
"user_id": 777,
"commands": [
{"command": "start", "description": "Начать работу"},
{"command": "help", "description": "Справка"}
]
}| scope_type | Описание |
|---|---|
default |
Глобальные команды |
all_private_chats |
Все личные чаты |
all_group_chats |
Все групповые чаты |
chat |
Конкретный чат |
chat_administrators |
Администраторы чата |
chat_member |
Конкретный пользователь в конкретном чате |
Список всех наборов команд.
Синхронизация набора с Telegram (вызов setMyCommands).
{"command_set_id": 1}Ответ на нажатие inline-кнопки.
{
"callback_query_id": "123456789",
"text": "Принято!",
"show_alert": false
}Список полученных callback queries.
| Параметр | Тип | Описание |
|---|---|---|
chat_id |
str | Фильтр по чату |
user_id |
str | Фильтр по пользователю |
answered |
bool | Фильтр: отвечен/не отвечен |
limit |
int | Количество |
offset |
int | Смещение |
Получение callback query по ID.
Информация о чате от Telegram API (getChat).
Статус участника чата (getChatMember).
Количество участников (getChatMemberCount).
Закрепить сообщение в чате.
Открепить сообщение.
Данные о чате из локальной БД (из вебхуков).
Пользователи из БД, которые писали в данном чате.
Приём обновлений от Telegram (webhook target).
Приём обновлений от Telegram с привязкой к конкретному боту.
Список полученных обновлений.
| Параметр | Тип | Описание |
|---|---|---|
limit |
int | Количество |
offset |
int | Смещение |
update_type |
str | Фильтр: message, callback_query, edited_message |
bot_id |
int | Фильтр по боту (мультибот) |
Long polling через getUpdates.
| Параметр | Тип | Описание |
|---|---|---|
bot_id |
int | Бот для polling (если не указан, используется default context) |
offset |
int | Явный offset. Если не указан, берётся из update_offset для bot context |
limit |
int | До 100 обновлений |
timeout |
int | Таймаут long polling (сек) |
allowed_updates |
list[str] | Фильтр типов обновлений |
Подтверждение обработанного offset.
{
"offset": 123457,
"bot_id": 123456789
}bot_id опционален. При отсутствии обновляется default offset context.
Текущий offset для polling context.
| Параметр | Тип | Описание |
|---|---|---|
bot_id |
int | Вернуть offset конкретного бота. Без параметра — default context |
Настройка вебхука у Telegram.
{
"url": "https://example.com/telegram/webhook",
"secret_token": "my-secret",
"allowed_updates": ["message", "callback_query"]
}Удаление вебхука.
Текущая конфигурация вебхука (getWebhookInfo).
Создание опроса или викторины.
Тело запроса:
{
"chat_id": -100123456,
"question": "Какой язык программирования вы предпочитаете?",
"options": ["Python", "JavaScript", "Go", "Rust"],
"type": "quiz",
"correct_option_id": 0,
"explanation": "Python — самый популярный язык для ML и data science",
"explanation_parse_mode": "HTML",
"is_anonymous": true,
"allows_multiple_answers": false,
"open_period": 300,
"reply_markup": null
}| Поле | Тип | Описание |
|---|---|---|
chat_id |
int/str | ID чата (обязательно) |
question |
str | Вопрос (1-300 символов, обязательно) |
options |
list[str] | Варианты ответа (2-10 шт., обязательно) |
type |
str | regular (по умолчанию) или quiz |
correct_option_id |
int | Индекс правильного ответа (только для quiz) |
explanation |
str | Пояснение к правильному ответу (макс. 200 символов) |
explanation_parse_mode |
str | HTML / MarkdownV2 для пояснения |
is_anonymous |
bool | Анонимное голосование (по умолчанию true) |
allows_multiple_answers |
bool | Множественный выбор (только regular) |
open_period |
int | Время открытого голосования в секундах (5-600) |
close_date |
int | Unix timestamp закрытия опроса |
is_closed |
bool | Создать закрытый опрос |
reply_markup |
object | Inline-клавиатура |
Ответ:
{
"id": 1,
"chat_id": "-100123456",
"telegram_message_id": 42,
"poll_id": "5312345678901234567",
"question": "Какой язык программирования вы предпочитаете?",
"type": "quiz",
"is_closed": false,
"status": "sent"
}Остановка опроса с показом результатов.
Параметры пути:
chat_id— ID чатаmessage_id— telegram_message_id опроса
Ответ:
{
"poll_id": "5312345678901234567",
"question": "...",
"total_voter_count": 42,
"is_closed": true
}Список опросов с фильтрацией.
| Параметр | Тип | Описание |
|---|---|---|
chat_id |
str | Фильтр по чату |
type |
str | Фильтр по типу (regular, quiz) |
is_closed |
bool | Фильтр: закрыт/открыт |
limit |
int | Количество (по умолчанию 50, макс. 500) |
offset |
int | Смещение |
Получение опроса по poll_id.
Все ответы пользователей на опрос.
Ответ:
[
{
"id": 1,
"poll_id": "5312345678901234567",
"user_id": "777",
"option_ids": [0, 2],
"created_at": "..."
}
]Установка реакции на сообщение.
Тело запроса:
{
"chat_id": -100123456,
"message_id": 42,
"reaction": [
{"type": "emoji", "emoji": "👍"},
{"type": "emoji", "emoji": "🔥"}
],
"is_big": false
}| Поле | Тип | Описание |
|---|---|---|
chat_id |
int/str | ID чата (обязательно) |
message_id |
int | telegram_message_id (обязательно) |
reaction |
list[object] | Список реакций (пустой = удалить все) |
is_big |
bool | Большая анимация (по умолчанию false) |
Типы реакций:
// Эмодзи
{"type": "emoji", "emoji": "👍"}
// Кастомное эмодзи (Premium)
{"type": "custom_emoji", "custom_emoji_id": "5312536423851630001"}
// Платная реакция (Telegram Stars)
{"type": "paid"}Популярные эмодзи: 👍, 👎, ❤️, 🔥, 🥰, 👏, 😁, 🤔, 🤯, 😱, 🤬, 😢, 🎉, 🤩, 🤮, 💩, 🙏, 👌, 🕊, 🤡, 🥱, 🥴, 😍, 🐳, ❤🔥, 🌚, 🌭, 💯, 🤣, ⚡, 🍌, 🏆, 💔, 🤨, 😐, 🍓, 🍾, 💋, 🖕, 😈, 😴, 😭, 🤓, 👻, 👨💻, 👀, 🎃, 🙈, 😇, 😨, 🤝, ✍, 🤗, 🫡, 🎅, 🎄, ☃, 💅, 🤪, 🗿, 🆒, 💘, 🙉, 🦄, 😘, 💊, 🙊, 😎, 👾, 🤷♂️, 🤷, 🤷♀️, 😡
Ответ:
{
"success": true
}Список реакций с фильтрацией.
| Параметр | Тип | Описание |
|---|---|---|
chat_id |
str | Фильтр по чату |
user_id |
str | Фильтр по пользователю |
reaction_type |
str | Фильтр по типу (emoji, custom_emoji, paid) |
limit |
int | Количество |
offset |
int | Смещение |
Все реакции на конкретное сообщение.
Ответ:
[
{
"id": 1,
"chat_id": "-100123456",
"telegram_message_id": 42,
"user_id": "777",
"reaction_type": "emoji",
"emoji": "👍",
"created_at": "..."
}
]Информация о боте (getMe): имя, username, поддерживаемые фичи.
Создание веб-страницы.
{
"title": "Мой опрос",
"page_type": "survey",
"slug": "my-survey",
"config": {
"fields": [
{"name": "rating", "type": "select", "label": "Оценка", "options": ["1", "2", "3", "4", "5"]}
]
},
"bot_id": 123456789,
"event_id": null
}| Поле | Тип | Описание |
|---|---|---|
title |
str | Заголовок страницы (обязательно) |
page_type |
str | page, survey, prediction (по умолчанию page) |
slug |
str | URL-slug (генерируется автоматически если не указан) |
config |
object | Конфигурация страницы (поля формы, контент и т.д.) |
template |
str | Имя шаблона для рендеринга |
bot_id |
int | ID бота |
event_id |
int | ID события предсказаний (для type=prediction) |
Список страниц.
| Параметр | Тип | Описание |
|---|---|---|
page_type |
str | Фильтр по типу |
is_active |
bool | Фильтр: активные/неактивные |
limit |
int | Количество (по умолчанию 50) |
offset |
int | Смещение |
Конфигурация страницы по slug.
Удаление страницы.
Создание индивидуальной ссылки.
{
"user_id": 777,
"chat_id": -100123456,
"metadata": {"source": "private_message"},
"expires_at": "2026-03-01T00:00:00Z"
}Ответ:
{
"token": "a1b2c3d4e5f6...",
"url": "https://tg.example.com:8090/l/a1b2c3d4e5f6..."
}Ответы на форму страницы.
| Параметр | Тип | Описание |
|---|---|---|
limit |
int | Количество |
offset |
int | Смещение |
Список зарегистрированных ботов.
Регистрация нового бота по токену.
{"token": "123456:ABC-DEF", "is_default": true}Бот по умолчанию.
Установить бота по умолчанию.
Деактивировать бота.
Установить фото профиля бота (Bot API 9.4).
{"photo": {"type": "static", "sticker": "..."}, "is_public": true, "bot_id": null}Удалить фото профиля бота.
Получить аудио профиля пользователя (Bot API 9.4).
| Параметр | Тип | Описание |
|---|---|---|
bot_id |
int | Бот (опционально) |
offset |
int | Смещение |
limit |
int | Количество |
Редактировать Star-подписку пользователя (Bot API 8.0).
{"user_id": 777, "telegram_payment_charge_id": "...", "is_canceled": true}Создать топик в форум-группе.
{"chat_id": -100123456, "name": "Обсуждение", "icon_color": 7322096, "icon_custom_emoji_id": "..."}Редактировать имя/иконку топика.
Закрыть топик.
Повторно открыть топик.
Удалить топик.
Скрыть General-топик.
Показать General-топик.
Опубликовать историю в канал.
{"chat_id": -100123456, "content": {"type": "photo", "photo": "..."}, "caption": "..."}Редактировать опубликованную историю.
Удалить историю.
Репост истории из одного канала в другой (Bot API 9.3).
{"chat_id": -100123456, "from_chat_id": -100654321, "story_id": 42}Одобрить предложенный пост в бизнес-канале.
{"business_connection_id": "abc123", "message_id": 42, "is_scheduled": false}Отклонить предложенный пост.
{"business_connection_id": "abc123", "message_id": 42}Отправить интерактивный чек-лист (до 30 задач).
{
"chat_id": -100123456,
"title": "Задачи на сегодня",
"tasks": [
{"id": 1, "text": "Первая задача"},
{"id": 2, "text": "Вторая задача", "checked": true}
]
}Редактировать существующий чек-лист.
Баланс звёзд бота (Bot API 9.1).
Создать счёт на оплату Stars.
Возврат Stars платежа.
История транзакций Stars.
Подарить премиум-подписку за звёзды (Bot API 9.3).
{"user_id": 777, "month_count": 3, "star_count": 1000}Подарки пользователя (Bot API 9.3).
Подарки чата (Bot API 9.3).
Отправить черновик сообщения (для стриминга LLM).
{
"business_connection_id": "abc123",
"chat_id": 123456789,
"text": "Текст черновика",
"parse_mode": "HTML"
}Следующие параметры добавлены во все send-методы (messages, media, checklists):
| Параметр | Тип | Описание |
|---|---|---|
direct_messages_topic_id |
int | Маршрутизация в топик через Direct Messages |
suggested_post_parameters |
object | Параметры для предложенных постов |
| Код | Описание |
|---|---|
| 400 | Неверный запрос (валидация) |
| 404 | Ресурс не найден |
| 409 | Конфликт (напр., нет telegram_message_id для edit) |
| 502 | Ошибка Telegram Bot API |
| 500 | Внутренняя ошибка сервера |