Вебхук¶
Вебхук (от англ. 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).
¶Принцип работы
Вебхук работает по следующей схеме:
- Регистрация URL: владелец принимающей системы (клиента) предоставляет отправителю (серверу) публичный URL-адрес, на который будут приходить уведомления. Этот URL должен быть доступен из интернета (или локальной сети, если сервер находится в той же сети).
- Настройка событий: отправитель позволяет выбрать, на какие именно события (например, создание нового заказа, изменение статуса задачи, получение платежа) будет срабатывать вебхук.
- Наступление события: при возникновении выбранного события сервер формирует HTTP-запрос (обычно POST) с телом, содержащим данные о событии в формате JSON, XML или form-data.
- Отправка запроса: сервер отправляет запрос на зарегистрированный URL. В заголовках запроса часто передаются метаданные (например, тип события, подпись для проверки подлинности).
- Обработка на стороне клиента: принимающая система получает запрос, обрабатывает данные (например, создаёт запись в базе данных, отправляет уведомление пользователю) и возвращает 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 и непрерывная интеграция
- Системы контроля версий: GitHub, GitLab, Bitbucket отправляют вебхуки при push-коммитах, создании pull request, merge-запросах. Это позволяет автоматически запускать сборки, тесты и деплой.
- Системы мониторинга: Zabbix, Prometheus, Grafana могут отправлять вебхуки при срабатывании алертов (например, превышение порога загрузки CPU).
- CI/CD-серверы: Jenkins, GitLab CI, GitHub Actions могут использовать вебхуки для триггера пайплайнов.
¶Интернет вещей (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 →


