Повторный приход одного и того же вебхука после тайм-аута — стандартное поведение большинства сервисов: если ответ не получен вовремя, отправитель считает, что запрос не дошёл, и пробует снова.
Ускорьте подтверждение получения
Возвращайте 200 OK сразу после приёма запроса, до начала тяжёлой обработки — если обработка (запрос к CRM, генерация файла) выполняется синхронно внутри того же запроса и занимает больше пары секунд, велика вероятность, что отправитель не дождётся ответа.
Обрабатывайте асинхронно через очередь
Вынесите реальную обработку в фоновую задачу, а обработчику вебхука оставьте только быстрый приём и постановку в очередь — это решает проблему тайм-аутов у источника, независимо от того, сколько реально занимает полная обработка.
Идемпотентность остаётся обязательной
Даже при быстром ответе повторы иногда всё равно случаются — обработка должна проверять по ID события, не была ли она уже выполнена, чтобы повтор не создавал дублирующих действий.



