Открыть сервис

Вебхук

Вебхук (от англ. webhook) — это механизм автоматической передачи данных между двумя информационными системами, при котором одна система при наступлении определённого события отправляет HTTP-запрос (обычно POST) с данными об этом событии на заранее заданный URL-адрес другой системы. В отличие от традиционного опроса (polling), когда клиент периодически запрашивает сервер на наличие новых данных, вебхук реализует push-модель: сервер сам инициирует отправку уведомления клиенту. Это позволяет получать информацию о событиях практически в реальном времени без постоянных затрат ресурсов на фоновые запросы.

История

Концепция вебхуков возникла как развитие идей REST API и веб-сервисов. Термин «webhook» впервые был предложен Джеффом Линдси в 2007 году в блоге компании «Progrium», где он описал идею «пользовательских HTTP-колбэков» для автоматизации взаимодействия между веб-приложениями. Линдси определил вебхук как «HTTP-обратный вызов, определяемый пользователем». Идея быстро получила распространение в сообществе разработчиков, так как позволяла упростить интеграцию сервисов и избавиться от необходимости постоянного опроса API.

Первоначально вебхуки использовались в основном в системах управления проектами и непрерывной интеграции (например, GitHub начал поддерживать вебхуки в 2008 году для уведомлений о push-событиях в репозиториях). Впоследствии механизм стал стандартным для многих платформ: платежных систем (PayPal, Stripe), мессенджеров (Slack, Telegram), облачных сервисов (Google Cloud, AWS), систем мониторинга (Zabbix, Prometheus) и CRM (Bitrix24, amoCRM). В России вебхуки активно применяются в экосистемах «Яндекс» (например, уведомления о доставке писем в Яндекс.Почте) и «ВКонтакте» (для ботов и callback-API).

Принцип работы

Вебхук работает по следующей схеме:

  1. Регистрация URL: владелец принимающей системы (клиента) предоставляет отправителю (серверу) публичный URL-адрес, на который будут приходить уведомления. Этот URL должен быть доступен из интернета (или локальной сети, если сервер находится в той же сети).
  2. Настройка событий: отправитель позволяет выбрать, на какие именно события (например, создание нового заказа, изменение статуса задачи, получение платежа) будет срабатывать вебхук.
  3. Наступление события: при возникновении выбранного события сервер формирует HTTP-запрос (обычно POST) с телом, содержащим данные о событии в формате JSON, XML или form-data.
  4. Отправка запроса: сервер отправляет запрос на зарегистрированный URL. В заголовках запроса часто передаются метаданные (например, тип события, подпись для проверки подлинности).
  5. Обработка на стороне клиента: принимающая система получает запрос, обрабатывает данные (например, создаёт запись в базе данных, отправляет уведомление пользователю) и возвращает HTTP-ответ с кодом 200 OK (или 2xx) для подтверждения успешного приёма. Если ответ не получен или код ошибки (4xx, 5xx), отправитель может повторить попытку через некоторое время.

Типичные заголовки HTTP-запроса вебхука

ЗаголовокОписание
Content-TypeТип содержимого тела запроса (обычно application/json).
X-Hub-SignatureПодпись для проверки подлинности запроса (например, HMAC-SHA256).
X-Event-NameТип события, вызвавшего вебхук (например, order.created).
User-AgentИдентификатор отправляющей системы.

Виды вебхуков

Вебхуки можно классифицировать по нескольким признакам:

По способу доставки

  • Простой вебхук: отправляется один раз на один URL. Если доставка не удалась (сервер не отвечает или возвращает ошибку), отправитель может выполнять повторные попытки (обычно 3–5 раз с увеличивающимися интервалами).
  • Вебхук с подтверждением: перед отправкой данных отправитель может запросить подтверждение от принимающей системы (например, через GET-запрос с параметром challenge). Это используется для проверки доступности URL и предотвращения злоупотреблений.
  • Вебхук с подписью: для обеспечения безопасности тело запроса подписывается секретным ключом, известным обеим сторонам. Принимающая система проверяет подпись, чтобы убедиться, что запрос действительно отправлен доверенным источником.

По типу триггера

  • Событийные вебхуки: срабатывают при наступлении конкретного события (например, «новый пользователь зарегистрировался»).
  • Периодические вебхуки: отправляются по расписанию (например, раз в час) и содержат агрегированные данные за период. Фактически это гибрид между вебхуком и опросом.

