Бот ВКонтакте vs Telegram-бот: сравнение возможностей и руководство по миграции
Подробное сравнение VK Bot API и Telegram Bot API: архитектура, клавиатуры, файлы, ограничения, inline-режим. Что теряешь при переходе, что получаешь — и как переписать код с 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% российской аудитории.
Что читать дальше
- Telegram заблокирован: перенос бота в VK — пошаговый гайд — практические шаги и рабочий код для миграции
- Как создать бота ВКонтакте с нуля — токен, Long Poll, первый код за 30 минут
- vkbottle или vk_api: что выбрать — выбор Python-библиотеки под конкретную задачу
- Long Poll vs Callback API для бота ВК — архитектура для прод-запуска
- Бот для записи на услуги ВК — демо FSM — пример многошагового сценария, который чаще всего переносят с Telegram
- Python-библиотеки для ботов MAX: maxapi, aiomax — если рассматриваешь MAX как дополнительную платформу
Если нужна помощь с конкретным сценарием — опишите бота на странице «Заказать бота».
Реклама
Комментарии
Загрузка...