# 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) обязателен в каждом запросе.

```python
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

- Боевой: `https://api.vk.ru`
- URL метода: `https://api.vk.ru/method/<имя-API-метода>`

## Авторизация

Тип: 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 | нет | Вложения <owner_id>_<media_id> через запятую; обязательны, если нет 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 сообщества |

## Нюансы

- HTTP-методы GET и POST равнозначны; только HTTPS.
- Обязательный во всех запросах параметр `v` — версия API. В документации указана актуальная версия 5.131, а официальная JSON-схема методов VK описывает версию 5.199.
- Тело POST — `application/x-www-form-urlencoded` или `multipart/form-data` (для файлов и данных больше 2 КБ); `application/json` не поддерживается.
- Имя метода чувствительно к регистру.
- Общие параметры для всех методов: `lang` (`ru`, `uk`, `be`, `en`, `es`, `fi`, `de`, `it`) и `test_mode=1`.
- ID сообщества в `owner_id` передаётся со знаком минус.
- Кроме ограничений частоты есть закрытые количественные лимиты на однотипные методы: при превышении метод может стать временно недоступен или потребовать капчу.

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

- [Кнопки в боте сообщества](https://mcp-everything.ru/integrations/vk-api/scenarios/knopki-v-bote-soobschestva.md)
- [Опубликовать пост с картинкой в сообществе](https://mcp-everything.ru/integrations/vk-api/scenarios/opublikovat-post-s-kartinkoy.md)
- [Узнать данные пользователя или сообщества по ссылке](https://mcp-everything.ru/integrations/vk-api/scenarios/uznat-dannye-polzovatelya-ili.md)
- [Выгрузить участников сообщества](https://mcp-everything.ru/integrations/vk-api/scenarios/vygruzit-uchastnikov-soobschestva.md)

---

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