Применение

Вебхуки широко используются в различных областях:

Интеграция веб-сервисов

  • Платежные системы: Stripe, PayPal, Яндекс.Касса отправляют вебхуки при успешном или неудачном платеже, возврате средств, изменении статуса подписки.
  • Системы управления проектами: Trello, Asana, Jira уведомляют о создании, изменении или удалении задач, комментариев, досок.
  • CRM и маркетинговые платформы: Bitrix24, amoCRM, SendPulse отправляют данные о новых лидах, сделках, подписчиках.
  • Мессенджеры и чаты: Slack, Telegram, Viber используют вебхуки для интеграции ботов, отправки уведомлений из внешних систем (например, о новых сообщениях в канале).

DevOps и непрерывная интеграция

Интернет вещей (IoT)

  • Устройства IoT (датчики температуры, умные розетки, камеры) могут отправлять вебхуки при изменении состояния (например, превышение температуры, обнаружение движения). Это позволяет интегрировать их с облачными платформами (например, Яндекс.Умный дом, Home Assistant).

Электронная коммерция

  • Интернет-магазины на платформах Shopify, WooCommerce, OpenCart используют вебхуки для уведомлений о новых заказах, изменении статуса доставки, отмене заказа. Это позволяет автоматически обновлять данные в CRM, бухгалтерских системах (например, 1С) или отправлять уведомления клиентам.

Безопасность

Поскольку вебхуки передают данные через открытый интернет, они уязвимы для перехвата, подделки и повторной атаки (replay attack). Основные меры защиты:

  • HTTPS: все запросы должны отправляться по защищённому протоколу HTTPS для шифрования данных при передаче.
  • Проверка подписи: отправитель подписывает тело запроса секретным ключом (например, HMAC-SHA256). Принимающая система вычисляет подпись на основе полученных данных и своего секретного ключа и сравнивает с переданной. Если подписи не совпадают, запрос отклоняется.
  • IP-фильтрация: принимающая система может ограничить список IP-адресов, с которых разрешено получать вебхуки. Однако этот метод менее надёжен, так как IP-адреса могут меняться.
  • Проверка источника: отправитель может включать в заголовки уникальный идентификатор или токен, который проверяется на стороне клиента.
  • Ограничение на повторные попытки: клиент должен игнорировать дублирующиеся запросы (например, по уникальному ID события в теле запроса) и не обрабатывать их повторно.
  • Валидация данных: все полученные данные должны быть проверены на корректность и безопасность (например, на SQL-инъекции, XSS-атаки).

Ограничения и недостатки

  • Зависимость от доступности URL: если принимающая система временно недоступна, вебхук может быть потерян (если отправитель не реализует повторные попытки) или доставлен с задержкой.
  • Сложность отладки: в отличие от API, где можно вручную отправить запрос, вебхуки генерируются только при реальных событиях, что затрудняет тестирование. Многие сервисы предоставляют инструменты для симуляции вебхуков (например, Webhook.site, RequestBin).
  • Отсутствие гарантии доставки: не все сервисы гарантируют доставку вебхука. Некоторые могут терять запросы при перегрузке или сбоях. Для критически важных данных рекомендуется использовать дополнительные механизмы (например, очереди сообщений или повторные запросы).
  • Безопасность: при неправильной настройке (например, без проверки подписи) вебхуки могут быть использованы для атак на принимающую систему (например, подделка запросов).

Интересные факты

  • Термин «webhook» является портманто от «web» и «hook» (крючок), что отражает идею «зацепки» за событие.
  • В 2010 году компания GitHub опубликовала спецификацию Webhooks API, которая стала де-факто стандартом для многих сервисов.
  • Некоторые сервисы (например, Zapier, IFTTT) предоставляют визуальные конструкторы вебхуков, позволяющие пользователям без навыков программирования настраивать интеграции между различными приложениями.
  • В России вебхуки активно используются в экосистеме «Сбер» (например, для уведомлений о статусе платежей в Сбербанк Онлайн) и в сервисах «Тинькофф» (для уведомлений о транзакциях).

Источники

  • Линдси Д. Webhooks: The Definitive Guide. — 2007.
  • Документация GitHub. Webhooks API.
  • Документация Stripe. Webhooks.
  • Документация Telegram Bot API. Webhooks.
  • Документация Яндекс.Кассы. Уведомления (вебхуки).
  • RFC 7230 — Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →