Нитобэ говорит о рыцарском кодексе и сравнивает его влияние со светом далёких звёзд: породившая его эпоха ушла, а действие продолжается. Вечернее наблюдение неба тоже начинается с вещей, которые появились раньше самой встречи. Кто-то уже записался, кто-то принёс телескоп, а кто-то проверяет, не прищемит ли палец тугой шарнир складного стула.

Допустим, готовим такую встречу. В пробном списке всего одна участница: Лена придёт вдвоём. Запись выгрузили в CSV, и хочется передать её своей автоматизации. Список ещё короткий, и любую потерю видно сразу. Сначала убедимся, что файл вообще проходит путь туда и обратно. Имя остаётся именем, двойка — количеством. Сам телескоп к компьютеру подключать не придётся. Прежде чем искать жизнь во Вселенной, хочется убедиться, что в списке гостей всё ещё существует Лена.

На экране такая запись кажется крошечной. Внутри схемы ей предстоит сменить оболочку: файл, поля записи, снова файл. Пока данные лежат внутри файла, следующему действию неудобно обращаться к отдельным полям. После разбора можно взять имя, проверить количество, позднее составить список. В этой пробе ничего к записи не добавляем: сначала получим её обратно целой.

CSV в n8n: три узла и один понятный круг

CSV — текстовая таблица: колонки разделены запятыми, записи идут по строкам. В нашем файле первая строка задаёт названия колонок, вторая содержит значения. JSON представляет те же данные полями с именами. Узлы обработки смогут обращаться к name и quantity отдельно.

Путь выглядит так: Webhook получает присланный файл → Extract from File извлекает запись → Convert to File снова создаёт CSV. Соедините эти три узла именно в таком порядке.

Webhook принимает файл, Extract from File извлекает одну запись, Convert to File возвращает result.csv.

Схема обработки одного файла. data — имя поля с файлом, а «Лена, 2» — содержание нашей единственной записи.

Для первой пробы нужны доступ к своему n8n, право создавать схемы и возможность отправить HTTP-запрос с компьютера. Установка сервера сюда не входит. Собственная среда и внешние услуги оплачиваются по их условиям; участие в клубе их не предоставляет.

Ниже названия сверены с документацией и исходным кодом выпуска n8n 2.46.4. У Webhook рассматриваем версию узла 2.2, у Extract from File и Convert to File — 1.2. Если ваша среда отличается, сначала сравните доступные операции. Эти сведения нужны для совпадения настроек; заполнять паспорт сервера ради маленького файла не потребуется.

Шаг Что приходит Что должно получиться
Webhook Тело запроса с CSV Файл в бинарном поле data
Extract from File Файл data Одна запись с name и quantity
Convert to File Запись Лена / 2 Файл data с именем result.csv

Подготовьте две строки в обычном текстовом файле

На компьютере создайте отдельную папку для пробы. В Блокноте вставьте ровно две строки:

name,quantity
Лена,2

Сохраните файл как input.csv в кодировке UTF-8. В окне сохранения Блокнота выберите тип «Все файлы», чтобы к имени не добавилось .txt. В первой строке после name стоит запятая, во второй — такая же запятая после имени. Пустые строки и дополнительные подписи пока не нужны.

Величина 2 здесь обозначает двух участников. Для первой проверки это удобнее телефона или номера билета: у нас нет начальных нулей, которые пришлось бы отдельно беречь при преобразовании типов.

Откройте сохранённый файл текстовым редактором ещё раз. Проверьте имя, двойку и заголовки. Если файл сразу открывается в табличной программе, выберите Блокнот через «Открыть с помощью». Сейчас полезно видеть именно запятые: они показывают, что получит обработчик.

Приём файла: Webhook

Создайте новую схему и добавьте Webhook. Выберите метод POST: он позволит отправить содержимое файла в запросе. Для отдельной пробы с этими вымышленными данными используйте собственный тестовый адрес без дополнительных подключений.

В настройках Webhook добавьте опцию Raw Body и включите её. В рассматриваемой версии она позволяет получить сырое тело запроса в бинарном поле data. Если добавляете Field Name for Binary Data, оставьте имя data. Это согласованное имя понадобится следующему узлу.

