+7(921)-851-18-76 Иконка телефона Запросить звонок
Опубликовано:

Спасаем бизнес: Создаём VK-бота на PHP, Python, JS и C#.
Часть 1 — Введение и быстрый старт

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

Проблема коснулась не только чтения каналов. Компании, выстроившие годами работающие связки CRM с Telegram-ботами, столкнулись с неприятным эффектом: боты начали «тормозить». В технических кругах уже обсуждают проблемы, где автоматизация через Телеграм может зависать на 5–10 минут. Для синхронных процессов сервера (например, подтверждения оплаты или выдачи товара) такая задержка - фатальна.

На этом фоне закономерно взлетел интерес к экосистеме VK. Мессенджер MAX от VK, набравший уже более 55 млн ежедневных пользователей, становится не просто альтернативой, а главной площадкой для деловой коммуникации. Сюда активно переезжают банки (Сбер, ВТБ, Т-Банк), государственные структуры и ритейл. VK WorkSpace все чаще выбирают как базу для корпоративного общения вместо иностранных сервисов.

Зачем вообще нужны боты?

Бот — это не просто программа, которая шлет «Привет». В современном B2B и B2C маркетинге боты решают три главные задачи:

  • Автоматизация продаж. Квалификация лидов, сбор контактов и даже оформление заказов без участия менеджера.

  • Клиентский сервис 24/7. Ответы на типовые вопросы в техподдержке, статусы заказов, запись на прием.

  • Транзакционные уведомления. Мгновенная отправка чеков, кодов подтверждения и напоминаний, что снижает нагрузку на кол-центр на 30–40%.

В условиях, когда стабильность Telegram под вопросом, а бизнес-аудитория концентрируется в MAX и ВКонтакте, умение делать ботов для VK становится критически важным навыком разработчика.

Почему мы решили написать этот цикл

В нашей компании мы ежедневно сталкиваемся с задачами автоматизации бизнеса и знаем, как важно иметь под рукой рабочие примеры кода. Проблема большинства туториалов в том, что они заточены под один язык: полезная статья есть, но если вы пишете на Python, а примеры только на PHP — приходится тратить время на адаптацию.

Мы решили пойти дальше и сделать цикл универсальным. В четырёх частях мы разберём создание полноценного VK-бота с нуля, и каждый фрагмент кода будет представлен сразу на четырёх языках: PHP, Python, JavaScript (Node.js) и C#. Все примеры будут свёрнуты в удобные вкладки — вы просто выбираете свой стек и изучаете материал без лишних отвлечений.

Выбирайте вкладку с вашим языком и поехали!

Начало

Создание сообщества и получение ключей

Для начала нам понадобится сообщество. Так как боты в вк завязаны на сообщество и пишут от его имени, без него нам не обойтись:

Создание сообщества

Выбираем вкладку сообщества и нажимаем кнопку "Создать сообщество"

Описывать процесс создания сообщества мы здесь не будем, в будущем в категории маркетинга появится статья на эту тему.

Управление сообществомОткрытие вкладки работы с API

Открываем настройки сообщества и переходим к работе с API

После этого в центре страницы откроется вкладка с конфигурацией бота. Здесь будут вкладки "Ключи доступа", "Callback API", "Long Poll API".

Нас интересует первая - "Ключи доступа".
Нажмите кнопку «Создать ключ» . В появившемся окне отметьте права, которые понадобятся боту (например, «Сообщения сообщества» и «Доступ к сообщениям»):

Разрешения сообщества

После подтверждения вы получите токен — длинную строку из букв и цифр. Важно: скопируйте его сразу и куда-нибудь сохраните. Если потеряется, чтобы снова его увидеть придется подтверждать действие по VK ID.

Именно этот ключ будет использоваться в коде бота для обращения к API ВКонтакте.

Теперь нам нужно написать сервер и подтвердить его адрес.

Для сервера нам понадобится хостинг и домен, привязанный к нему. Можно тестировать локально, но это сложнее, чем с тем же Telegram API, понадобятся туннели.

