Как работает вебхук
Вебхук переворачивает обычную схему запрос–ответ: не получатель спрашивает источник, а источник уведомляет получателя.
Событие в источнике (новый заказ)
↓
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 о новом заказе для обновления профиля клиента
- Поведенческих событий: мобильное приложение отправляет события в платформу персонализации для обновления аффинити-профиля в реальном времени