Помилки зв'язування елементів у n8n: чому .item не працює і як це виправити
Посібник для початківців про помилки зв'язування елементів у n8n: розпізнайте помилку, знайдіть вузол, що рве ланцюжок, і виправте її через pairedItem або позиційні методи.

Перевірено за документацією n8n .
Що потрібно і яка мета
Вам знадобиться багатокроковий workflow, запущений у вашому власному середовищі n8n. Принаймні один вузол у ньому має повертати більше одного елемента. Також варто вміти зіставляти дані за допомогою базових виразів. Один зі способів створити посилання — перетягнути поле з панелі INPUT у параметр вузла, і n8n сам запише вираз.
Мета така. Один із наступних вузлів використовує вираз на кшталт $("Some Node").item, щоб прочитати дані з вузла, який стоїть не безпосередньо перед ним, і цей вираз видає помилку. Наприкінці ви знатимете, чому так сталося і як це виправити. Одне застереження: кроки нижче спираються на офіційну документацію, а не на власне тестування, і версію n8n не вказано. Формулювання повідомлень про помилки та інтерфейс у вашій версії можуть відрізнятися.
Як n8n зв'язує елементи у workflow
Коли ви посилаєтеся на вузол, що стоїть не безпосередньо перед поточним, n8n має розв'язати задачу. Той попередній вузол міг створити багато елементів, тож n8n мусить визначити, який із них відповідає елементу, з яким ви працюєте зараз. Для цього він іде за ниткою елемента назад через кожен вузол ланцюжка.
Якщо вузол сам не керує зв'язуванням, n8n намагається зв'язати елементи автоматично. Якщо вузол отримує певну кількість елементів і повертає таку саму, n8n зв'язує їх по порядку: перший вихідний — з першим вхідним і так далі. Автоматичне зв'язування перестає працювати у двох випадках. Перший — коли кількість на вході й виході різна. Другий — коли вузол створює абсолютно нові елементи. Помилка .item означає, що нитка або обірвана, або веде до кількох попередніх елементів.
Крок 1: визначте, яке повідомлення про помилку ви бачите

Перш ніж щось змінювати, уважно прочитайте повідомлення про помилку. Два повідомлення мають різні причини й різні способи виправлення. Перше каже, що бракує інформації для виразу. Це означає, що якийсь вузол у ланцюжку не повернув інформацію про зв'язок, тож нитка обірвана.
Друге каже, що є кілька відповідних елементів. Це означає, що нитка існує, але веде до кількох попередніх елементів, тож n8n не може вибрати один. Спершу з'ясуйте, яке повідомлення у вас, а потім переходьте до кроку 3a або 3b. Одна ця звичка вбереже вас від переписування коду, який ніколи й не був проблемою.
Sources: S1
Крок 2: перевірте, які вузли розділяють, об'єднують або створюють елементи

Документація не описує візуального інструмента для відстеження ниток елементів, тож цей крок — наш власний запропонований метод. Почніть із вузла, що показує помилку, і рухайтеся назад до вузла, на який посилається ваш вираз. Для кожного проміжного вузла відкрийте його й порівняйте, скільки елементів надходить і скільки виходить.
Зверніть увагу на три шаблони. Перший — вузол, що повертає іншу кількість елементів, ніж отримав. Другий — вузол Code, який створює нові елементи з нуля. Третій — агрегувальний вузол, як-от Summarize, Aggregate чи Merge. Різна кількість і нові елементи вказують на помилку про брак інформації. Агрегувальні вузли часто спричиняють помилку про кілька збігів.
Крок 3a: виправте брак інформації, додавши pairedItem у вузлах Code
Якщо розрив у вузлі Code, задайте pairedItem для кожного елемента, який повертаєте. Його значенням має бути індекс вхідного елемента, з якого утворився новий. Коли вузол Code створює нові елементи без pairedItem, n8n не має змоги простежити їх до вихідних елементів.
Для навчання радимо зібрати невелике відтворення. Створіть вузол Code, що повертає нові елементи без pairedItem, а далі у workflow зверніться до попереднього вузла через .item. Коли помилка з'явиться, додайте pairedItem із правильним вхідним індексом і запустіть workflow знову. Це налаштування має значення лише тоді, коли вузол Code отримує більше одного елемента, адже, згідно з документацією, одиночні елементи зв'язуються автоматично.
Якщо нитку рве community- або кастомний вузол, виправити це всередині workflow не вийде. За документацією, автор вузла має оновити його, щоб він повертав інформацію про зв'язок.
Крок 3b: виправте кілька збігів позиційними методами
Коли агрегувальний вузол залишає нитку, що вказує на кілька елементів, є кілька варіантів. Можна використати .first() або .last() чи .all() з індексом, щоб вибрати конкретний елемент. Також можна послатися на інший вузол, чиї елементи досі чітко відповідають поточному.
Позиційні методи працюють лише тоді, коли ви знаєте, де в списку розташований потрібний елемент. Якщо порядок елементів може змінюватися між запусками, безпечніше усунути першопричину або послатися на інший вузол, ніж покладатися на фіксований індекс. Це наша редакційна порада, а не правило з документації.
Sources: S1
Очікуваний результат після виправлення
Запустіть workflow знову. Вираз має обчислитися без жодної з помилок. Відкрийте вихідні дані вузла й звірте кожен елемент із джерелом, щоб переконатися, що підтягнулися правильні дані. Отримати якесь значення недостатньо, бо це може бути не той елемент.
Якщо ви додали pairedItem, нові елементи тепер мають простежуватися до своїх вхідних. Якщо ви використали позиційний метод, перевірте запуск зі зміненим порядком, якщо ваші дані це дозволяють, щоб підтвердити, що вибирається очікуваний елемент.
Усунення несправностей
Якщо помилка про брак інформації лишається, а ваші вузли виглядають нормально, перевірте, чи є в ланцюжку community- або кастомні вузли. Виправлення має надійти від їхніх авторів. Також пам'ятайте, що pairedItem важливий лише тоді, коли вузол Code отримує більше одного елемента; одиночні елементи n8n зв'язує автоматично.
Якщо ви пишете код і вам потрібні зв'язані дані з попереднього вузла, можна використати itemMatching усередині вузла Code. Передайте йому індекс поточного вхідного елемента, і він поверне відповідний елемент із попереднього вузла. Приклад у документації використовує навчальний набір даних, тож підлаштуйте назви вузлів під свій workflow.


