Как работает вебхук

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

Событие в источнике (новый заказ)
        ↓
POST https://receiver.example/webhooks/orders
Content-Type: application/json
X-Signature: sha256=abc123...

{
  "event": "order.created",
  "order_id": "12345",
  "user_id": "u_789",
  "total": 4990,
  "timestamp": "2025-03-15T14:30:00Z"
}
        ↓
Получатель → HTTP 200 OK → обработка в очереди

Получатель должен ответить 200 быстро — не блокируясь на бизнес-логике. Тяжёлую обработку помещают в асинхронную очередь.

Вебхуки vs Polling

Параметр Вебхук Polling
Задержка Миллисекунды До интервала опроса
Нагрузка на источник Минимальная N запросов/сек независимо от событий
Реализация у получателя Публичный endpoint Планировщик + запрос
Надёжность Требует retry-логики Проще гарантировать

Для событий в реальном времени (синхронизация заказов, обновление цен, пользовательские действия) вебхуки предпочтительнее. Polling оправдан, когда источник не поддерживает вебхуки или события нужно агрегировать пакетами.

Надёжность и идемпотентность

Вебхук-эндпоинт должен быть идемпотентным: одно и то же событие может быть доставлено дважды (при повторной попытке после тайм-аута). Логика обработки не должна создавать дублирующих записей при повторной доставке.

Стандартная схема защиты от дублей — хранение обработанных ID событий в кэше (Redis, Memcached) с TTL, равным максимальному окну повторных попыток источника.

Важно: проверяйте HMAC-подпись до обработки тела запроса. Это единственный надёжный способ убедиться, что вебхук пришёл от доверенного источника, а не от постороннего запроса на ваш публичный URL.

Вебхуки в e-commerce интеграциях

В e-commerce вебхуки чаще всего используются для:

  • Синхронизации каталога: платформа персонализации получает уведомление об изменении цен и остатков из ERP/PIM немедленно
  • Событий заказов: платёжная система уведомляет CRM и CDP о новом заказе для обновления профиля клиента
  • Поведенческих событий: мобильное приложение отправляет события в платформу персонализации для обновления аффинити-профиля в реальном времени