Как создать DOCX в n8n: собрать файл из шаблона и JSON-данных, получить HTML от модели и вставить его в документ через Code node, либо отправить бинарный файл в отдельный сервис на python-docx. Готовой встроенной ноды для записи DOCX в ядре платформы нет — работа строится на community-нодах, Code node и внешних библиотеках.
Что именно означает задача «создать DOCX»
Задача распадается на два разных сценария. Первый — заполнить готовый шаблон данными из JSON: у вас есть документ с плейсхолдерами, и workflow подставляет в них значения. Второй — собрать документ с нуля из текста, который сгенерировала модель или пришёл из базы. Смешивать их в одном объяснении не стоит: инструменты и точки отказа различаются.
На форуме n8n участник описывает свой случай так: он разработал ноду для клиента, чтобы заполнять шаблоны DocX данными из JSON-объекта, и клиент разрешил открыть её публично. Та же нода умеет конвертировать DocX в PDF, но для этого на сервере нужен установленный LibreOffice. Это описание из ветки community-ноды для отчётов.
Второй сценарий встречается в ветке про агента, который выдаёт документы. Автор хочет генерировать корпоративные регламенты через OpenAI: системный промпт содержит шаблон политики, пользователь даёт запрос и иногда загружает документы о компании, а на выходе нужен готовый файл в PDF или DOCX. Ему советуют попросить OpenAI выдать содержимое в HTML, почистить его в Code node и вставить в документ Word.
Условия доступа и где смотреть актуальные требования
Ключевое условие — способ запуска n8n. В шаблонах обращений на форуме это отдельное поле: Docker, npm, n8n cloud или desktop app. От него зависит набор доступных нод: в ветке с запросом на извлечение текста из DOCX участник замечает, что нода Execute Command есть только в on-prem версии.
Community-ноду для шаблонов ставят в self-hosted инстанс; в n8n cloud доступны верифицированные community-ноды, и на форуме такая пометка стоит, например, у ноды HTML to PDF. В ветке про ноду для отчётов автор отвечает пользователю: нода работает как есть, нужно установить её и перезапустить инстанс n8n после установки. В той же ветке звучит предложение интегрировать ноду нативно и официально, чтобы её можно было использовать в n8n cloud — то есть на момент обсуждения речь шла о self-hosted сценарии.
Второе условие — доступ к файловой системе и системным командам. В ветке про извлечение из XML участник разбирает путь: понадобится доступ к файлу на диске, а для конвертации DOC в DOCX нужен инструмент вроде pandoc. Там же отмечено, что нода Compression может не справиться с распаковкой DOCX, и тогда нужна системная команда unzip.
Третье — внешние сервисы. В ветке про выбор API для HTML в DOCX автор запроса ищет бесплатный тариф с ограниченным использованием и готов рассматривать платные варианты; он же допускает API для конвертации PDF в DOCX, если придётся слегка поправить workflow. В ответах упоминается self-hosting Python API и вызов его через HTTP Request node, а также размещение на Vercel.
Актуальные требования смотрите в двух местах: в README конкретной community-ноды на npm и в разделе документации n8n про работу с бинарными данными. Версии и совместимость меняются, поэтому сверяйтесь с этими страницами перед сборкой.
| Способ | Что нужно | Где выполняется |
|---|---|---|
| Community-нода для шаблонов | Установка ноды, перезапуск инстанса | Self-hosted n8n |
| HTML через Code node | Code node, вставка в документ | Внутри workflow |
| Python-сервис с python-docx | Сервер, HTTP Request node | Внешний хост |
| Конвертация через API | Ключ сервиса, HTTP Request node | Внешний сервис |
Порядок действий: заполнение шаблона данными
Порядок для первого сценария, когда есть шаблон и данные JSON, собран в ветке про ноду для отчётов. Установите community-ноду n8n-nodes-generate-report со страницы npm и перезапустите инстанс n8n. Подайте на вход шаблон в формате .docx: с .dotx на входе Word не открывал результат. Передайте в ноду данные JSON-объектом и допишите .docx в имя выходного файла. Для выдачи в PDF поставьте на сервер LibreOffice. Готовый файл идёт дальше бинарными данными: в ветке про выбор API для HTML в DOCX автор хочет отправить его через ноду Telegram send document. Тот же путь через внешний сервис расписан в документации Documentero: установить community-ноду n8n-nodes-documentero, загрузить шаблон .docx в аккаунт Documentero, выбрать в ноде операцию Generate Document и вставить JSON в поле Data (JSON); готовый файл нода отдаёт в binary > data.
Порядок для второго сценария, когда текст приходит от модели. Попросите модель выдать содержимое в HTML — этот совет дают в ветке про агента с документами. Пропустите ответ через Code node, чтобы почистить и отфильтровать разметку. Вставьте очищенный HTML в документ Word. Сохраните результат как бинарные данные и передайте в ноду загрузки.
Учебный пример и критерии проверки
Возьмём задачу: workflow формирует короткий отчёт по заявке и отдаёт его файлом DOCX. Данные приходят из вебхука: номер заявки, дата, исполнитель, список работ. Шаблон — один абзац заголовка и таблица на четыре строки.
Шаги. Вебхук принимает JSON. Set node приводит поля к нужным именам. Нода заполнения шаблона подставляет значения в плейсхолдеры. Нода загрузки отдаёт файл по ссылке.
Критерии самостоятельной проверки, которые вы применяете сами:
- Файл открывается в Word без сообщения о повреждении.
- Имя файла содержит расширение
.docx. - Все четыре поля из JSON попали в нужные места.
- Таблица сохранила число строк и столбцов.
- Повторный прогон с теми же данными даёт тот же результат.
Проверка на разных программах тоже полезна: в ветке про ноду для отчётов файл открывался в Google Docs и Pages и не открывался в Word. Причина нашлась во входе: на ноду подавали шаблон .dotx, и после конвертации входного файла в .docx документ заработал.
Смежные варианты и выбор по задаче
Вариантов четыре, и выбор определяется тем, что у вас на входе.
| Вход | Подходящий путь | Ограничение |
|---|---|---|
| Готовый шаблон с плейсхолдерами | Community-нода заполнения | Нужен self-hosted и перезапуск |
| HTML от модели | Code node и вставка в документ | Требуется чистка разметки |
| Колонтитулы, таблицы и стили исходного файла | Python-сервис с python-docx | Нужен внешний хост |
| Только текст, простые абзацы | python-docx достаточно | Сложные элементы Word сохраняются не полностью |
Для конвертации в PDF нужен LibreOffice на сервере — это условие из ветки про ноду для отчётов. Если PDF не нужен, эта зависимость не требуется.
Типичные проблемы и способы диагностики
Проблема первая: Word сообщает о повреждении файла. Диагностика: проверьте, что в имени файла стоит расширение .docx, затем проверьте формат входного шаблона: нода рассчитана на .docx, и с .dotx на входе Word результат не открывал. Оба случая разобраны в ветке про ноду для отчётов.
Проблема вторая: в начале и конце извлечённого текста появляется лишний текст. В ветке про извлечение из XML автор пишет, что нода работает как ожидалось, но в начале и конце файла появляется странный текст. Причина в том, что Extract from XML предназначена для разбора XML-файла. Решение: сначала привести файл к DOCX, затем распаковать архив и разобрать XML внутри.
Проблема четвёртая: плейсхолдеры в колонтитулах не заменяются. В ветке про ноду для отчётов разбирают, что нода разбирает document.xml и не проходит по footer1.xml–footer20.xml и header1.xml–header20.xml; числа там приведены как пример, потому что для каждого уникального раздела создаётся свой колонтитул. Предложенное исправление: загружать и перебирать все XML-файлы в корневой папке распакованного DOCX, включая файлы колонтитулов вдобавок к document.xml.
Проблема пятая: разбиение текста на фрагменты. В ветке про перевод документов объясняют, что Word делит текст на runs по причинам, не связанным с форматированием: границы проверки орфографии, идентификаторы сессий правок, следы отслеживаемых изменений. Предложенное решение: перед извлечением объединить соседние runs с совпадающими свойствами — это схлопывает большинство разбиений и оставляет только реальные границы форматирования.
Проблема шестая: непредсказуемый вывод модели. В той же ветке советуют не отправлять полный бинарный DOCX в AI Agent с ожиданием получить переведённый документ: модель переводит только извлечённый текст, а структуру обрабатывают отдельно и детерминированно. Для базового перевода рекомендуют обычную цепочку LLM или прямой вызов модели.
Частые вопросы
Есть ли в n8n встроенная нода для создания DOCX?
В ядре платформы такой ноды нет. Работа строится на community-нодах, Code node и внешних библиотеках. В ветке про ноду для отчётов звучит предложение интегрировать такую ноду нативно и официально, чтобы её можно было использовать в n8n cloud — это указывает на текущий статус как внешнего решения.
Как отправить готовый DOCX в Telegram из n8n?
Соберите файл в бинарные данные и передайте их в ноду Telegram send document. Именно такой сценарий описывает автор запроса в ветке про выбор API для HTML в DOCX: после конвертации он хочет отправить файл через эту ноду.
Почему Word пишет, что файл повреждён?
Проверьте две вещи: расширение .docx в имени файла и формат входного файла. В ветке про ноду для отчётов разобраны оба случая — отсутствие расширения и подача .dotx вместо .docx. После конвертации входного файла в .docx пользователь получил рабочий результат.
Можно ли вставить картинку в шаблон DOCX?
В обсуждении ноды для отчётов указано, что плагин изображений для easy-template-x не входит в npm-пакет. Участники подтверждают, что вставка изображения из бинарных данных n8n в документ не поддерживается. Проверьте состав пакета и версию библиотеки, которую использует ваша нода.
Как перевести документ с сохранением вёрстки?
Не отправляйте бинарный DOCX в модель. Извлеките текст с идентификаторами, переведите только текст, получите структурированный JSON, сопоставьте значения с идентификаторами и замените текстовые узлы, оставив стили нетронутыми. Для сложной вёрстки используйте API, который официально поддерживает сохранение макета DOCX.
Готовый промпт для генерации содержимого документа
Промпт, чтобы получить от модели содержимое будущего DOCX в HTML с плейсхолдерами под ваши данные.
Ты готовишь содержимое документа Word. Тема документа: [ваша тема].
Целевая аудитория: [кому адресован документ].
Структура: заголовок первого уровня, вводный абзац, разделы второго уровня, таблица с параметрами, итоговый абзац.
Требования к разметке: используй только теги h1, h2, p, ul, li, table, tr, td, strong.
Не добавляй стили, скрипты и внешние ссылки.
В местах, где должны стоять данные из системы, оставь плейсхолдеры вида {{field_name}}.
Объём: [кратко или подробно].
Выдай только HTML без пояснений.
Что менять под себя: тему и аудиторию, набор плейсхолдеров, состав разделов, объём. Вариации той же задачи: документ-регламент с разделами ответственности; коммерческое предложение с таблицей позиций; протокол встречи с блоком решений; инструкция с нумерованными шагами; отчёт с таблицей показателей. Во всех случаях модель отдаёт HTML, а сборку файла выполняет workflow.
Дальше по теме пригодится материал о том, как настроить прокси для n8n, если инстанс ходит во внешние сервисы. Если вы собираете цепочку с моделью, посмотрите разбор причин, по которым LangChain не работает. Для сценариев с генерацией контента полезен обзор лимитов и ограничений Cursor, а про оплату зарубежных сервисов — материал о том, как оплатить Genspark.