Как выбрать и создать хостинг, зарегистрировать и привязать домен вы можете найти на страницах хостинг-провайдеров.

Создание сервера для подтверждения ключа.

Регистрация констант.

Теперь нам нужно настроить связь между нашим кодом и сообществом VK. Здесь есть два пути: Long Poll API (сервер сам постоянно "стучится" за обновлениями) и Callback API (VK сам присылает уведомления на наш сервер). Мы будем использовать второй — он надёжнее для продакшена и не требует постоянно работающего скрипта.

Нам понадобится токен для подтверждения. Откроем вкладку Callback API и скопируем его:

Расположение токена для подтверждения

Выбираем язык и начинаем:


// Регистрируем константы
define('CONFIRMATION_TOKEN', 'ВАШ ТОКЕН ПОДТВЕРЖДЕНИЯ');
define('ACCESS_TOKEN', 'ВАШ БОЛЬШОЙ ТОКЕН');
define('VERSION', '5.199');
define('ENDPOINT', 'https://api.vk.com/method/');
        

from flask import Flask, request

# Регистрируем константы
CONFIRMATION_TOKEN = 'ВАШ ТОКЕН ПОДТВЕРЖДЕНИЯ'
ACCESS_TOKEN = 'ВАШ БОЛЬШОЙ ТОКЕН'
VERSION = '5.199'
ENDPOINT = 'https://api.vk.com/method/'
        

// Регистрируем константы
const CONFIRMATION_TOKEN = 'ВАШ ТОКЕН ПОДТВЕРЖДЕНИЯ';
const ACCESS_TOKEN = 'ВАШ БОЛЬШОЙ ТОКЕН';
const VERSION = '5.199';
const ENDPOINT = 'https://api.vk.com/method/';
        

public class Program
{
    // Регистрируем константы
    private const string CONFIRMATION_TOKEN = "ВАШ_ТОКЕН_ПОДТВЕРЖДЕНИЯ";
    private const string ACCESS_TOKEN = "ВАШ_БОЛЬШОЙ_ТОКЕН";
    private const string VERSION = "5.199";
    private const string ENDPOINT = "https://api.vk.com/method/";

    public static void Main(string[] args) {}
}
        

Создание обработчиков.

Теперь нам предстоит создать обработчики запросов от VK API. Отправляться будут POST запросы с указанием типа ({"type": "type"}) и прочих данных. Вот на этот type мы и будем ориентироваться. При подтверждении отправляется POST запрос с {"type": "confirmation"} в теле.

Важный момент, вопреки правилам о том, что если сервер получил данные к которым он не готов, то ответом, в большинстве случаев, становится Bad Request с 400м статусом, VK API требует чтобы сервер на такие запросы отвечал "ok" с 200м статусом. Это описано в документации. Если не идти этим путем, нам могут перестать присылать уведомления.

Итак, обработчики:


// Сразу после констант
// Получаем данные из запроса и десериализуем Json
$data = json_decode(file_get_contents('php://input'), true);

// Проверяем, что данные есть и в данных есть тип:
if (!isset($data['type'])) {
    http_response_code(200);
    exit('ok');
}

// Если тип - подтверждение, то отправляем наш токен подтверждения:
switch ($data['type']) {
    case 'confirmation':
        echo CONFIRMATION_TOKEN;
        exit();
    default:
        http_response_code(200);
        exit('ok');
}
        

# Сразу после констант
app = Flask(__name__)

@app.route('/', methods=['POST'])
def callback():
    # Получаем данные из запроса и десериализуем Json
    data = request.get_json(force=True, silent=True)

    # Проверяем, что данные есть и в данных есть тип:
    if data is None or 'type' not in data:
        return 'ok', 200

    # Если тип - подтверждение, то отправляем наш токен подтверждения:
    if data['type'] == 'confirmation':
        return CONFIRMATION_TOKEN, 200

    # Любое другое событие — "ok"
    return 'ok', 200

if __name__ == '__main__':
    app.run(port=3004)
        

// Сразу после констант
const express = require('express');
const app = express();
app.use(express.json()); // для парсинга application/json

