VK
10 мин·

VK API для массовых уведомлений: пошаговый разбор

Как настроить массовые уведомления через VK API: сообщества, рассылки, лимиты и автоматизация.

Обзор VK Messaging API

VK — одна из крупнейших социальных платформ в России с аудиторией более 100 миллионов пользователей. Для бизнеса VK предоставляет возможность отправки сообщений через сообщества (группы), используя VK API метод messages.send.

В отличие от Telegram, где боты работают напрямую, в VK механизм построен вокруг сообществ: пользователь подписывается на уведомления от сообщества, после чего сообщество получает право отправлять ему личные сообщения. Это ключевое отличие, которое определяет архитектуру массовых рассылок через VK.

VK API версии 5.199+ поддерживает несколько типов контента в сообщениях: текст, изображения, документы, аудио, видео, карточки (карусели) и кнопки (клавиатуры). Для уведомлений чаще всего используются текстовые сообщения с inline-кнопками.

Важно: VK активно модерирует рассылки через сообщества. Спам-рассылки блокируются, а сообщество может быть забанено. Подробнее о правилах — в нашей статье «Ограничения VK API для сообществ».

Настройка сообщества для рассылок

Прежде чем отправлять массовые уведомления, необходимо правильно настроить сообщество VK. Выполните следующие шаги:

  1. Создайте сообщество (группу) или используйте существующее
  2. Перейдите в Управление → Сообщения и включите сообщения сообщества
  3. В разделе Управление → Работа с API создайте ключ доступа (токен)
  4. Выберите права: messages, manage, photos (при необходимости)
  5. Настройте Callback API или Long Poll сервер для получения входящих событий
  6. Подтвердите сервер, ответив на confirmation-запрос VK

Токен сообщества имеет формат vk1.a.XXXX... и должен храниться в безопасном месте. Не используйте токены пользователей для рассылок — это нарушает правила VK и ведёт к блокировке.

Для продакшен-сценариев стоит также настроить Long Poll v3 — это обеспечивает получение событий без необходимости публичного HTTPS-эндпоинта:

// Настройка Long Poll для сообщества VK
const response = await fetch(
  'https://api.vk.com/method/groups.getLongPollServer?' +
  'group_id=YOUR_GROUP_ID&access_token=VK_COMMUNITY_TOKEN&v=5.199'
);
const { response: lp } = await response.json();
// lp.server, lp.key, lp.ts — данные для Long Poll

Подписка пользователей на уведомления

В VK нельзя отправить сообщение пользователю, если он не дал на это согласие. Существует несколько способов получить подписку:

  • Пользователь написал сообществу первым — это автоматически даёт право на отправку ответных сообщений в течение 24 часов
  • Подписка на рассылку через кнопку — VK позволяет разместить кнопку «Подписаться на рассылку» в сообществе. Метод messages.allowMessagesFromGroup
  • VK Apps и виджеты — внутри мини-приложений можно запросить разрешение на отправку уведомлений через VKWebAppAllowMessagesFromGroup
  • QR-код или ссылка — ведущие в диалог с сообществом, где пользователь инициирует общение

После получения подписки VK сохраняет user_id подписчика. Вы можете получить список всех подписчиков через метод messages.getConversations (для сообществ с подключённой рассылкой).

Совет: храните базу подписчиков на своей стороне. VK не гарантирует стабильный доступ к списку подписчиков через API, а лимиты на getConversations строгие.

API отправки сообщений

Основной метод для отправки — messages.send. Он принимает параметры:

ПараметрТипОписание
user_idintegerID пользователя-получателя
random_idintegerУникальный ID для предотвращения дубликатов
messagestringТекст сообщения (до 4096 символов)
keyboardJSONКлавиатура с кнопками (inline или обычная)
templateJSONШаблон сообщения (карусель)
attachmentstringВложения: фото, документ, аудио

Пример отправки сообщения на JavaScript

// JavaScript — отправка сообщения через VK API
async function sendVkMessage(userId, text) {
  const params = new URLSearchParams({
    user_id: String(userId),
    random_id: String(Math.floor(Math.random() * 1e9)),
    message: text,
    keyboard: JSON.stringify({
      one_time: false,
      inline: true,
      buttons: [[
        {
          action: {
            type: 'open_link',
            link: 'https://relaya.ru',
            label: 'Открыть Релая'
          }
        }
      ]]
    }),
    access_token: process.env.VK_COMMUNITY_TOKEN,
    v: '5.199'
  });

  const response = await fetch(
    'https://api.vk.com/method/messages.send?' + params.toString()
  );
  const data = await response.json();

  if (data.error) {
    console.error('VK API Error:', data.error.error_code, data.error.error_msg);
    // Обработка ошибок: 901 — пользователь запретил, 914 — рассылка заблокирована
    throw new Error(`VK Error ${data.error.error_code}`);
  }
  return data.response; // message_id
}

// Пример использования
await sendVkMessage(123456789, 'Ваш заказ #1042 подтверждён!');

Обратите внимание на random_id — это обязательный параметр, предотвращающий дублирование сообщений при повторных запросах. Используйте уникальные значения.

Лимиты отправки сообщений сообществ

VK строго ограничивает скорость отправки сообщений от имени сообществ. Нарушение лимитов приводит к временной или постоянной блокировке.

Тип ограниченияЛимитПримечание
Запросов к API в секунду20 req/sНа один токен сообщества
Сообщений в сутки (рассылка)До 5 000Для подтверждённых сообществ
Сообщений в минуту (диалоги)~200Ответы на входящие сообщения
Размер текста сообщения4 096 символовВключая разметку
Кнопок в inline-клавиатуреДо 405 рядов × 8 кнопок
Вложений к сообщениюДо 10Фото, документы, аудио

