VK API: Бот сообщества: принимать сообщения через Long Poll

Сценарий из mcp-everything. Актуально на 2026-10-24.

Чат-бот в сообщениях сообщества ВКонтакте без публичного сервера: бот сам забирает новые события.

  1. В настройках сообщества включи сообщения и Bots Long Poll API (Управление → Работа с API), отметь тип события «Входящее сообщение» и создай ключ доступа сообщества с правом на сообщения.
  2. Получи параметры сервера: POST /method/groups.getLongPollServer с group_id и v. В ответе server, key и ts.
  3. В цикле делай запрос к адресу server с act=a_check, key, ts и wait=25. В ответе — новый ts и updates; события входящих сообщений имеют type = message_new.
  4. Ответь пользователю: POST /method/messages.send с peer_id из события, message и random_id — уникальным числом, иначе VK может посчитать сообщение повтором.
  5. Тело запросов — form-urlencoded или multipart, JSON не поддерживается. Параметр v (версия API) обязателен в каждом запросе.
import random, requests

TOKEN, GROUP_ID, V = "<ключ сообщества>", 123456, "5.199"
H = {"Authorization": f"Bearer {TOKEN}"}

def api(method, **params):
    r = requests.post(f"https://api.vk.ru/method/{method}", headers=H, data={**params, "v": V}).json()
    if "error" in r:
        raise RuntimeError(r["error"])
    return r["response"]

lp = api("groups.getLongPollServer", group_id=GROUP_ID)
ts = lp["ts"]
while True:
    resp = requests.get(lp["server"], params={"act": "a_check", "key": lp["key"], "ts": ts, "wait": 25}, timeout=35).json()
    if "failed" in resp:  # ключ устарел — получить новый
        lp = api("groups.getLongPollServer", group_id=GROUP_ID); ts = lp["ts"]; continue
    ts = resp["ts"]
    for u in resp["updates"]:
        if u["type"] == "message_new":
            msg = u["object"]["message"]
            api("messages.send", peer_id=msg["peer_id"], message=f"Вы написали: {msg['text']}", random_id=random.getrandbits(31))

Базовые URL

Авторизация

Тип: Bearer-токен

Ключ доступа передаётся в каждом запросе в заголовке Authorization: Bearer <КЛЮЧ_ДОСТУПА>. Тип ключа указан у каждого метода: ключ пользователя, ключ сообщества или сервисный ключ приложения.

Ответ:

curl 'https://api.vk.ru/method/users.get' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -F 'user_ids=743784474' \
  -F 'fields=bdate' \
  -F 'v=5.131'

Методы сценария

POST /method/messages.send — Отправка сообщения

Ключи: пользователя, сообщества.

Параметр Где Тип Обяз. Описание
v body string да Версия API
peer_id body integer нет Получатель: ID пользователя; 2000000000 + chat_id для беседы; -ID сообщества
peer_ids body array нет Несколько получателей, до 100
user_id body integer нет ID пользователя
domain body string нет Короткий адрес пользователя
random_id body integer нет Уникальный ID для защиты от повторной отправки
message body string нет Текст; обязателен, если нет attachment
attachment body string нет Вложения _ через запятую; обязательны, если нет message
reply_to body integer нет ID сообщения, на которое отвечаем
forward_messages body array нет ID пересылаемых сообщений через запятую
keyboard body string нет Клавиатура бота (JSON)
payload body string нет Полезная нагрузка
group_id body integer нет ID сообщества (с ключом сообщества)
dont_parse_links body boolean нет Не создавать сниппеты ссылок
disable_mentions body boolean нет Отключить уведомления об упоминаниях

POST /method/groups.getLongPollServer — Данные для подключения к Bots Long Poll

Ключи: пользователя, сообщества. Возвращает данные для запросов к Long Poll серверу событий сообщества.

Параметр Где Тип Обяз. Описание
v body string да Версия API
group_id body integer да ID сообщества

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://dev.vk.com/ru/api/api-requests Вся интеграция одним документом: https://mcp-everything.ru/integrations/vk-api.md