Webhook (вебхук) это способ, которым один сервис сам сообщает другому о произошедшем событии, отправляя POST-запрос с данными на указанный URL. Не нужно постоянно спрашивать сервер "ну что там, оплатили?" Сервер сам постучится к вам, когда событие случится. В этой статье разберем, как настроить webhook в Telegram, GitHub и Stripe и как принимать входящие запросы через n8n, Make или простой Flask-эндпоинт, если писать полноценный бэкенд не хочется.
Вебхук это событие + POST-запрос + JSON-данные, которые сервис отправляет на ваш URL без опроса. Для вайбкодера это способ связать Telegram, GitHub, Stripe и любые другие сервисы между собой без выделенного сервера: достаточно n8n, Make или пяти строк на Flask.
Что такое webhook простыми словами?
Webhook это HTTP-запрос, который сервис сам отправляет на ваш адрес, когда что-то произошло. Не вы спрашиваете, а вас уведомляют.
Представьте два способа узнать, пришла ли посылка. Первый: звонить на почту каждый час и спрашивать. Это API в его классическом виде, вы дергаете сервер снова и снова. Второй способ: почта сама пишет вам смс, как только посылка прибыла. Это и есть webhook.

Технически внутри лежит обычный POST-запрос с телом в формате JSON. Сервис-отправитель формирует событие (оплата прошла, коммит запушили, пользователь написал боту) и стучится на заранее указанный вами URL. Ваш код принимает этот запрос, читает JSON и решает, что делать дальше: записать в базу, отправить уведомление, запустить сценарий.
Разница с обычным API простая. При запросе к API инициатор вы: хотите данные, сами идете и берете. При webhook инициатор сервис: у него случилось событие, он сам к вам приходит. Меняются роли клиента и сервера, и это первое, что важно понять вайбкодеру перед настройкой любой интеграции.
Чем webhook отличается от постоянного опроса API?
Опрос (polling) грузит сервер лишними запросами каждые несколько секунд. Webhook присылает данные один раз, ровно тогда, когда событие реально произошло.
Опрос работает так: раз в минуту, раз в 10 секунд, раз в час код спрашивает сервер "есть новое?" В 99% случаев ответ "нет", а запрос все равно улетел и потратил ресурсы. При большом числе пользователей это ощутимая нагрузка на оба сервера.
Webhook переворачивает схему. Вы один раз регистрируете URL, и дальше сервис сам инициирует контакт при наступлении события. Задержка почти нулевая: событие произошло, запрос улетел, ваш код отработал.
Есть нюанс: ваш эндпоинт должен быть доступен из интернета постоянно. Локальный сервер на ноутбуке для polling подходит, а для webhook нет, сервис снаружи просто не достучится до localhost. Отсюда и туннели вроде ngrok на этапе разработки.

| Критерий | Polling (опрос) | Webhook |
|---|---|---|
| Кто инициирует запрос | Ваш код | Внешний сервис |
| Задержка получения данных | Секунды-минуты | Почти мгновенно |
| Нагрузка при простое | Высокая, запросы идут даже без событий | Нулевая, запрос идет только при событии |
| Что нужно для приема | Ничего особенного | Публичный URL с постоянной доступностью |
Как настроить webhook в Telegram для своего бота?
Настройка Telegram webhook требует Flask или n8n-эндпоинт с публичным URL и одного вызова метода setWebhook с токеном бота.
Сначала бот создается через BotFather, который выдает API-токен. Дальше есть два пути получать сообщения: вызывать getUpdates в цикле (это polling) или один раз подписаться на webhook. Для продакшена почти всегда выбирают второй вариант: меньше нагрузки на серверы Telegram и мгновенная доставка сообщений.
Дальше три шага. Первый: поднять Flask-приложение с маршрутом /webhook, который принимает POST и читает JSON с chat_id и текстом сообщения. Второй: если сервер локальный, пробросить его наружу через ngrok, чтобы получить публичный HTTPS-адрес. Третий: вызвать метод Telegram setWebhook, передав этот адрес.

Важная деталь из практики: Flask-приложение обязано отвечать кодом 200 на каждый входящий запрос. Если код ответа другой, Telegram решает, что сообщение не доставлено, и присылает его повторно, иногда по несколько раз подряд. Для вайбкодера, который собирает Telegram-бота на связке Flask + ngrok, это первая ошибка, на которой обычно спотыкаются.
Как поставить GitHub webhook пошагово?
GitHub webhook настраивается в разделе Settings → Webhooks репозитория: указываете Payload URL, тип контента JSON и события, которые должны триггерить запрос.
Заходите в нужный репозиторий, открываете Settings, находите раздел Webhooks и жмете Add webhook. Дальше заполняете три поля: Payload URL (куда слать), Content Type (обычно JSON, реже URL-encoded) и Trigger Events, где выбираете конкретные события вроде push, star или fork, а не абсолютно все подряд.