app.post('/', (req, res) => {
    // Получаем данные из запроса и десериализуем Json
    const data = req.body;

    // Проверяем, что данные есть и в данных есть тип:
    if (!data || !data.type) {
        return res.status(200).send('ok');
    }

    // Если тип - подтверждение, то отправляем наш токен подтверждения:
    switch (data.type) {
        case 'confirmation':
            return res.send(CONFIRMATION_TOKEN);
        default:
            return res.status(200).send('ok');
    }
});

const port = 3002;
app.listen(port, () => {
    console.log(`Server running on port ${port}`);
});
        

// Типизируем запрос от VK API
public class VkRequest
{
    public string? Type { get; set; }
}

public class Program
{    
    // Сразу после констант
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        var app = builder.Build();

        app.MapPost("/", async (HttpContext context) =>
        {
            VkRequest? data = null;

            // Получаем данные из запроса и десериализуем Json
            try
            {
                data = await context.Request.ReadFromJsonAsync<VkRequest>();
            }
            catch (Exception)
            {
                return Results.Ok("ok");
            }

            // Проверяем, что данные есть и в данных есть тип:
            if (data is null) return Results.Ok("ok");

            // Если тип - подтверждение, то отправляем наш токен подтверждения:
            switch (data.Type)
            {
                case "confirmation":
                    return Results.Ok(CONFIRMATION_TOKEN);
                default:
                    return Results.Ok("ok");
            }
        });

        app.Run();
    }
}
        

Приведённые выше обработчики делают ровно то, что нужно VK: на любое событие, кроме confirmation, они возвращают строку ok и HTTP-статус 200. Если приходит событие confirmation — отправляем обратно токен подтверждения, скопированный из настроек сообщества. Это обязательное условие: как мы и писали выше, если не ответить ok или вернуть другой статус, VK посчитает, что сервер не справляется, и перестанет присылать новые уведомления (или будет бесконечно повторять запросы, создавая лишнюю нагрузку).

Как проверить, что всё работает? Заливайте код на хостинг, затем:

  1. Вернитесь в управление сообществом → «Работа с API» → вкладка «Callback API».
  2. Нажмите «Добавить сервер», укажите название и адрес вашего сервера (например, https://ваш-сайт.ru/).
  3. В поле «Секретный ключ» можно ничего не вводить (или придумать строку для будущей проверки подлинности запросов).
  4. Выберите версию API (5.199, то что мы вводили в константах) и нажмите «Подтвердить».
Конфигурация сервера

Обратите внимание на то, что строка которую мы должны вернуть изменилась. Это происходит про прошествии времени, чтобы она всегда была актуальной

VK отправит запрос с типом confirmation на ваш сервер. Если код написан правильно, в интерфейсе появится зелёная галочка — сервер подтверждён:

Сообщение о подтверждении сервера

Важное замечание: в примерах выше мы намеренно упростили логику, чтобы сфокусироваться на механизме подтверждения. В реальном проекте стоит добавить проверку секретного ключа (если вы его указали), чтобы убедиться, что запросы приходят действительно от VK, а не от злоумышленников. Также не забывайте, что на событие message_new мы пока не реагируем — просто возвращаем ok. Научим бота отвечать в следующей части.

Если вы дочитали до этого места и всё заработало — поздравляю, вы успешно прошли первый этап! В следующей части разберём, как обрабатывать входящие сообщения и отправлять ответы.

Получить коммерческое предложение

Оставьте заявку, и мы свяжемся с вами, чтобы обсудить ваши потребности и предоставить коммерческое предложение по разработке сайта. Наша команда поможет вам создать эффективный и привлекательный веб-сайт, адаптированный к вашему бизнесу.

Я не робот

Нажмите чтобы продолжить

*Согласие обязательно
Я ознакомлен с политикой конфиденциальности и согласен на обработку персональных данных
Оставьтезаявку
Кнопка закрытия формы
Стрелка вверх
Все получилось Заявкауспешно
отправлена
Спасибо, что доверяете нам! Наш специалист уже получил вашу заявку
и скоро свяжется с вами.
Кнопка закрытия формы