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

Бот ВКонтакте vs Telegram-бот: сравнение возможностей и руководство по миграции

Подробное сравнение VK Bot API и Telegram Bot API: архитектура, клавиатуры, файлы, ограничения, inline-режим. Что теряешь при переходе, что получаешь — и как переписать код с 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% российской аудитории.

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

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

Реклама

Комментарии

Загрузка...