Webhook: что это и как работает

18.09.2026
Разбираем, что такое webhook, как он работает, чем отличается от API и как настроить. Примеры и частые ошибки. Читайте в блоге Cinar.
Webhook: что это и как работает

Что такое webhook простыми словами

Webhook это автоматическое уведомление, которое одно приложение отправляет другому при наступлении события. По сути это «звонок обратно»: система не ждёт вопроса, а сама сообщает о том, что произошло. Проще всего понять это на примере интернет-магазина. Клиент оформил заказ, и скрипт сразу передаёт данные в CRM или Telegram-бот, чтобы менеджер увидел новую заявку без перезагрузки страницы. Так вы быстрее отреагируете на заявку и не упустите покупателя, а в SEO-продвижении тот же принцип срабатывает для отслеживания позиций или новых обращений с сайта.

Ключевое отличие webhook от обычного API в том, кто инициирует обмен данными. При классическом опросе (polling) ваша система раз в N секунд дёргает сервер и спрашивает: «Что-нибудь новое?». Это тратит ресурсы и грузит канал, даже когда ничего не произошло. Webhook же работает по принципу подписки: вы оставляете свой URL для приёма данных, и сервер сам отправляет туда POST-запрос с payload, как только случается нужное событие. Отсюда и главное правило. Webhook экономит трафик и даёт реакцию в реальном времени, но требует стабильного адреса для получения уведомлений и защиты от фрод-запросов.

Как работает webhook: схема и пример

Разобраться в том, как работает webhook, проще всего на конкретном примере. Представьте, что у вас есть интернет-магазин, и клиент оплатил заказ. Вместо того чтобы ваш сервер постоянно опрашивал платёжную систему (так называемый polling) с вопросом «Ну что, деньги пришли?», платёжная система сама отправляет HTTP-запрос на ваш URL. Этот запрос и есть webhook: уведомление о событии, которое случилось на стороне другого сервиса. Схема элементарная: событие (оплата) → HTTP-запрос с данными → обработка на вашем сервере → ответ сервису.

Технически всё сводится к обычному POST-запросу (реже GET или PUT), который отправляется на заранее заданный endpoint. В теле запроса лежат данные о событии, например, JSON с номером заказа и суммой. Для интеграций с AI-сервисами, которые могут анализировать такие уведомления и принимать решения, webhook часто оказывается незаменимым. Если хотите глубже изучить тему автоматизации, почитайте нашу статью про AI-агентов в маркетинге, там хорошо показаны смежные сценарии.

В реальной работе вы чаще всего будете иметь дело с несколькими базовыми вещами. POST остаётся основным методом отправки данных, на него приходится около 90% интеграций. Сервер в ответ обязан вернуть статус 200 OK, иначе отправитель решит, что уведомление не доставлено, и запустит retry-механизм: автоматический повтор запроса через определённые промежутки времени. Отдельного внимания заслуживает проверка подписи (signature). Секретный ключ передаётся в заголовке запроса, и без его сверки вы рискуете принимать фейковые уведомления от злоумышленников. GET-запросы встречаются реже, обычно для проверки доступности endpoint или передачи данных в query-параметрах.

На практике схема доставки уведомления выглядит так. Событие на стороне сервиса-отправителя фиксируется и формирует payload с данными, после чего HTTP-запрос уходит на ваш endpoint, указанный при настройке интеграции. Ваш сервер принимает данные, валидирует подпись и обрабатывает payload. Если всё прошло успешно, он возвращает статус 200 OK, подтверждая доставку. При ошибке или таймауте отправитель повторяет запрос по retry-расписанию, а после нескольких неудачных попыток уведомление уходит в очередь недоставленных.

  • Событие на стороне сервиса-отправителя фиксируется и формирует payload с данными.
  • HTTP-запрос уходит на ваш endpoint, указанный при настройке интеграции.
  • Ваш сервер принимает данные, валидирует подпись и обрабатывает payload.
  • Ответ со статусом 200 OK подтверждает успешную доставку уведомления.

Именно эта схема позволяет отстроить надёжную интеграцию без потери данных даже при сбоях на вашей стороне. Главное, что нужно запомнить: webhook это не магия, а обычный HTTP-запрос, который требует от вас корректной обработки, быстрого ответа и обязательной проверки источника.

Как работает webhook: схема и пример — Webhook: что это и как работает

Зачем нужны webhooks: сценарии использования

Webhook-запросы закрывают сценарии, где данные нужно доставить мгновенно, а не вытягивать по расписанию. В CRM, например, событие «сделка закрыта» тут же уходит в учётную систему, в телеграм-менеджеру и в таблицу финансового учёта. Чат-боты так получают ответы платёжных шлюзов: клиент оплатил заказ, и бот сразу отправляет чек, не дожидаясь, пока пользователь сам спросит статус. В CI/CD webhook запускает сборку проекта после каждого git push, это избавляет команду от ручных триггеров и снижает риск забыть про деплой.

