+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. Научим бота отвечать в следующей части.

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

Начни свой проект -который изметит все

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

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