В поле Respond укажите When Last Node Finishes, а в Response Data — First Entry Binary. Так ответом станет файл с выхода последнего узла. Режим немедленного ответа для нашей проверки не подходит: он сообщает о старте, пока результат ещё впереди. Подробности этих режимов есть в документации Webhook.

Пока не отправляйте запрос. Сначала достроим оставшиеся два узла, чтобы полученный файл прошёл весь круг и вернулся вам.

Разбор: Extract from File

После Webhook добавьте Extract from File. В Operation выберите Extract From CSV, а в Input Binary Field укажите data.

В опциях оставьте включённой обработку первой строки как заголовков — Header Row. Разделитель нашего примера — запятая. Тогда name и quantity станут названиями полей, а «Лена» и 2 — значениями одной записи.

После запуска в выходе узла должен появиться один item — так n8n называет отдельную единицу обрабатываемых данных. В нашем случае это одна строка таблицы. В представлении JSON эталон для сверки выглядит так:

{
  "name": "Лена",
  "quantity": "2"
}

Кавычки вокруг двойки означают текстовое значение. Разбор CSV в этой версии сам по себе не обещает превратить его в число для вычислений. Для обратной сборки файла нам достаточно сохранить значение. Перед будущим сложением количества понадобится отдельно проверить и задать числовой тип.

Входной файл data превращается в поля name и quantity, затем вновь собирается в файл data с именем result.csv.

Схема трёх состояний. Имя бинарного поля data отличается от названий колонок name и quantity.

Если вместо этих полей видите безымянные значения или заголовок превратился в отдельную запись, проверьте Header Row. Если узел не находит файл, сравните имя бинарного поля на выходе Webhook с Input Binary Field. Обязанность этого шага — извлечь данные из файла; подробно она описана в справке Extract from File.

Обратная сборка: Convert to File

Следующим добавьте Convert to File и соедините его с Extract from File. Выберите операцию Convert to CSV. В Put Output File in Field укажите data.

В опциях задайте File Name равным result.csv и включите Header Row. Выход этого узла снова будет файлом. Внутри должны остаться колонки name, quantity и одна запись с Леной и двойкой. Настройки имени и заголовка приведены в документации Convert to File.

Не подменяйте эту операцию Convert to JSON. Мы уже видим JSON как внутреннее представление записи, а вернуть хотим таблицу CSV. У разных шагов сейчас разные обязанности: принять файл, разобрать его, собрать новый файл.

Если команда выглядит чужим заклинанием

Помощника удобно подключить перед первым запросом. Откройте DeepSeek и начните с конкретного затруднения:

У меня уже есть доступный n8n и файл input.csv из строк name,quantity и Лена,2. Собираю цепочку Webhook → Extract from File → Convert to File, хочу сохранить ответ result.csv. Помоги пройти место, где я остановился: [опишите его]. Сначала уточни мою систему и версию n8n. Давай по одному действию: что открыть, что нажать или куда вставить команду, какой результат увидеть. Жди моего ответа. При несовпадении названий сверь официальную документацию, если доступен поиск.

При ошибке вставьте её текст без паролей, токенов и рабочего адреса Webhook. Назовите узел и видимые поля. Помощник сможет разобрать, почему не найден data или куда сохранился файл, опираясь на ваш ответ. Обычный чат сам не видит ни панель n8n, ни папку на компьютере.

Например, если в выходе Webhook есть только текстовое body, сообщите именно это. Тогда разговор будет о приёме файла. Если файл на входе Extract from File уже есть, а колонки слиплись в одну, предмет разговора — разделитель. Один наблюдаемый симптом полезнее общего «вся схема сломалась».

Отправьте запрос и сохраните ответ

На Windows откройте PowerShell через меню «Пуск». Перейдите в папку, где лежит input.csv: скопируйте её полный путь из адресной строки Проводника и подставьте его в команду ниже вместо пояснения.

cd 'ПОЛНЫЙ_ПУТЬ_К_ПАПКЕ'

После Enter строка приглашения должна указывать эту папку. Команда dir input.csv покажет файл, который мы собираемся отправить. Если его нет в списке, сначала найдите сохранённый файл и исправьте путь.

Теперь в Webhook выберите Test URL, скопируйте адрес и нажмите Listen for test event. Это включает ожидание тестового запроса. Вернитесь в PowerShell и выполните одну строку, заменив <TEST_URL> собственным тестовым адресом:

curl.exe -X POST -H 'Content-Type: text/csv' --data-binary '@input.csv' '<TEST_URL>' -o result.csv

curl.exe отправляет файл с компьютера. Заголовок сообщает, что отправляется CSV, @input.csv указывает на содержимое входного файла, а -o result.csv сохраняет тело ответа рядом с ним. Это отдельное имя: исходник остаётся доступен для сравнения.

После запроса откройте result.csv в Блокноте. Нужны две колонки и одна запись: name,quantity и Лена,2. Дополнительные кавычки вокруг значений и другой перевод строки могут быть допустимым оформлением CSV. Проверьте смысл колонок и содержимое записи.

Само появление файла ещё не завершает проверку. Расширение .csv вы задали в команде сами; оно ничего не сообщает о том, что вернул сервер. В ответ могло сохраниться сообщение об ошибке. Например, текст о запущенном workflow означает, что Webhook ответил раньше готовности файла. Поэтому откройте результат и посмотрите его текст, затем проверьте выходы всех трёх узлов: сначала файл data, потом одна запись, затем новый файл data. Если отправляете пробу заново, снова включите тестовое прослушивание и сравнивайте именно новое выполнение.

После пробы: Production и сохранённая схема

Когда тестовый круг прошёл, сохраните и опубликуйте свою схему кнопкой Publish. Возьмите в Webhook отдельный Production URL и повторите запрос с ним вместо тестового адреса. Результат этого вызова проверьте заново. Удачная проба через Test URL ещё не была обращением к рабочему адресу.

Два независимых пути: тестовое прослушивание и Test URL; Publish и Production URL с проверкой в Executions.

Схема двух запусков. Данные производственного вызова ищите во вкладке Executions, открыв соответствующее выполнение.

Экспортируйте схему отдельно: в меню workflow выберите Download. Полученный JSON хранит узлы и настройки, а result.csv хранит данные нашей пробы. Сохраните оба файла под понятными именами. Перед передачей экспорта другому человеку уберите рабочие адреса, чувствительные имена подключений и заголовки авторизации, если они есть. Этот порядок описан в справке об экспорте workflow.

Если на входе XLSX

Это следующий вариант того же пути, когда CSV уже понятен. Для настоящего файла XLSX выберите в Extract from File операцию Extract From XLSX, а в Convert to File — Convert to XLSX. Укажите имя result.xlsx, заголовки и нужный лист. При отправке используйте MIME-тип XLSX: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.

Переименование input.csv в input.xlsx формат не меняет. Возьмите настоящий файл таблицы и отдельно проверьте извлечённые значения. Сохранение формул, оформления и всех особенностей исходной книги этот круг обработки не обещает: он разбирает строки и создаёт выходной файл из данных.

К вечеру у Лены по-прежнему два места

Первый результат здесь скромный и полезный: CSV в n8n прошёл через записи и вернулся файлом, имя и количество сохранились. Теперь можно задуматься о следующем действии над данными. Например, позже вы захотите складывать количество мест по нескольким записям. Для этого сначала отдельно переведёте текстовые количества в числа и проверите сумму на знакомом списке. Если хочется сначала увереннее освоить сами схемы, разберите пример автоматизации с импортом и правкой workflow.

В «Первопроходцах» можно осваивать ИИ на своих задачах, задавать вопросы и дорабатывать проектные работы с личной проверкой Никиты Малова. Своя среда n8n в участие не входит. Дополнительно можно начать с бесплатной практики по ботам.

Несколько вопросов о файле и записях

Почему result.csv появился, а таблицы внутри нет?

Имя файла задала команда сохранения ответа. Откройте его текст: туда могло попасть сообщение об ошибке или о запуске схемы. Затем проверьте выход каждого узла.

Двойка в JSON стала текстом. Данные потерялись?

В нашем круге нужно сохранить значение и собрать файл обратно. Для будущего сложения отдельно задайте числовой тип и проверьте результат на знакомых значениях.

Можно переименовать CSV в XLSX?

Имя не меняет формат. Для XLSX нужен настоящий файл этого типа и соответствующие операции разбора и сборки.

Файл с записью сохранён, два стула можно разложить у телескопа. Двойка совершила свою маленькую космическую экспедицию и вернулась на Землю двойкой. Теперь очередь Лены посмотреть в окуляр.