Заказать бота

VK vs Telegram-бот: сравнение возможностей и миграция кода

Сравнение VK Bot API и Telegram Bot API: архитектура, клавиатуры, ограничения. Что теряешь при переходе и как переписать код с aiogram на vkbottle.

Содержание статьи

Telegram заблокирован в России с апреля 2026 года. Если у тебя был бот для бизнеса — нужно принять решение: перенести в VK, в MAX или держаться на VPN-трафике. Эта статья поможет с первым вариантом: разберём, чем VK Bot API отличается от Telegram Bot API, что при переходе теряешь, что приобретаешь, и как переписать типовой код.

Архитектурные различия

Первое, что нужно понять: в Telegram бот — отдельная сущность с собственным аккаунтом. В VK бот — это процесс, который работает от имени сообщества.

TelegramVK
Регистрация бота@BotFather → токен ботаНастройки сообщества → токен сообщества
ИдентификацияБот — отдельный аккаунтБот — часть сообщества
Нужен аккаунт создателяЛюбой Telegram-аккаунтАккаунт VK + созданное сообщество
Получение событийPolling (getUpdates) или Webhook (setWebhook)Long Poll API или Callback API
Идентификатор чатаchat_idpeer_id
Идентификатор пользователяuser.idmessage.from_id

Практическое следствие: в VK у бота нет отдельного профиля в поиске. Пользователи пишут боту через раздел «Сообщения» сообщества, а не находят его как контакт.

Сообщения и текст

TelegramVK
Максимальная длина сообщения4 096 символов~4 096 байт (для кириллицы — короче)
ФорматированиеMarkdown, HTMLТолько \n для переносов, без разметки
Редактирование отправленногоДа (editMessageText)Да (messages.edit)
Удаление сообщенияДаДа
ПересылкаДаДа (attachments: forward)

Важное ограничение VK: нет Markdown и HTML-разметки в сообщениях бота. Жирный текст, ссылки в тексте, моноширинный шрифт — всего этого нет. Единственное форматирование — переносы строк и эмодзи.

Если в Telegram ты писал:

await message.answer("*Заказ принят!*\nНомер: `12345`", parse_mode="Markdown")

В VK это будет просто:

await message.answer("Заказ принят!\nНомер: 12345")

Клавиатуры и кнопки

Оба API поддерживают два типа клавиатур — обычную (reply) и inline. Синтаксис разный, концепция похожая.

TelegramVK
Inline-клавиатураInlineKeyboardMarkupKeyboard(inline=True)
Reply-клавиатураReplyKeyboardMarkupKeyboard(inline=False)
Callback-кнопкиcallback_data (строка до 64 байт)payload (JSON до 255 байт)
Callback-событиеcallback_querymessage_event
URL-кнопкиДаДа
Кнопка «Поделиться геолокацией»ДаНет
Количество кнопок в рядуДо 8До 4

Различие в callback: в Telegram callback — это строка. В VK — JSON-объект. Это удобнее: можно передавать структурированные данные.

Telegram:

InlineKeyboardButton(text="Цена", callback_data="show_price")

VK:

Callback("Цена", {"action": "show_price", "item_id": 42})

При обработке в VK получаешь сразу разобранный словарь, не нужно парсить строку.

Файлы и медиа

TelegramVK
Максимальный размер файла50 МБ (через Bot API)50 МБ
Количество вложений за раз1 (или медиагруппа до 10)До 10
ФотоДаДа
ВидеоДаДа
АудиоДаДа
Документы (любой формат)ДаПочти все, кроме исполняемых
Голосовые сообщенияДаДа
СтикерыДа (отправка и получение)Да (VK-стикеры)
GIF / анимацияДаДа
Inline-медиа (без скачивания)Да (file_id)Да (attachment string)

Основная разница в формате ссылки на медиа. В Telegram используется file_id. В VK — строка вида photo{owner_id}_{photo_id}:

