Разработка мобильного чат-бота для ВКонтакте
VK Bot API — один из самых развитых в СНГ: Callback API, Long Poll, Keyboard, Carousel, VK Mini Apps. Аудитория ВКонтакте — 100M+ пользователей в РФ и СНГ. Для российских бизнесов это основной мессенджер-канал наряду с Telegram.
Два способа получать сообщения: Callback vs Long Poll
Callback API — VK шлёт POST на ваш HTTPS-сервер при каждом событии. Аналог webhook. Подходит для продакшена.
Long Poll — ваш сервер делает GET-запрос, который «висит» до появления нового события. Работает без HTTPS, удобен для разработки.
Callback API настраивается в разделе «Управление» → «Работа с API» → «Callback API» группы ВКонтакте. При добавлении VK отправляет confirmation событие — нужно вернуть строку из настроек:
from fastapi import FastAPI, Request
app = FastAPI()
CONFIRMATION_TOKEN = "abc123xyz" # Из настроек группы
SECRET_KEY = "your_secret" # Для проверки подписи
@app.post("/vk/webhook")
async def vk_webhook(request: Request):
data = await request.json()
# Проверка подписи
if data.get("secret") != SECRET_KEY:
return "forbidden"
if data["type"] == "confirmation":
return CONFIRMATION_TOKEN
if data["type"] == "message_new":
message = data["object"]["message"]
await handle_message(message)
return "ok" # VK требует именно строку "ok"
Если вернуть не "ok" — VK будет повторно слать событие до 3 раз, потом пометит доставку как неуспешную.
Отправка сообщений: Messages API
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
# Через vk_api библиотеку
vk_session = vk_api.VkApi(token=GROUP_TOKEN)
vk = vk_session.get_api()
def send_message(peer_id: int, text: str, keyboard=None):
params = {
"peer_id": peer_id,
"message": text,
"random_id": 0 # 0 = автоматический random_id для защиты от дублей
}
if keyboard:
params["keyboard"] = json.dumps(keyboard)
vk.messages.send(**params)
random_id — важная деталь: VK дедуплицирует сообщения по (peer_id, random_id). При random_id=0 — автоматически. При фиксированном значении повторный вызов не создаст новое сообщение — защита от двойной отправки.
Keyboard и Carousel
VK Keyboard — аналог Telegram InlineKeyboard, но с двумя режимами: обычная клавиатура (inline: false) заменяет системную, inline (inline: true) крепится к конкретному сообщению.
keyboard = {
"inline": False,
"one_time": False, # Не скрывать после нажатия
"buttons": [
[
{
"action": {
"type": "text",
"label": "Каталог",
"payload": json.dumps({"command": "catalog"})
},
"color": "primary"
},
{
"action": {
"type": "text",
"label": "Корзина",
"payload": json.dumps({"command": "cart"})
},
"color": "secondary"
}
]
]
}
Цвета кнопок: primary (синий), secondary (белый), positive (зелёный), negative (красный). Максимум 4 кнопки в ряду, 10 рядов.
Carousel (шаблон carousel) — горизонтальная карусель карточек, аналог Generic Template в Messenger. До 10 элементов, каждый с изображением, заголовком, описанием и кнопками.
VK Mini Apps
VK Mini Apps — веб-приложения внутри ВКонтакте, аналог Telegram Mini App. SDK: @vkontakte/vk-bridge.
import bridge from '@vkontakte/vk-bridge';
bridge.subscribe((e) => {
if (e.detail.type === 'VKWebAppUpdateConfig') {
// Тема (светлая/тёмная), цветовая схема
const scheme = e.detail.data.scheme;
document.body.setAttribute('scheme', scheme);
}
});
// Получить данные пользователя
const userInfo = await bridge.send('VKWebAppGetUserInfo');
// { id, first_name, last_name, photo_200, ... }
vk-bridge позволяет: получить данные пользователя, открыть платёжный диалог (VKWebAppOpenPayForm), запросить геолокацию, скопировать в буфер обмена, открыть QR-сканер.
Авторизация Mini App: launch_params в URL содержат подписанные данные (sign поле). Верификация на сервере через HMAC-SHA256 с ключом API Secret из настроек приложения — обязательна.
Получение информации о пользователе
При входящем сообщении from_id — это VK user ID. Получить имя и фото:
users = vk.users.get(user_ids=from_id, fields="photo_50,city")
user = users[0]
# {'id': 12345, 'first_name': 'Иван', 'last_name': 'Иванов', 'photo_50': 'https://...'}
Важно: бот видит только открытую информацию. Закрытые профили — first_name «DELETED» или недоступны.
Процесс работы
Создание группы и настройка API. Выбор Callback или Long Poll. Реализация webhook с верификацией. Диалоговые сценарии, Keyboard. Для VK Mini Apps: разработка с vk-bridge, серверная верификация. Аналитика через VK Business. Деплой и мониторинг.
Ориентиры по срокам
Бот с клавиатурой и обработкой команд — 1–2 недели. VK Mini App с авторизацией, полным UI и интеграцией с API — 4–8 недель.