Ключевое ограничение — 5 000 сообщений в сутки для рассылки. Для крупных баз подписчиков (10 000+) это серьёзное узкое место. Сравните с MAX, где лимиты значительно мягче.

Стратегии массовой отправки

При отправке тысяч сообщений через VK прямой последовательный вызов messages.send неэффективен. Рассмотрим проверенные подходы:

  • Execute-метод — VK API метод execute позволяет выполнить до 25 вызовов API в одном запросе. Это основной способ ускорить массовую рассылку
  • Несколько токенов — для крупных сообществ можно создать несколько приложений и ротировать токены (в рамках правил VK)
  • Очередь с rate limiter — поставьте все сообщения в очередь (Redis, RabbitMQ) и обрабатывайте с контролем скорости 20 req/s
  • Приоритезация — критические уведомления (транзакции) отправляйте первыми, маркетинговые — в фоне
// VK execute — 25 сообщений за один запрос
async function bulkSendVk(recipients, text, token) {
  const batchSize = 25;
  for (let i = 0; i < recipients.length; i += batchSize) {
    const batch = recipients.slice(i, i + batchSize);
    const code = batch.map(uid =>
      `API.messages.send({
        user_id: ${uid},
        random_id: ${Math.floor(Math.random() * 1e9)},
        message: "${text.replace(/"/g, '\\"')}"
      })`
    ).join(',');

    const response = await fetch(
      'https://api.vk.com/method/execute', {
        method: 'POST',
        body: new URLSearchParams({
          code: `return [${code}];`,
          access_token: token,
          v: '5.199'
        })
      }
    );
    // Пауза 1.3с для соблюдения 20 req/s
    await new Promise(r => setTimeout(r, 1300));
  }
}

Шаблоны VK-сообщений

VK поддерживает несколько форматов сообщений, которые повышают вовлечённость подписчиков:

  • Текст + inline-кнопки — стандартный формат для уведомлений. Кнопки могут содержать ссылки, callback-действия или переход в VK Pay
  • Карусель (template) — до 10 карточек с изображением, текстом и кнопками. Подходит для каталогов и подборок товаров
  • Текст + вложение — сообщение с прикреплённым изображением, документом или аудио. Эффективно для PDF-чеков и промо-баннеров

На практике визуально богатые сообщения (с кнопками и изображениями) обычно показывают более высокий CTR по сравнению с чисто текстовыми уведомлениями.

Мониторинг доставки

VK не предоставляет полноценного delivery tracking для сообщений от сообществ. Вам доступны косвенные показатели:

  • Статус отправки — метод messages.send возвращает message_id при успехе или объект ошибки
  • Callback-события — через Callback API можно отслеживать message_read (прочитано пользователем)
  • Статистика рассылки — доступна в интерфейсе VK для сообществ с подключённой рассылкой
  • Ошибки отправки — код 901 (пользователь запретил), 914 (рассылка заблокирована), 7 (нет доступа)

Для полноценного мониторинга собирайте статистику на своей стороне: процент доставки, процент ошибок по кодам, среднее время отправки. Или используйте Релая, где вся статистика доступна из коробки.

Мультиканальная доставка через Релая

Ограничения VK (5 000 сообщений в сутки, сложная подписка, отсутствие delivery tracking) делают его ненадёжным как единственный канал. Решение — мультиканальный подход.

Релая объединяет VK, Telegram и MAX единым форматом запросов. Приоритет каналов задаётся на стороне вашего сервиса:

// Мультиканальная отправка через Релая API (fallback по приоритету)
const integrations = ['vk', 'maxbot', 'telegrambot']; // VK → MAX Bot → Telegram Bot
for (const integration of integrations) {
  const response = await fetch(
    `https://api.relaya.ru/v1/profiles/{profileId}/integrations/${integration}/messages`,
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer RELAYA_TOKEN',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        chatId: '123456789',
        message: 'Ваш заказ подтверждён!',
        clientId: `order_confirmed_123456789_${integration}`
      })
    }
  );
  if (response.ok) break;
}

Если VK недоступен или лимит исчерпан, сообщение автоматически отправится через MAX, а затем через Telegram. Подробнее об архитектуре — «Устойчивая система доставки сообщений в мессенджеры».

MAX как дополнительный канал

Если вы уже отправляете уведомления через VK, добавление MAX даёт несколько преимуществ:

  • Более мягкие лимиты В MAX ориентируйтесь на текущие лимиты Bot API и свой рабочий темп, а не на одну универсальную цифру на рассылку
  • Растущая аудитория — MAX активно набирает пользователей в РФ, особенно в корпоративном сегменте
  • 152-ФЗ — данные хранятся на территории РФ
  • Более простой API — не требуется настройка сообществ, бот работает напрямую
  • Резервный канал — когда VK-лимит исчерпан, MAX доставит сообщение

Через Релая подключение MAX занимает несколько минут — достаточно создать бота и добавить токен в панели управления. Подробнее о массовых рассылках через MAX: «Массовая отправка через MAX».

VK остаётся важным каналом для бизнеса в России, но его ограничения на рассылки и сложная модель подписки требуют дополнительных каналов. Комбинация VK + MAX + Telegram через Релая — подходящая стратегия для надёжной доставки уведомлений в 2026 году.

Создайте бесплатный MAX-профиль

Если хочется не просто читать, а сразу проверить сценарий руками: подключите MAX, отправьте себе тестовое сообщение и уже потом решайте, нужны ли другие каналы.