# VK: отправка фото по attachment string
await api.messages.send(
    peer_id=peer_id,
    attachment="photo-123456789_987654321",
    random_id=0
)

Чего нет в VK, что есть в Telegram

Inline-режим

В Telegram бот может отвечать прямо в строке ввода любого чата — пользователь пишет @мой_бот запрос и получает результаты. В VK такого режима нет совсем.

Если твой бот использовал InlineQueryHandler — этот функционал при миграции придётся переосмыслить или убрать.

Команды в меню

В Telegram есть встроенное меню команд (/start, /help) — пользователь нажимает / и видит список. В VK такого меню нет. Можно сделать приветственное сообщение с кнопками — работает лучше для нетехнических пользователей.

Публичные каналы с ботами

В Telegram бот может быть администратором канала и автоматически постить контент. В VK бот пишет только в личные диалоги (сообщения сообщества). Для автопостинга на стену используется отдельный метод wall.post — через API сообщества, не через бот-диалог.

Что есть в VK, чего нет в Telegram

Приветственное сообщение без кода

В настройках сообщества ВКонтакте можно включить автоматическое приветственное сообщение — оно отправляется при первом обращении пользователя. Без единой строчки кода.

Кнопка «Начать» в интерфейсе

Пользователь видит кнопку «Начать» перед первым сообщением боту — это стандартная кнопка VK, не требует настройки. В Telegram аналог — команда /start, но её нужно явно обрабатывать.

Товары и услуги рядом с ботом

Сообщество VK — это полноценная страница с товарами, отзывами, картой, контактами. Бот работает в контексте уже готового «магазина». В Telegram бот существует изолированно.

Миграция кода: типовые паттерны

Обработчик входящего сообщения

aiogram (Telegram):

@dp.message(F.text)
async def handle_text(message: Message):
    user_id = message.from_user.id
    text = message.text
    await message.answer(f"Ты написал: {text}")

vkbottle (VK):

@bot.on.message()
async def handle_text(message: Message):
    user_id = message.from_id
    text = message.text
    await message.answer(f"Ты написал: {text}")

Команда /start → первое приветствие

aiogram:

@dp.message(Command("start"))
async def cmd_start(message: Message):
    await message.answer("Привет!")

vkbottle:

# Событие первого обращения (аналог /start)
@bot.on.message_event()  # или через text="начать"
async def cmd_start(message: Message):
    await message.answer("Привет!")

В VK нет прямого аналога /start как команды. Обычно обрабатывают первое сообщение или используют кнопку «Начать» через событие.

FSM (состояния диалога)

В aiogram есть встроенный FSMContext. В vkbottle FSM реализован иначе — через StateMachine.

aiogram:

class OrderStates(StatesGroup):
    waiting_name = State()
    waiting_phone = State()

@dp.message(Command("order"))
async def start_order(message: Message, state: FSMContext):
    await state.set_state(OrderStates.waiting_name)
    await message.answer("Введите имя:")

@dp.message(OrderStates.waiting_name)
async def get_name(message: Message, state: FSMContext):
    await state.update_data(name=message.text)
    await state.set_state(OrderStates.waiting_phone)
    await message.answer("Введите телефон:")

vkbottle:

from vkbottle.dispatch.rules.base import ABCRule
from vkbottle_types.events import GroupTypes

class OrderFSM(ABCRule):
    ...

# vkbottle использует ContextInstanceMixin и лейблы состояний
# Логика схожа, но API другое — см. документацию vkbottle FSM

FSM в vkbottle — самое заметное отличие от aiogram. Заложи время на переработку сценариев с несколькими шагами.

Рассылка по базе пользователей

Telegram:

for chat_id in user_ids:
    await bot.send_message(chat_id=chat_id, text="Акция!")
    await asyncio.sleep(0.05)  # лимит: ~20 msg/sec

VK:

