{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://inquir.org/ru/serverless-webhook-processor#webpage","url":"https://inquir.org/ru/serverless-webhook-processor","name":"Serverless-обработчик вебхуков с повторами, логами и фоновыми задачами","headline":"Serverless-обработчик вебхуков с повторами, логами и фоновыми задачами","description":"Serverless-процессор вебхуков: проверка HMAC-подписи, быстрый ответ в рамках таймаута провайдера, идемпотентные фоновые задачи и трассировки — Stripe, GitHub, Slack и любой провайдер на стабильных URL.","inLanguage":"ru-RU","isPartOf":{"@id":"https://inquir.org/#website"},"author":{"@type":"Organization","name":"Inquir"},"datePublished":"2025-01-01T00:00:00.000Z","dateModified":"2026-04-20T00:00:00.000Z","citation":"https://inquir.org/docs"},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Главная","item":"https://inquir.org"},{"@type":"ListItem","position":2,"name":"Serverless-обработчик вебхуков","item":"https://inquir.org/serverless-webhook-processor"}]},{"@type":"HowTo","@id":"https://inquir.org/ru/serverless-webhook-processor#howto","name":"Serverless-обработчик вебхуков с повторами, логами и фоновыми задачами","description":"Serverless-процессор вебхуков: проверка HMAC-подписи, быстрый ответ в рамках таймаута провайдера, идемпотентные фоновые задачи и трассировки — Stripe, GitHub, Slack и любой провайдер на стабильных URL.","inLanguage":"ru-RU","author":{"@type":"Organization","name":"Inquir"},"step":[{"@type":"HowToStep","position":1,"name":"Проверить подпись","text":"Сравните HMAC из заголовка с вычисленным значением — до любой другой работы."},{"@type":"HowToStep","position":2,"name":"Ответить 200 быстро","text":"Запишите ключ идемпотентности и вызовите `global.durable.startNew()` до возврата ответа."},{"@type":"HowToStep","position":3,"name":"Обработать событие в пайплайне","text":"Шаги пайплайна выполняют тяжёлую работу: API-вызовы, запись в БД, нотификации."}],"isPartOf":{"@id":"https://inquir.org/ru/serverless-webhook-processor#webpage"}},{"@type":"FAQPage","@id":"https://inquir.org/ru/serverless-webhook-processor#faq","url":"https://inquir.org/ru/serverless-webhook-processor","isPartOf":{"@id":"https://inquir.org/ru/serverless-webhook-processor#webpage"},"mainEntity":[{"@type":"Question","name":"Как проверить подпись Stripe?","acceptedAnswer":{"@type":"Answer","text":"Raw body с `transfer-encoding: identity`, HMAC SHA-256 с ключом из переменной окружения, timing-safe сравнение — полный код в примере страницы."}},{"@type":"Question","name":"Что делать при дубле от провайдера?","acceptedAnswer":{"@type":"Answer","text":"Записать ID доставки в базу с `INSERT … ON CONFLICT DO NOTHING` до начала основной работы."}},{"@type":"Question","name":"What about replay attacks?","acceptedAnswer":{"@type":"Answer","text":"Combine HMAC verification, provider-supplied timestamps (check within ±5 minutes), and idempotency keys so late replays are rejected and duplicate deliveries are no-ops."}},{"@type":"Question","name":"Can I test locally?","acceptedAnswer":{"@type":"Answer","text":"Use the Stripe CLI `stripe listen --forward-to` or similar tools to forward real webhook events to a local handler. Keep the same event.body string contract as the gateway delivers in production."}}]}]}