← Назад до блогу

Перевищено ліміт запитів API в n8n: як виправити 429 без дублювання записів

Виправте помилки ліміту запитів API в n8n: прочитайте 429, групуйте запити, повторюйте після вікна ліміту й додайте ключі ідемпотентності проти дублів.

Рожеві кульки чекають рівномірними групами біля пропускного пункту, на шлагбаумі стоїть пісочний годинник

Перевірено за наведеними джерелами .

Що потрібно і яка мета

Помилка «API rate limit exceeded» означає, що сервіс, до якого ви звертаєтеся, просить надсилати менше запитів. В n8n вона може з’явитися як відповідь HTTP 429 від вузла HTTP Request. У цьому посібнику ви створите workflow, який обробляє такі 429 і не надсилає той самий запис двічі під час повторних спроб.

Перш ніж почати, підготуйте:

Sources: Handle rate limits | Nodes | n8n Docs, 429 Too Many Requests - HTTP | MDN

Крок за кроком: обробка помилок перевищення ліміту запитів API

П’ять предметів у ряд як кроки обробки помилки перевищення ліміту запитів API в n8n — від 429 до захищеного запису
Ілюстрація послідовності п’яти кроків посібника.

Виконуйте кроки по черзі. Після кожного знову запускайте workflow і перевіряйте результат, перш ніж додавати наступну зміну. Так ви знатимете, яка саме зміна допомогла.

Виправляйте 429 крок за кроком

  1. Відтворіть: Викличте 429 і прочитайте помилку в панелі виводу вузла.
  2. Перевірте: Поверніть код статусу й заголовки та пошукайте Retry-After.
  3. Групуйте: Налаштуйте Items per Batch і Batch Interval під ліміти API.
  4. Повторюйте: Увімкніть Retry On Fail з паузою, довшою за вікно ліміту.
  5. Захистіть записи: Додайте ключ ідемпотентності до POST-запитів, якщо API його підтримує.

Спершу відтворіть помилку перевищення ліміту запитів API. Згідно з документацією n8n, коли сервіс повертає помилку 429, вузол завершується з повідомленням, що сервіс отримує забагато запитів. Це повідомлення можна прочитати в панелі виводу вузла.

Далі увімкніть у вузлі HTTP Request опцію відповіді Include Response Headers and Status. За документацією n8n, вона повертає код статусу й заголовки разом із тілом. MDN зазначає, що відповідь 429 може містити заголовок Retry-After, який підказує клієнту, скільки чекати. Проте цей заголовок необов’язковий, і кожен сервер встановлює власні правила. Документація n8n не пояснює, як автоматично реагувати на Retry-After, тож поки що сприймайте його як інформацію, яку ви читаєте самі.

Потім рознесіть запити в часі. В опції Batching вузла HTTP Request параметр Items per Batch задає, скільки елементів надсилається разом, а Batch Interval — паузу між пакетами в мілісекундах. Оберіть значення, що вкладаються в задокументовані ліміти API.

Після цього відкрийте Settings вузла й увімкніть Retry On Fail. Документація n8n радить встановити Wait Between Tries довшим за вікно ліміту запитів. У цій документації не описано ні максимальної кількості спроб, ні експоненційних пауз.

Sources: Handle rate limits | Nodes | n8n Docs, HTTP Request | Nodes | n8n Docs, 429 Too Many Requests - HTTP | MDN

Захистіть повторні записи ключами ідемпотентності

Насамкінець захистіть операції запису. В API Stripe усі POST-запити приймають ключі ідемпотентності. Повторний запит із тим самим ключем повертає збережений перший результат замість повторного виконання операції. Така поведінка властива саме Stripe. Наша редакційна порада: надсилайте ключ у спосіб, описаний у документації вашого API, і лише тоді, коли там задокументовано підтримку ключів ідемпотентності. Формуйте його зі стабільного бізнес-ідентифікатора, наприклад номера замовлення, а не з випадкового значення, що змінюється з кожною спробою.

Sources: Idempotent requests | Stripe API Reference

Очікувані результати та усунення проблем

Дубльовані чеки поруч з одним проштампованим чеком — повторні записи без ключа ідемпотентності та з ним
Концептуальне порівняння повторних спроб із ключами ідемпотентності та без них.

Коли пакетування й повторні спроби налаштовано, помилок 429 має стати менше. Якщо помилка перевищення ліміту запитів API все ж з’являється, повтори з паузою, довшою за вікно ліміту, дають пізнішій спробі шанс на успіх, але 429 усе ще може зупинити вузол, якщо ліміт не знімається. Якщо щось досі не працює, знайдіть свій симптом нижче.

Поширені симптоми та що перевірити
СимптомЙмовірна причинаЩо перевірити
429 не зникаютьПакети завеликі або йдуть надто частоЗменште Items per Batch або збільште Batch Interval
429 не зникають після повторівWait Between Tries коротший за вікно лімітуВстановіть паузу, довшу за вікно ліміту запитів
Дублікати записівПовторні POST-запити не мають ключа ідемпотентностіПеревірте, чи підтримує API ключі ідемпотентності
Дублікати навіть із ключемКлюч змінюється з кожною спробоюФормуйте ключ зі стабільного бізнес-ідентифікатора

Якщо повторні спроби спрацьовують в один і той самий момент, зверніться до давнішої загальної поради. У дописі 2017 року в інженерному блозі Stripe рекомендував експоненційну затримку (exponential backoff), коли пауза подвоюється після кожної невдачі, а також випадковий jitter, щоб багато клієнтів не повторювали запити одночасно. Тому допису вже кілька років, і нічого з цього не є вбудованою функцією n8n. Будь-яка реалізація цього в n8n — це патерн, який ви проєктуєте самі.

Sources: Handle rate limits | Nodes | n8n Docs, HTTP Request | Nodes | n8n Docs, Idempotent requests | Stripe API Reference, Designing robust and predictable APIs with idempotency

Спробуйте на практиці

Практичні завдання з n8n

Оберіть завдання й створіть робочий воркфлоу у власному середовищі n8n – до кожного завдання є п’ять поступових підказок.

Спробувати практичне завдання

Для вашої команди

Програми навчання n8n для однієї команди чи відділу – на вашому власному екземплярі n8n, з вашими інструментами й даними.

Навчання для вашої команди