VK vs Telegram-бот: сравнение возможностей и миграция кода
Сравнение VK Bot API и Telegram Bot API: архитектура, клавиатуры, ограничения. Что теряешь при переходе и как переписать код с aiogram на vkbottle.
Содержание статьи
Telegram заблокирован в России с апреля 2026 года. Если у тебя был бот для бизнеса — нужно принять решение: перенести в VK, в MAX или держаться на VPN-трафике. Эта статья поможет с первым вариантом: разберём, чем VK Bot API отличается от Telegram Bot API, что при переходе теряешь, что приобретаешь, и как переписать типовой код.
Архитектурные различия
Первое, что нужно понять: в Telegram бот — отдельная сущность с собственным аккаунтом. В VK бот — это процесс, который работает от имени сообщества.
| Telegram | VK | |
|---|---|---|
| Регистрация бота | @BotFather → токен бота | Настройки сообщества → токен сообщества |
| Идентификация | Бот — отдельный аккаунт | Бот — часть сообщества |
| Нужен аккаунт создателя | Любой Telegram-аккаунт | Аккаунт VK + созданное сообщество |
| Получение событий | Polling (getUpdates) или Webhook (setWebhook) | Long Poll API или Callback API |
| Идентификатор чата | chat_id | peer_id |
| Идентификатор пользователя | user.id | message.from_id |
Практическое следствие: в VK у бота нет отдельного профиля в поиске. Пользователи пишут боту через раздел «Сообщения» сообщества, а не находят его как контакт.
Сообщения и текст
| Telegram | VK | |
|---|---|---|
| Максимальная длина сообщения | 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. Синтаксис разный, концепция похожая.
| Telegram | VK | |
|---|---|---|
| Inline-клавиатура | InlineKeyboardMarkup | Keyboard(inline=True) |
| Reply-клавиатура | ReplyKeyboardMarkup | Keyboard(inline=False) |
| Callback-кнопки | callback_data (строка до 64 байт) | payload (JSON до 255 байт) |
| Callback-событие | callback_query | message_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 получаешь сразу разобранный словарь, не нужно парсить строку.
Файлы и медиа
| Telegram | VK | |
|---|---|---|
| Максимальный размер файла | 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 важно помнить: пользователь должен разрешить сообщения от сообщества — иначе метод вернёт ошибку.
Итоговая таблица
| Возможность | Telegram | VK | При миграции |
|---|---|---|---|
| Polling | Да | Да (Long Poll) | Переписать, логика та же |
| Webhook | Да | Да (Callback API) | Переписать endpoint |
| Inline-клавиатура | Да | Да | Изменить синтаксис |
| Reply-клавиатура | Да | Да | Изменить синтаксис |
| Inline-режим (в чужих чатах) | Да | Нет | Убрать функционал |
| Markdown/HTML в тексте | Да | Нет | Убрать разметку |
| Файлы до 50 МБ | Да | Да | Изменить формат ссылки |
| FSM | Да (aiogram) | Да (vkbottle) | Переписать |
| Рассылка | Да | Да | Изменить синтаксис |
| Автопост в канал/стену | Да | Да (wall.post) | Другой метод |
| Оплата | Telegram Payments | VK 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 сейчас покрывает максимальную долю клиентов без барьеров.
Что читать дальше
- Telegram заблокирован: перенос бота в VK — пошаговый гайд — практические шаги и рабочий код для миграции
- Как создать бота ВКонтакте с нуля — токен, Long Poll, первый код за 30 минут
- vkbottle или vk_api: что выбрать — выбор Python-библиотеки под конкретную задачу
- Long Poll vs Callback API для бота ВК — архитектура для прод-запуска
- Бот для записи на услуги ВК — демо FSM — пример многошагового сценария, который чаще всего переносят с Telegram
- Python-библиотеки для ботов MAX: maxapi, aiomax — если рассматриваешь MAX как дополнительную платформу
Если нужна помощь с конкретным сценарием — опишите бота на странице «Заказать бота».
Комментарии
Загрузка...