В интернет-магазинах webhook синхронизирует остатки между сайтом и складской системой 1С или МойСклад, поэтому покупатель не видит «мёртвые» позиции, которые уже закончились. В маркетинге и аналитике вебхуки передают события из форм лидогенерации в сквозную аналитику или отправляют триггерные письма сразу после действия пользователя. Важно помнить, что webhook-запросы часто связаны с динамическим контентом, и если сайт собирается на JavaScript, поисковик может не увидеть изменения мгновенно, для таких кейсов стоит изучить материал о JavaScript SEO. На практике выбор между webhook и классическим API зависит от задачи, вот базовое сравнение.

КритерийWebhookAPI
Инициатор запросаСервер-отправитель сам push-ит данныеКлиент сам опрашивает сервер (pull)
Скорость доставкиМгновенно, в момент событияС задержкой, зависит от интервала опроса
Нагрузка на серверМинимальная, данные идут только по событиюВысокая при частых пустых опросах
Сложность настройкиНужен публичный endpoint и обработка входящихПроще для отладки, достаточно GET-запросов
Сценарии использованияУведомления, синхронизация в реальном времениВыгрузка больших объёмов, запросы по требованию
Обработка ошибокСложнее, нужны ретраи и логирование доставкиПроще, ошибка видна сразу в ответе

Webhook vs API: в чем разница

Главное различие лежит в инициаторе обмена данными. API работает по запросу: клиент сам обращается к серверу, когда ему нужны данные, и получает ответ. Webhook работает по событию: сервер сам отправляет данные на указанный URL, как только происходит нужное действие. Если API это «спроси и получи», то webhook это «наступило событие, забирай результат». Отсюда и разница в нагрузке: при активном опросе API вы тратите ресурсы на пустые запросы, webhook же доставляет только актуальные изменения.

На практике выбор зависит от сценария. Webhook удобен для уведомлений о статусе заказа, оплате или ошибке в логах, когда событие случается нечасто и нужна мгновенная реакция. Но webhook не подходит, если вам нужна полная история данных или строгий контроль над запросами: при сбое на вашей стороне сервер не будет повторять доставку бесконечно, а часть событий может потеряться. В таких случаях надёжнее классический API с повторными запросами, либо гибридная схема, когда webhook лишь сигнализирует, а детали вы забираете через API.

Как настроить webhook: пошаговая инструкция

Настройка webhook сводится к четырём шагам, и первый из них целиком на вашей стороне. Нужно подготовить конечную точку, то есть URL, по которому сервис будет слать POST-запросы. Это может быть скрипт на PHP, Python или функция в serverless-окружении, главное, чтобы адрес был доступен извне по HTTPS. Сразу заложите в код приём трёх методов: GET для проверки подписи (это требует часть сервисов), POST для обработки данных и ответ с кодом 200. Если сервис не получит 200, он начнёт ретраить доставку, так что даже пустой ответ лучше, чем ошибка.

Дальше регистрируете адрес в настройках сервиса, например, в разделе Webhooks у Stripe, GitHub или в конструкторе Zapier. Там выбираете событие, на которое хотите подписаться: оплата прошла, коммит запушен, лид создан. После сохранения сервис обычно отправляет тестовое уведомление, и тут важно проверить не только факт доставки, но и корректность payload. Мы обычно для отладки используем встроенный лог запросов в Яндекс.Вебмастере или сторонние приёмники вроде webhook.site, чтобы увидеть структуру данных до того, как она попадёт в боевую логику. Если всё прошло, включаете реальные события и смотрите метрики доставки в дашборде сервиса, там сразу видно количество успешных и упавших попыток.

Форматы данных и безопасность webhook

Форматы данных в webhook не отличаются разнообразием. Практически всегда это JSON, реже XML. JSON удобен, лёгок и нативно поддерживается всеми современными языками, поэтому если вы проектируете свой webhook, выбирайте его без раздумий. XML встречается в legacy-системах, например, в интеграциях со старыми CRM или платёжными шлюзами. В теле запроса обычно передаётся идентификатор события, объект данных и метаданные вроде времени генерации события.

Безопасность webhook сводится к двум задачам: убедиться, что запрос пришёл от нужного отправителя, и защититься от подмены данных. На практике используется комбинация секретного ключа и подписи. Отправитель вычисляет HMAC-подпись от тела запроса и секрета, добавляет её в заголовок вроде X-Signature. Получатель повторяет операцию и сравнивает результат. Если подписи совпадают, запрос подлинный. Дополнительно стоит проверять IP-адрес источника и требовать HTTPS, иначе подпись бесполезна, потому что тело запроса можно перехватить и изменить.

Частые ошибки при работе с webhook

