Безопасность и обработчик
Безопасность
Каждый исходящий вебхук защищён с помощью подписи, основанной на хешировании содержимого. Подпись HMAC с использованием алгоритма SHA256 вычисляется из тела запроса и передаётся в заголовке Pachca-Signature.
В теле вебхука также содержится поле webhook_timestamp — метка времени в формате UNIX, указывающая момент отправки вебхука. Рекомендуется проверять, что это значение находится в пределах одной минуты от времени получения запроса, чтобы предотвратить атаки повторной отправки (replay attacks).
Проверьте подпись
Для проверки подписи необходимо вычислить её самостоятельно, используя секрет вебхука Signing secret, который доступен в настройках бота во вкладке «Исходящий webhook». Рекомендуется использовать сырой (raw) контент тела запроса для вычисления хеша, так как при JSON-парсинге содержимое может быть изменено.
Валидируйте IP-адрес отправителя
Кроме проверки подписи, также рекомендуется валидировать IP-адреса отправителя.
IP-адрес Пачки: 37.200.70.177
Реализация webhook handler
Полный пример обработки вебхуков на TypeScript (Express.js) и Python (Flask) с проверкой подписи, защитой от replay-атак и обработкой всех типов событий.
TypeScript (Express.js)
Python (Flask)
Идемпотентная обработка
Пачка использует at-least-once delivery — один и тот же вебхук может прийти повторно. Обработчик должен быть идемпотентным:
Обработка ошибок доставки
Если ваш сервер не ответил 2xx в течение таймаута, Пачка повторит попытку доставки. Рекомендации:
- Отвечайте
200 OKкак можно быстрее — выносите тяжёлую обработку в фоновую очередь - При временных ошибках отвечайте
503— Пачка повторит позже - При постоянных ошибках (невалидные данные) —
200 OKчтобы избежать бесконечных повторов