for user_id in user_ids:
    await api.messages.send(
        user_id=user_id,
        message="Акция!",
        random_id=0
    )
    await asyncio.sleep(0.05)  # лимит VK API: 20 req/sec

Лимиты рассылки похожи. В VK важно помнить: пользователь должен разрешить сообщения от сообщества — иначе метод вернёт ошибку.

Итоговая таблица

ВозможностьTelegramVKПри миграции
PollingДаДа (Long Poll)Переписать, логика та же
WebhookДаДа (Callback API)Переписать endpoint
Inline-клавиатураДаДаИзменить синтаксис
Reply-клавиатураДаДаИзменить синтаксис
Inline-режим (в чужих чатах)ДаНетУбрать функционал
Markdown/HTML в текстеДаНетУбрать разметку
Файлы до 50 МБДаДаИзменить формат ссылки
FSMДа (aiogram)Да (vkbottle)Переписать
РассылкаДаДаИзменить синтаксис
Автопост в канал/стенуДаДа (wall.post)Другой метод
ОплатаTelegram PaymentsVK PayПереинтегрировать
Мини-приложенияДаДаОтдельная миграция

Что в итоге

VK Bot API — полноценная замена Telegram для большинства бизнес-сценариев: автоответы, запись, уведомления, воронки продаж. Основное, что теряешь — inline-режим и форматирование текста. Всё остальное переписывается за день-два для простых ботов, за неделю — для сложных сценариев с FSM и интеграциями.

Главное преимущество VK сейчас: он в белом списке Минцифры и работает без VPN у 100% российской аудитории.

FAQ

Чем VK Bot API отличается от Telegram Bot API?

Главные различия: VK работает только от имени сообщества (бот ≠ отдельная сущность), нет inline-режима, нет HTML/Markdown форматирования, клавиатура задаётся как JSON, а не объектом. Многоступенчатые диалоги через FSM работают одинаково — с aiogram или vkbottle.

vkbottle и aiogram — насколько похожи API?

Оба — асинхронные фреймворки с декораторами @bot.on.message, FSM через StateGroup/StateRule, middleware. Если вы знаете aiogram, освоить vkbottle — день. Главное отличие: в vkbottle всегда работаете с peer_id (унифицированный ID получателя), в aiogram — с chat_id/user_id.

Можно ли использовать один и тот же FSM для VK и Telegram?

Логику состояний — да, реализацию — нет. Состояния хранятся в state_dispenser (vkbottle) или в FSMContext (aiogram). Можно вынести бизнес-логику в чистые функции и вызывать из обоих обработчиков, но storage у каждого свой.

Что не получится перенести из Telegram в VK?

Inline-режим (бот в чате при вводе @bot_name), webhook-стайл интеграции (в VK есть Callback API, но настройка отличается), редактирование сообщений после отправки (в VK ограничено). Команды через / работают, но в VK обычно используют кнопки клавиатуры вместо команд.

Стоит ли держать бота параллельно в Telegram и VK?

Если у вас уже есть Telegram-бот и аудитория с VPN — да, имеет смысл. Параллельный VK-бот покрывает ту часть аудитории, что без VPN. Архитектура: общая бизнес-логика → два тонких адаптера (vkbottle + aiogram). Но это требует больше времени на поддержку.

Что быстрее — Telegram или VK Bot API?

В среднем Telegram отвечает быстрее (50–100 мс), VK медленнее (100–300 мс). Для пользователя разница незаметна, но при массовых рассылках суммарное время отличается. VK строже относится к rate limit на массовые операции.

Какая аудитория у VK против Telegram в России 2026?

После блокировки Telegram в апреле 2026: VK — 110+ млн активных пользователей, MAX — 100+ млн (предустановлен на смартфоны), Telegram — около 60% от прежней аудитории через VPN. Для бизнеса VK сейчас покрывает максимальную долю клиентов без барьеров.

Что читать дальше

Если нужна помощь с конкретным сценарием — опишите бота на странице «Заказать бота».

Комментарии

Загрузка...