Розробка мобільного VKontakte-чат-бота
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 — автоматично. При фіксованому значенні повторний виклик не створить нове повідомлення — захист від подвійної відправки.
Клавіатура та 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 тижнів.