Если вебхук ведет не на ваш сервер, а, например, в Discord, у адреса часто есть особенность: к базовому URL нужно дописать постфикс вроде /github, иначе Discord не распознает формат payload и просто проигнорирует запрос.
Проверить работу просто. Делаете тестовый коммит и смотрите раздел Recent Deliveries в настройках webhook, там виден код ответа и содержимое запроса. Если приходит 200, значит эндпоинт принял данные корректно. Для отладки на локальном сервере снова пригодится ngrok, ровно та же схема, что и с Telegram-ботом.
Как включить webhook в Stripe для приема платежей?
Stripe присылает webhook на событие checkout.session.completed, и по нему меняется статус заказа в базе без ручной проверки платежей.
У Stripe одна из самых зрелых систем webhook в индустрии, и именно на ней удобно разбирать логику, которая потом повторяется у десятков других платежных сервисов. В личном кабинете Stripe создается endpoint, указывается URL и набор событий для подписки.
Когда пользователь оплачивает, Stripe отправляет POST с событием и подписью в заголовке Stripe-Signature. Код на сервере проверяет эту подпись секретным ключом webhook, чтобы убедиться: запрос реально пришел от Stripe, а не от кого-то, кто угадал ваш URL. После проверки читается session.metadata, обновляется статус заказа, отправляется чек пользователю.
Здесь и раскрывается сила подхода "без своего бэкенда". Логику обработки платежа можно собрать не на выделенном сервере, а внутри n8n-сценария: webhook-триггер принимает данные Stripe, следующий узел проверяет статус, дальше идет запись в таблицу и отправка уведомления в Telegram. Три-четыре блока вместо кода на Python.
Максим: «GoBanana мы собрали за 6-8 часов, а веб-версию сделали за 3 часа после выхода новой модели. 200 000+ пользователей и 12 млн выручки без своего сервера под платежи, вся логика оплаты и генерации фото держится на вебхуках и готовых интеграциях. Не нужно поднимать инфраструктуру, чтобы продукт заработал».

Как обрабатывать webhook в n8n без кода?
В n8n входящий webhook принимается узлом Webhook, у которого есть тестовый и боевой URL, а дальше данные обрабатываются визуальными нодами без единой строчки кода.
Узел Webhook в n8n при добавлении в сценарий сразу выдает два адреса: тестовый (Test URL) и боевой (Production URL). Тестовый удобен на этапе настройки, вы жмете "Listen for test event" и смотрите, реально ли долетает запрос от источника, прежде чем публиковать сценарий целиком.
Дальше выбирается тип ответа. Instant response означает "я принял запрос, дальнейшая обработка пойдет фоном, а отправителю сразу уходит 200". Второй вариант "when last node finishes" заставляет ждать выполнения всего сценария и только потом отвечать, это медленнее, зато можно вернуть кастомный JSON через ноду Respond to Webhook.
Дальше данные из тела запроса просто протягиваются по нодам: фильтр по типу события, запись в Google Sheets или Airtable, отправка в Telegram, вызов другого API. Обработка webhook в n8n на практике занимает 15-20 минут для типового сценария вроде "пришла оплата -> обновить таблицу -> уведомить в чат".

n8n или Make для webhook-автоматизаций, что выбрать?
Make проще для старта и стоит от $9-12 в месяц за 10 000 операций. n8n дешевле на сложных сценариях за счет оплаты по выполнениям, а не по операциям, но требует больше времени на освоение.
Пороги входа у сервисов разные: n8n стартует от 20 долларов в месяц в облаке или бесплатно при самостоятельном хостинге, а Make Core начинается от 9 долларов при 10 000 операций. Разница не только в цене, но и в модели биллинга.
Make считает операции, где каждый узел сценария это отдельная операция, а n8n списывает одно выполнение за весь прогон workflow независимо от числа узлов внутри него. На сценарии из 5-8 шагов, а именно так выглядит типовая обработка webhook с проверкой, записью и уведомлением, эта разница по деньгам ощутима уже при паре тысяч запусков в месяц.
Бесплатный self-hosted вариант у n8n тоже есть, но там за установку, обновления и безопасность отвечаете сами. Для вайбкодера без DevOps-опыта это честный компромисс: либо платить за облако и не думать об инфраструктуре, либо разбираться с сервером самому.

| Критерий | Make | n8n |
|---|---|---|
| Порог входа | Ниже, визуальный редактор понятен сразу | Выше, нужно 1-2 недели на освоение |
| Биллинг | По операциям (каждый узел) | По выполнениям (весь сценарий) |
| Цена от | ~$9-12/мес за 10 000 операций | От бесплатно (self-host) до $20/мес в облаке |
| Self-hosting | Нет, только облако | Есть |
| Лучше всего для | Быстрого старта, простых цепочек | Сложных сценариев, AI-агентов, экономии на масштабе |
Нужен ли вайбкодеру свой Flask-эндпоинт?
Свой Flask-эндпоинт нужен, если хочется полного контроля над логикой или сценарий не вписывается в визуальные ограничения n8n и Make.
Минимальный прием webhook на Flask укладывается в 10-15 строк: создается маршрут, проверяется метод POST, из запроса читается JSON, дальше произвольная логика, в конце возвращается код 200. Для локальной разработки к этому добавляется ngrok, чтобы внешний сервис вообще смог достучаться до вашей машины.
Плюс своего эндпоинта: можно делать что угодно, без ограничений визуального конструктора, подключить любую библиотеку на Python, свою базу данных, кастомную логику проверки подписи. Собрать такой код быстро помогает Claude Code, вайбкодер объясняет задачу словами, получает рабочий Flask-файл за один заход.
Минус тоже есть, и его нечестно замалчивать. Свой сервер нужно где-то держать постоянно запущенным, следить за падениями, обновлять зависимости. Для одного личного проекта это лишняя головная боль, для продукта с реальными пользователями уже оправданный шаг. Здесь и проходит граница: n8n и Make для быстрых связок, свой эндпоинт для продукта, который будет жить долго.

