На странице
Доставка и retry
Учтите 11 попыток доставки вебхука примерно за 16 часов, отсекайте повторы, разбирайте ошибки и повторяйте событие после восстановления.
Если ваш endpoint вернёт не-2xx статус или превысит таймаут 10 секунд, Paymos повторяет с экспоненциальным backoff (x2). До 11 попыток всего (1 начальная + 10 повторов) за ~16 часов.
Backoff schedule
| Попытка | Задержка после предыдущей | Накопленная задержка |
|---|---|---|
| 1 | сразу | 0 |
| 2 | 1 мин | 1 мин |
| 3 | 2 мин | 3 мин |
| 4 | 4 мин | 7 мин |
| 5 | 8 мин | 15 мин |
| 6 | 16 мин | 31 мин |
| 7 | 32 мин | ~1 час |
| 8 | 1 час | ~2 часа |
| 9 | 2 часа | ~4 часа |
| 10 | 4 часа | ~8 часов |
| 11 | 8 часов | ~16 часов |
После 11 попыток событие помечается failed. Failed-события можно отправить повторно из дашборда — повторная отправка обнуляет счётчик попыток и снова ставит событие в очередь на доставку.
Идемпотентность
Доставка at-least-once. Одно и то же событие с тем же event_id может прийти несколько раз — это нормально при retry. Обработчик должен быть идемпотентным: сохраняйте уже обработанные event_id, а на повторы отвечайте 200 OK без побочных действий (no-op).
Что считается успешной доставкой
- HTTP
2xxответ за 10 секунд → доставка успешна - HTTP
4xxили5xx→ считается ошибкой, будет retry - Connection refused, DNS failure, TLS error → считается ошибкой, будет retry
- Ответ после 10 секунд → считается ошибкой, будет retry (ваш endpoint может обработать дубль)
Возвращайте 2xx как только событие сохранено на вашей стороне. Тяжёлую обработку откладывайте в background-очередь, чтобы webhook-handler укладывался в таймаут.