Вебхуки. События в реальном времени, надёжная доставка.
Конечные точки вебхуков для каждой рабочей области получают события кликов, конверсий и управления ссылками с подписями HMAC-SHA256. Автоматические повторы с экспоненциальной задержкой. Режим SIEM транслирует события на вашу платформу безопасности.
- 10+ типов событий - клики, конверсии, изменения доменов
- Подпись HMAC-SHA256 для каждой доставки
- 72 часа повторов с экспоненциальной задержкой
- Журнал доставок с повтором в один клик
Типы событий
10+ типов событий из коробки
Подписывайтесь на каждом эндпоинте отдельно - получайте только нужные события. Высокообъёмные события кликов по умолчанию приходят пакетами в 5-секундном окне; режим raw-click отдаёт каждое событие отдельно для потоковых обработчиков.
- link.clicked
Каждый клик-редирект. Пакетный режим (окно 5 с) или raw-click.
- link.created
В рабочем пространстве создана новая короткая ссылка.
- link.updated
Изменены метаданные ссылки, целевой URL или правила.
- link.deleted
Ссылка удалена - обновите все зависимые ссылки.
- domain.verified
Кастомный домен прошёл DNS-верификацию.
- conversion.attributed
Событие выручки сопоставлено с кликом через Stripe или Shopify.
- campaign.completed
Кампания достигла даты завершения или лимита кликов.
- member.invited
Добавлен участник рабочего пространства или провижен через SCIM.
Плюс link.expired, link.click_cap_reached, domain.ssl_issued и другие - смотрите полный каталог событий.
Гарантии доставки
Экспоненциальная задержка. Окно 72 часа.
Ответ не из диапазона 2xx или таймаут в 30 секунд запускает автоматические повторы: 30 с → 2 мин → 10 мин → 30 мин → 2 ч → 8 ч → 24 ч → 48 ч. Через 72 часа доставка окончательно помечается как неудачная и удаляется из очереди - но остаётся в журнале доставок для ручного повтора.
- Таймаут ответа 30 секундВозвращайте 200 сразу; обрабатывайте асинхронно, если ваш обработчик медленный.
- 8 попыток в течение 72 часовЭкспоненциальная задержка - никаких лавин при перезапуске.
- Автопауза после 30 подряд неудачныхАдминистратор рабочего пространства получит письмо. Возобновление - из панели.
- Повтор из журнала одним кликомИсходный пейлоад, тот же event_id - получатель должен быть идемпотентным.
| Событие | Эндпоинт | Статус | Задержка | Время | |
|---|---|---|---|---|---|
link.clicked | api.acme.com/wh | 200 | 142ms | 14:04:31 | |
link.created | api.acme.com/wh | 200 | 88ms | 14:03:19 | |
conversion.attributed | logs.acme.com | 500 | 30001ms | 14:02:01 | |
domain.verified | api.acme.com/wh | 200 | 67ms | 13:58:44 | |
link.deleted | logs.acme.com | timeout | 30000ms | 13:55:12 |
Журнал доставок
Полный журнал. Фильтр, инспекция, повтор.
Каждая попытка логируется: ID события, тип события, URL эндпоинта, HTTP-статус, тело ответа (до 4 КБ) и задержка. Срок хранения: 30 дней на Pro, 90 дней на Business.
- Фильтр по типу события, эндпоинту, статусу и диапазону дат
- У неудачных записей полное тело запроса для отладки
- Повтор отправляет исходный пейлоад - тот же event_id
- API: POST /v1/webhooks/deliveries/:id/replay
- Режим SIEM: структурированный JSON с гарантией повторов 7 дней
Что вы можете делать
- События кликов, конверсий, ссылок и доменов
- Подпись запросов HMAC-SHA256
- Автоматические повторы - до 72 часов
- Режим SIEM для пересылки событий безопасности
- Фильтрация по типам событий
- Журнал доставки вебхуков с возможностью повтора
Что доставляют вебхуки Elido и как работает доставка
Вебхуки полезны только тогда, когда они надежны. Разделы ниже описывают гарантии доставки, проверку подписи, поведение при повторах и режим SIEM.
События кликов, конверсий, жизненного цикла ссылок и доменов - настраиваются для каждой конечной точки
Каждая конечная точка вебхука может быть подписана на один или несколько типов событий: click.created (каждый клик с перенаправлением), conversion.created (событие конверсии, полученное от Stripe, Shopify или пользовательской конечной точки), link.created, link.updated, link.deleted, link.expired, link.click_cap_reached, domain.verified, domain.ssl_issued, domain.ssl_error, workspace.member.added, workspace.member.removed. События кликов большого объема могут создавать шум - по умолчанию вебхуки click.created отправляются с 5-секундным окном агрегации (пакетная доставка, до 100 событий в одном пакете). Если вам нужна доставка каждого клика в реальном времени (например, для передачи в потоковый процессор), включите режим raw-click на конечной точке; учтите, что это может генерировать тысячи запросов в минуту для активных рабочих областей и должно включаться только для конечных точек, способных справиться с такой пропускной способностью.
Каждый запрос подписан HMAC-SHA256 - проверяйте заголовок X-Elido-Signature перед обработкой
Elido подписывает тело каждого запроса вебхука с помощью HMAC-SHA256, используя общий секрет, настроенный для конечной точки. Подпись включается в заголовок X-Elido-Signature в формате 'sha256=<hex_digest>'. Для проверки: вычислите HMAC-SHA256 по необработанному телу запроса, используя общий секрет, и сравните результат со значением заголовка с помощью функции сравнения за постоянное время (для предотвращения атак по времени). Никогда не обрабатывайте пакет вебхука до проверки подписи. Секрет отображается один раз при создании конечной точки; вы можете обновить его в панели управления с окном перекрытия для нулевого времени простоя (старый секрет остается действительным в течение 15 минут после генерации нового). Примеры кода для проверки подписи на Node.js, Python и Go находятся в руководстве по вебхукам по адресу /docs/guides/webhooks.
Автоматические повторы с экспоненциальной задержкой - до 72 часов до отметки о неудачной доставке
Если конечная точка возвращает код состояния, отличный от 2xx, или происходит тайм-аут (тайм-аут ответа 30 секунд), Elido повторяет доставку с экспоненциальной задержкой: 30 секунд, 2 минуты, 10 минут, 30 минут, 2 часа, 8 часов, 24 часа, 48 часов. После 72-часового окна доставка помечается как окончательно неудачная и удаляется из очереди повторов. Неудачные доставки отображаются в журнале доставки вебхуков с итоговым кодом состояния HTTP (или 'timeout'). Вы можете повторно отправить любую неудачную доставку из панели управления или через API (POST /v1/webhooks/deliveries/:id/replay) - это полезно для восстановления пакета событий после сбоя в принимающей системе. Конечные точки, возвращающие 5xx более 30 раз подряд, автоматически приостанавливаются, а администратор рабочей области получает уведомление по электронной почте. Возобновите работу конечной точки в панели управления после устранения основной проблемы.
Режим SIEM транслирует события аудита рабочей области в Splunk, Datadog или любую конечную точку приема логов HTTPS
Режим SIEM - это специальная конфигурация вебхука для пересылки событий безопасности. Вместо событий приложения (клики, конверсии) режим SIEM доставляет события аудита рабочей области: входы через SSO, неудачные попытки входа, создание/обновление/удаление ключей API, события подготовки SCIM, изменения ролей, ротации секретов вебхуков и действия администратора (удаление ссылок, массовый экспорт). Формат полезной нагрузки - структурированный JSON со стандартной схемой (отметка времени, субъект, действие, объект, workspace_id, ip_address, user_agent), предназначенный для приема в распространенные платформы SIEM. Для вебхуков SIEM гарантируется доставка с окном повторов до 7 дней, и они подписываются отдельно от вебхуков приложения. Протестированные интеграции: Splunk HTTP Event Collector (HEC), Datadog Logs API, Elastic Logstash HTTP input и любая общая конечная точка HTTPS для логов. Режим SIEM - это функция только для тарифа Business.
Полный журнал доставки с телом запроса, кодом ответа и повтором неудачных доставок в один клик
Каждая попытка доставки вебхука регистрируется: ID события, тип события, URL конечной точки, отметка времени доставки, код состояния HTTP, тело ответа (до 4 КБ) и задержка. Журнал доставки можно фильтровать по типу события, конечной точке, диапазону дат и статусу (доставлено, повторяется, ошибка). Неудачные доставки включают полное тело запроса, чтобы вы могли просмотреть событие, вызвавшее сбой, без повторной отправки. Повтор: POST /v1/webhooks/deliveries/:id/replay отправляет исходную полезную нагрузку (не новое событие) на конечную точку - на стороне приемника требуется идемпотентность. Срок хранения журнала доставки составляет 30 дней для Pro, 90 дней для Business. Для постоянного аудита событий вебхуков настройте конечную точку SIEM или включите запланированный экспорт журнала аудита.
Инженерные команды, использующие вебхуки Elido в продакшене
Имена являются заполнителями - реальные кейсы клиентов появятся здесь по мере их публикации.
“Мы используем вебхуки click.created в пакетном режиме для наполнения собственного конвейера аналитики. Проверка подписи HMAC и журнал доставки с возможностью повтора сэкономили нам часы при отладке частичного сбоя - мы переотправили пакет пропущенных событий из панели управления без восстановления событий из источника.”
“Трансляция событий аудита рабочей области в режиме SIEM в наш Splunk HEC была именно той корпоративной функцией, которая требовалась нашей команде InfoSec. События входа через SSO и ротации ключей API в Splunk с правильной схемой позволили нам сопоставить события доступа Elido с нашими правилами оповещения SIEM в течение одного дня после настройки.”
“Вебхуки link.expired запускают наш внутренний рабочий процесс для обновления базы данных печатных материалов - когда ссылка QR-кода истекает, наша операционная команда автоматически получает задачу на обновление физической метки. Никакого ручного мониторинга состояния истечения ссылок.”
Вебхуки Elido против Bitly и Short.io
Ни Bitly, ни Short.io не предлагают исходящие вебхуки с подписью HMAC и гарантиями повтора. Это сравнение честно указывает на этот пробел.
| Feature | Elido | Bitly | Short.io |
|---|---|---|---|
| Исходящие вебхуки | Да - конечные точки для каждой рабочей области, подписка по типам событий | Недоступно | Да - базовый вебхук при клике |
| Подпись HMAC-SHA256 | Да - каждая доставка подписана, предоставлены примеры кода | Не применимо | Частично - заголовок подписи присутствует, но не документирован |
| Автоматические повторы | Да - экспоненциальная задержка, 72-часовое окно | Не применимо | Нет повторов - отправил и забыл |
| Журнал доставки с повтором | Да - 30 дней в Pro, 90 дней в Business, повтор в один клик | Не применимо | Нет журнала доставки |
| Режим аудита событий SIEM | Да - в тарифе Business, структурированный JSON для приема в SIEM | Недоступно | Недоступно |
| Автопауза конечной точки при сбое | Да - пауза после 30 последовательных сбоев, уведомление администратора | Не применимо | Недоступно |
| Типы событий | Клик, конверсия, жизненный цикл ссылки, домен, аудит | Не применимо | Только клики |
Вопросы по вебхукам
Как проверить подпись HMAC-SHA256?
Прочитайте необработанное тело запроса в виде байтов (до любого парсинга JSON), вычислите HMAC-SHA256 по этим байтам, используя общий секрет вашей конечной точки, закодируйте результат в base16 (hex) и сравните его со значением в заголовке X-Elido-Signature после удаления префикса 'sha256='. Используйте функцию сравнения за постоянное время (например, hmac.compare_digest в Python, crypto.timingSafeEqual в Node.js), чтобы предотвратить атаки по времени. Никогда не сравнивайте подпись стандартным оператором равенства строк. Примеры кода для Node.js, Python и Go находятся по адресу /docs/guides/webhooks#verification.
Что должен возвращать мой приемник вебхуков?
Возвращайте HTTP 200 (или любой код состояния 2xx) в течение 30 секунд. Тело ответа игнорируется - вы можете вернуть пустое тело или { ok: true }. Если ваша обработка занимает более 30 секунд, немедленно верните 200 и обрабатывайте событие асинхронно (поместите во внутреннюю очередь, верните 200, обрабатывайте вне пути запроса). Возврат 4xx обрабатывается так же, как 5xx для целей повтора - оба вызывают повторную попытку. Возвращайте 200, даже если событие не относится к вашей интеграции (например, событие link.created, которое вам не нужно), чтобы избежать лишних повторов.
Как работает идемпотентность для событий вебхуков?
Каждая полезная нагрузка вебхука включает поле event_id (UUID). Используйте его в качестве ключа идемпотентности на вашем приемнике: если вы получаете один и тот же event_id дважды (из-за повтора после частичного сбоя), обработайте его только один раз. Храните полученные ID событий в таблице дедупликации с TTL не менее 72 часов (окно повторов). Полезная нагрузка при повторе идентична исходной - тот же event_id, то же тело - поэтому простой проверки 'видел ли я этот event_id?' достаточно.
Почему моя конечная точка была приостановлена автоматически?
Конечные точки автоматически приостанавливаются после 30 последовательных неудач доставки (не 2xx или тайм-аут). Это предотвращает бесконечные попытки Elido достучаться до сломанной точки. Исправьте основную проблему (обычно: URL изменился, сервер не работает или превышен 30-секундный тайм-аут из-за медленной обработки), затем возобновите работу конечной точки в панели управления. После возобновления Elido не переотправляет автоматически события, которые были пропущены во время паузы - отправьте их вручную из журнала доставки, если вам нужно их восстановить.
Могу ли я получать события кликов в реальном времени для каждого отдельного клика?
Да - включите режим raw-click на конечной точке. В режиме raw-click Elido доставляет события click.created индивидуально без окна пакетной обработки в течение 2 секунд после клика. Имейте в виду, что активная рабочая область может генерировать тысячи событий в минуту в режиме raw-click; убедитесь, что ваш приемник может справиться с такой пропускной способностью. Для большинства аналитических задач достаточно стандартной 5-секундной пакетной агрегации (до 100 кликов в пакете), которая создает гораздо меньше HTTP-запросов.
Каков предел размера полезной нагрузки для событий вебхуков?
Полезная нагрузка отдельных событий составляет менее 10 КБ. Пакетные полезные нагрузки кликов (режим по умолчанию) могут содержать до 100 событий в пакете, с общим ограничением размера полезной нагрузки в 100 КБ. Если пакет превышает 100 КБ, он автоматически разбивается на несколько доставок. Большие поля метаданных кликов (например, длинные URL рефереров) обрезаются до 2 КБ на поле. Если ваш приемник применяет строгое ограничение на размер полезной нагрузки, настройте режим raw-click (одно событие на доставку) вместо пакетного режима.
Есть ли способ протестировать вебхуки локально во время разработки?
Используйте инструмент, такой как ngrok, Cloudflare Tunnel или localtunnel, чтобы предоставить доступ к вашему локальному серверу через публичный HTTPS URL, а затем зарегистрируйте этот URL как конечную точку вебхука в вашей тестовой рабочей области. Кроме того, используйте кнопку тестового запуска вебхука в панели управления, чтобы отправить образец полезной нагрузки для любого типа события на зарегистрированную конечную точку без запуска реального события. Elido CLI (elido webhook test --event click.created --endpoint https://...) также подходит для автоматизированного локального тестирования.
Что происходит с событиями вебхуков во время запланированного технического обслуживания?
События, сгенерированные во время технического обслуживания, ставятся в очередь в нашем потоке событий и доставляются после окончания работ. Страница состояния Elido (status.elido.app) заранее сообщает о запланированных окнах обслуживания. SLA доставки вебхуков исключает объявленные окна обслуживания. Для типичного окна обслуживания в 30–60 минут 72-часовое окно повторов означает, что события не будут потеряны безвозвратно - они будут доставлены в том порядке, в котором были сгенерированы, как только конечная точка снова станет доступна.
Читать дальше
Синхронное дополнение API к асинхронным вебхукам - создание и запрос ссылок программно.
Получайте события конверсий через вебхуки от Stripe и Shopify - сторона входящих вебхуков.
Режим SIEM доставляет события аудита рабочей области - входы SSO, подготовку SCIM, изменения ролей.
События кликов в вашем аналитическом хранилище - альтернатива получению кликов через вебхук на стороне запросов.
Готовы попробовать?
Начните с бесплатного тарифа, перейдите на платный, когда вам понадобится пользовательский домен.