Как защитить webhook от чужих запросов?
Открытый URL webhook может дернуть кто угодно, поэтому проверка подписи, токена в заголовке и HTTPS обязательны, а не опциональны.
Первая и базовая мера: только HTTPS, никогда не HTTP. Данные в открытом виде по HTTP может перехватить кто угодно между отправителем и вашим сервером.
Вторая мера: секретный токен в заголовке запроса. Часть сервисов, включая Stripe, идут дальше и подписывают весь payload криптографической подписью, которую вы проверяете на своей стороне перед тем, как доверять содержимому запроса.
Третья мера, о которой вайбкодеры часто забывают: логирование и очередь. Если webhook падает молча, вы никогда не узнаете, что оплата прошла, а уведомление не ушло. Входящие запросы лучше сразу класть в очередь на обработку, а не обрабатывать синхронно внутри того же запроса, иначе долгая обработка может привести к таймауту и повторной отправке от источника.

Кому подходит настройка webhooks без бэкенда
Для быстрого MVP и связки двух-трех сервисов оптимален n8n или Make: 15-30 минут на настройку, никакого сервера, который надо поддерживать. Если сценарий выходит за визуальные ограничения или продукт уже растет, Flask-эндпоинт дает контроль, которого нет у конструкторов.
Правило простое: сначала пробуете собрать логику в n8n. Если за час не получилось, значит задача действительно требует своего кода, и тогда переходите на Flask или на серверную часть в связке с сервисом на vibecoderz.ru/ide.
Глоссарий
- Webhook (вебхук) - HTTP-запрос, который сервис сам отправляет на ваш URL при наступлении события.
- API - интерфейс, через который вы сами запрашиваете данные у сервера.
- Endpoint (эндпоинт) - конкретный адрес на сервере, куда приходит запрос.
- Payload - тело запроса, обычно в формате JSON, с данными о событии.
- Polling (опрос) - постоянные повторяющиеся запросы к серверу вместо ожидания webhook.
- Ngrok - сервис, который дает публичный URL для локального сервера на время разработки.
- HTTP-статус - код ответа сервера: 200 успех, 400 ошибка запроса, 401 ошибка авторизации, 500 ошибка сервера.
- Подпись webhook (signature) - криптографическая проверка, что запрос реально пришел от заявленного отправителя.
Частые вопросы про webhooks
Чем webhook отличается от обычного API-запроса? При API вы сами инициируете запрос и ждете ответ. При webhook инициатор внешний сервис: он сам присылает данные вам, когда что-то произошло, без вашего активного запроса.
Нужен ли вайбкодеру свой сервер для webhook? Не обязательно. Можно принимать webhook через n8n или Make, у обоих есть готовый узел Webhook с публичным URL, свой сервер поднимать не придется.
Как протестировать webhook без реального сервиса? Есть сервисы вроде webhook.site, которые выдают временный URL и показывают все входящие запросы. Полезно, чтобы понять структуру JSON до того, как писать код обработки.
Что делать, если Telegram не присылает обновления через webhook? Чаще всего причина в коде ответа. Проверьте, что ваш эндпоинт возвращает 200, а не 404 или 500, иначе Telegram считает доставку неуспешной и повторяет попытку.
Безопасно ли принимать webhook без проверки токена? Нет. Открытый эндпоинт без токена или подписи может дернуть кто угодно, кто угадал URL. Минимум добавьте секретный заголовок, для платежных webhook проверяйте подпись обязательно.
Что выбрать новичку: n8n, Make или Flask? Для первой интеграции проще всего Make, порог входа ниже. Если сценарий сложный или растет объем запросов, n8n выгоднее по деньгам. Свой Flask-эндпоинт нужен только под нестандартную логику.
Сколько стоит принимать webhooks через n8n или Make? Make Core стартует от 9-12 долларов в месяц за 10 000 операций. n8n можно развернуть бесплатно на своем сервере или платить от 20 долларов в месяц за облако, по состоянию на август 2026.
Разобраться в вебхуках проще, когда рядом реальный сценарий, а не только теория. Если собираете продукт и не понимаете, какую связку выбрать под свою задачу, от n8n до собственного Flask-эндпоинта, запишитесь на консультацию к Максиму. Готовые обзоры инструментов для сборки продуктов без программистов смотрите в каталоге AI IDE VibeCoderz, а для более сложной автоматизации пригодится агент из раздела devops.
Обновлено: август 2026.