{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://inquir.org/ru/use-cases/github-webhooks#webpage","url":"https://inquir.org/ru/use-cases/github-webhooks","name":"Обработка GitHub webhooks: timing-safe HMAC и дедупликация по Delivery ID","headline":"Обработка GitHub webhooks: timing-safe HMAC и дедупликация по Delivery ID","description":"Serverless-обработчик GitHub-вебхуков: HMAC-SHA256, push/PR/release события, async-пайплайн для CI/CD, автоматизации issues и индексирования репозитория.","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":"Сценарии","item":"https://inquir.org/use-cases"},{"@type":"ListItem","position":3,"name":"Вебхуки GitHub","item":"https://inquir.org/use-cases/github-webhooks"}]},{"@type":"HowTo","@id":"https://inquir.org/ru/use-cases/github-webhooks#howto","name":"Обработка GitHub webhooks: timing-safe HMAC и дедупликация по Delivery ID","description":"Serverless-обработчик GitHub-вебхуков: HMAC-SHA256, push/PR/release события, async-пайплайн для CI/CD, автоматизации issues и индексирования репозитория.","inLanguage":"ru-RU","author":{"@type":"Organization","name":"Inquir"},"step":[{"@type":"HowToStep","position":1,"name":"Проверить HMAC","text":"HMAC-SHA256 raw body с `GITHUB_WEBHOOK_SECRET`; timing-safe сравнение с `X-Hub-Signature-256`."},{"@type":"HowToStep","position":2,"name":"Дедуплицировать","text":"Записать `X-GitHub-Delivery` в БД; конфликт — ответить 200 без работы."},{"@type":"HowToStep","position":3,"name":"Запустить оркестрацию","text":"`global.durable.startNew('process', undefined, { event, payload })` → `return { statusCode: 200 }`."}],"isPartOf":{"@id":"https://inquir.org/ru/use-cases/github-webhooks#webpage"}},{"@type":"FAQPage","@id":"https://inquir.org/ru/use-cases/github-webhooks#faq","url":"https://inquir.org/ru/use-cases/github-webhooks","isPartOf":{"@id":"https://inquir.org/ru/use-cases/github-webhooks#webpage"},"mainEntity":[{"@type":"Question","name":"Как настроить GitHub webhook?","acceptedAnswer":{"@type":"Answer","text":"В Settings → Webhooks: URL шлюза Inquir, Content type: application/json, secret — значение `GITHUB_WEBHOOK_SECRET`."}},{"@type":"Question","name":"Поддерживается GitHub App вместо PAT?","acceptedAnswer":{"@type":"Answer","text":"Да. Webhook secret тот же. Разница — в том, как вы вызываете GitHub API из пайплайна."}}]}]}