Произвольный источник

Подписанные вебхуки от любой системы

Если система умеет подписывать вебхуки HMAC-SHA256, она может слать их в HookPilot. Мы выдаём секрет при создании источника, проверяем подпись и метку времени, сохраняем событие и доставляем его в ваши эндпоинты с повторами.

Бесплатный тариф без карты: одно подключение и 10 000 событий в месяц.

Как подключить

Каждый произвольный источник считается одним подключением.

  1. 1

    Создайте источник с провайдером «Произвольный источник (HMAC)». Секрет подписи показывается один раз: сохраните его в отправляющей системе.

  2. 2

    Скопируйте адрес приёма и настройте отправку вебхуков на него.

  3. 3

    Настройте подпись: HMAC-SHA256 от тела запроса на выданном секрете в заголовке X-HookPilot-Signature. Подойдут и X-Signature или X-Hub-Signature-256.

  4. 4

    Подпишите эндпоинты на типы событий. Тип берётся из заголовка X-HookPilot-Event или полей event и type в теле.

Как проверяется подпись

Заголовки подписи

Подпись ищется в X-HookPilot-Signature, X-Signature и X-Hub-Signature-256. Значение может быть в hex или base64, префикс sha256= допускается. Так работает и формат GitHub, и большинство самописных систем.

Метка времени против повторов

Если отправитель передаёт X-HookPilot-Timestamp, подпись считается от строки timestamp.body, а запрос старше пяти минут отклоняется. Перехваченный вебхук нельзя отправить заново позже.

Идентификатор события

Идентификатор берётся из заголовка X-HookPilot-Event-Id или поля id в теле. Повторная отправка с тем же идентификатором не создаст второй вебхук.

Сравнение за постоянное время

Все проверки подписи выполняются функциями с постоянным временем сравнения. По времени ответа нельзя подобрать секрет.

Событие не пришло

Три причины, которые встречаются чаще остальных. Всё принятое видно в ленте принятого в кабинете вместе с типом и историей доставки.

Подпись не сходится

Убедитесь, что подписывается ровно то тело, что уходит по сети, без переформатирования JSON. Если передаёте метку времени, подписывайте строку timestamp.body, а не одно тело.

Запрос отклонён как устаревший

Метка времени в X-HookPilot-Timestamp отличается от нашего времени больше чем на пять минут. Проверьте часы отправителя или не передавайте заголовок, тогда проверка времени не применяется.

Событие принято, вебхука нет

Тип события не совпал с подпиской эндпоинта. Посмотрите определённый тип в ленте принятого и добавьте его в подписку или задайте тип явно заголовком.

Частые вопросы

Остальное в базе знаний или в поддержке.

База знаний
Подойдёт ли для вебхуков GitHub, GitLab и подобных систем?

Да, если система подписывает тело HMAC-SHA256 и кладёт подпись в один из поддерживаемых заголовков. Формат X-Hub-Signature-256 с префиксом sha256= принимается как есть.

Что делать, если секрет потерян?

Секрет показывается только при создании источника. Пересоздайте источник, сохраните новый секрет и обновите его в отправляющей системе.

Можно ли принимать вебхуки без подписи?

Нет. Неподписанный запрос невозможно отличить от чужого, поэтому источник без подписи не принимает ничего. Если система не умеет подписывать, попробуйте опрос HTTP API.

Другие интеграции

Платёжные системы, маркетплейсы и любая система с подписанными вебхуками или HTTP API.