На практике большинство проблем с вебхуками возникает не из-за сложности протокола, а из-за банальной невнимательности к деталям. Самая частая ошибка: игнорирование повторных попыток. Сервис-отправитель, будь то платёжная система или CRM, будет дергать ваш URL снова и снова, пока не получит код 200. Если ваш обработчик падает с ошибкой 500 или отвечает не тем статусом, вы получите десятки одинаковых запросов. Их нужно уметь обрабатывать идемпотентно, чтобы не задвоить заказ или платеж.

  • Не проверяйте секретный ключ или подпись в заголовке запроса. Тогда любой сможет слать вам фейковые события.
  • Жёстко задавайте таймаут ответа в 10 секунд. Медленные интеграции будут ронять всю цепочку обработки.
  • Отключайте повторные попытки отправителя. Вы потеряете данные о платежах из-за разовых сетевых сбоев.
  • Используйте один и тот же URL для тестового и боевого контура. Продукти вскроет неотлаженный код.
  • Забываете логировать тело запроса и заголовки. Потом невозможно разобраться, что именно пришло.

Отдельно стоит сказать про логирование. Мы обычно пишем в лог каждый входящий запрос с полным телом и заголовками, хотя бы на неделю. Это единственный способ быстро понять, почему webhook не работает, когда отправитель утверждает, что «всё отправил». И не поленитесь вернуть отправителю корректный статус 200 сразу после приема данных, а не после обработки. Так вы избежите ненужных повторов, а фоновую задачу поставите в очередь.

Частые ошибки при работе с webhook — Webhook: что это и как работает

Инструменты для отладки и тестирования webhook

Отлаживать webhook удобнее всего через локальный туннель. ngrok пробрасывает localhost во внешний интернет и даёт временный HTTPS-адрес, который можно указать в настройках источника. Запросы видно в реальном времени, включая заголовки, тело и статус ответа. Мы обычно запускаем ngrok, ставим адрес в тестовом окружении и смотрим, что именно уходит и приходит.

Для приёма тестовых запросов без своего сервера подходят RequestBin и Webhook.site. Они генерируют URL, собирают все POST-запросы и показывают их содержимое в браузере. Postman тоже полезен: там можно вручную собрать запрос, проверить подпись и посмотреть, как сервис отвечает на разные payload. В связке ngrok и Webhook.site закрывают 90% задач по отладке, и если вебхуки настроены корректно, остаётся только следить за логами. Агентство Cinar как раз занимается такими интеграциями, когда нужно не только настроить обмен данными, но и убедиться, что всё работает под нагрузкой.

Часто задаваемые вопросы

Чем webhook отличается от обычного запроса?
Обычный запрос инициируете вы: например, дергаете API, чтобы получить данные. Webhook работает наоборот: сервис сам отправляет вам POST-запрос, когда происходит событие. Это как разница между «позвонить и спросить» и «оставить номер, чтобы вам перезвонили». Основное преимущество в том, что не нужно опрашивать сервер вручную, экономятся ресурсы и время.
Как получить webhook от сервиса?
Обычно в настройках сервиса есть раздел «Webhooks» или «Уведомления». Нужно указать URL вашего эндпоинта (например, https://вашсайт.ru/hook) и выбрать события, о которых хотите получать уведомления. Часто сервис отправляет тестовое уведомление для проверки. Убедитесь, что ваш сервер доступен из интернета и принимает POST-запросы.
Что делать, если webhook не приходит?
Сначала проверьте логи сервера: возможно, запрос приходит, но падает с ошибкой. Затем посмотрите в настройках сервиса историю доставки, часто там видно статус и код ответа. Если сервис поддерживает повторные попытки, убедитесь, что ваш эндпоинт отвечает 200 OK быстро, иначе сервис может считать доставку неуспешной. Также проверьте, не блокирует ли файрвол или прокси входящие запросы.
Можно ли использовать webhook без сервера?
В классическом варианте нужен сервер, который принимает POST-запросы. Но есть обходные пути: можно использовать серверныеless-платформы вроде AWS Lambda или Google Cloud Functions, они предоставляют временный URL. Также существуют сервисы-перехватчики, например webhook.site, которые позволяют просматривать входящие запросы, но для продакшена это не подходит. Для простых сценариев можно использовать готовые интеграции через Zapier или Make, они сами принимают webhook и запускают действия.
Какие данные передает webhook?
Формат определяется сервисом: обычно это JSON или XML с информацией о событии. Например, для платежной системы это будут сумма, статус, ID транзакции; для CRM — данные клиента и тип изменения. В документации сервиса всегда есть пример payload. Важно обрабатывать данные как непроверенные, так как они приходят извне.
Мы свяжемся с вами, ответим на интересующие вопросы и подготовим коммерческое предложение
Давайте работать
Оставьте заявку, после чего мы сможем собрать ключевые запросы, проверить позиции по ним, составить план продвижения и сделать вам предложение по продвижению сайта с гарантиями.
Ваш номер телефона *
Адрес вашего сайта
Антиспам вопрос: cколько будет 18 + 18 ?
Прикрепить список запросов
Только файлы Word, Excel, Блокнот
Оставить заявку

go to top

7 (933) 990-91-12

7 (931) 178-02-48

7 (933) 990-91-17

7 (933) 990-92-34

7 (933) 990-92-37