Рутина ежедневного постинга: собираем автономный генератор контента на n8n, DeepSeek и Pollinations AI без затрат на дизайн

1. Введение: почему ручной постинг цитат не масштабируется

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

Делать это вручную каждое утро бессмысленно: внимание рассеивается, график сбивается, а пропуск публикации ломает охваты. Готовые сервисы отложенного постинга решают только часть проблемы - они публикуют заготовленный контент, но не создают его. Интеграция нескольких разрозненных SaaS-сервисов через no-code платформы часто упирается в тарифные лимиты либо в непредсказуемость ответов нейросетей: модель возвращает лишние комментарии, кавычки или невалидный JSON, из-за чего сценарий падает.

Задача заключалась в том, чтобы построить полностью автономный конвейер. Сценарий должен срабатывать раз в сутки строго по расписанию, забирать случайную мысль из публичного API, валидировать и обогащать её через LLM, отрисовывать тематический фон и публиковать готовый пост с аккуратной типографикой напрямую в Telegram-канал без вмешательства человека.

2. Архитектура решения: стек и движение данных

Для оркестрации пайплайна используется self-hosted n8n с нодами из LangChain-экосистемы. Полноценный визуальный граф цепочки выглядит следующим образом:

Рутина ежедневного постинга: собираем автономный генератор контента на n8n, DeepSeek и Pollinations AI без затрат на дизайн

Стек компонентов:

  • Оркестратор: n8n (ноды scheduleTrigger, httpRequest, @n8n/n8n-nodes-langchain.*, telegram).
  • Источник данных: REST API DummyJSON (/quotes/random).
  • Языковая модель: DeepSeek Chat (deepseek-chat).
  • Генерация визуалов: Pollinations AI (бесплатный REST-эндпоинт image.pollinations.ai).
  • Канал дистрибуции: Telegram Bot API (sendPhoto).

Принцип движения данных:

  • Триггер: Нода Schedule Trigger запускает цепочку раз в сутки в 07:00.
  • Получение сырых данных: Нода HTTP Request выполняет GET-запрос к [https://dummyjson.com/quotes/random](https://dummyjson.com/quotes/random) и возвращает объект с полями quote и author.
  • Обработка и структурирование: Блок AI Agent передает цитату модели DeepSeek Chat Model. Модель переводит текст, формулирует практический смысл и формирует детализированный промпт на английском языке для генерации фона. Нода Structured Output Parser валидирует ответ.
  • Рендеринг фона: Сформированный промпт кодируется через encodeURIComponent и отправляется в ноду HTTP Request1 к API Pollinations AI. Ответ принимается в бинарном формате (responseFormat: file).
  • Публикация: Нода Send a photo message отправляет бинарный файл в Telegram-канал, подставляя в caption оформленный HTML-текст с цитатой, автором и разбором.

3. Техническое «мясо» и сложности

Главная проблема при автоматизации контентных пайплайнов на базе LLM - непредсказуемость структуры ответа. Если языковая модель оборачивает JSON в Markdown-блоки ```json или добавляет вежливые вступительные фразы, следующий HTTP-узел не сможет спарсить поля и выбросит ошибку.

Строгая валидация через Structured Output Parser

Чтобы исключить человеческий фактор и сбои синтаксиса, в цепочку внедрен Structured Output Parser. В него заложен пример жесткой JSON-схемы:

JSON

{ "russian_quote": "Единственный способ делать великие дела — любить то, что вы делаете.", "author": "Rumi", "meaning": "Истинный успех и выдающиеся результаты невозможны из-под палки...", "visual_prompt": "Cinematic and detailed prompt in English describing an aesthetic background scene for image generation, no text, no quotes" }

Ключевая деталь: подключение дополнительной ноды DeepSeek Chat Model1 непосредственно к парсеру. Если основной агент допускает синтаксический брак в JSON, парсер автоматически отправляет ошибку во вторую модель для мгновенного исправления схемы без падения всего сценария.

Системный промпт и разведение языков

В промпте агента зафиксированы жесткие границы:

  • Поле meaning пишется строго на русском языке (2–3 предложения разбора сути).
  • Поле visual_prompt пишется строго на английском языке, описывая кинематографичную сцену без текстовых элементов, букв и логотипов на самом изображении.

Входные данные от API:

JSON

{ "quote": "Your time is limited, so don't waste it living someone else's life.", "author": "Steve Jobs" }

Выходной объект после парсера:

JSON

{ "russian_quote": "Ваше время ограничено, поэтому не тратьте его на жизнь чужой жизнью.", "author": "Стив Джобс", "meaning": "Следование чужим ожиданиям лишает человека собственной индивидуальности и энергии. Важно сосредоточиться на своих целях и ценностях, не оглядываясь на шаблонные сценарии.", "visual_prompt": "Minimalist atmospheric shot of an open road leading towards a glowing sunrise in the mountains, cinematic lighting, 8k, serene atmosphere, no text, no typography" }

Загрузка изображения и публикация без сохранения на диск

Для генерации фона используется URL-конструкция: https://image.pollinations.ai/prompt/{{ encodeURIComponent($json.output.visual_prompt) }}

Использование encodeURIComponent критично: промпты содержат пробелы, запятые и спецсимволы, которые без экранирования ломают GET-запрос. Нода HTTP Request1 забирает поток байтов (binaryData: true), сохраняя файл во временной памяти воркфлоу.

Далее узел Send a photo message берет этот бинарник и публикует его методом sendPhoto в Telegram. В подпись передается разметка через HTML:

"{{ $('AI Agent').item.json.output.russian_quote }}" - {{ $('AI Agent').item.json.output.author }} {{ $('AI Agent').item.json.output.meaning }}

Использование тега

аккуратно отделяет саму мысль визуальной плашкой, что делает публикацию читаемой и структурированной.

4. Итоги и экономика

Связка работает стабильно и полностью исключает ручной труд:

  • Время выполнения: Сценарий отрабатывает в среднем за 6-10 секунд от срабатывания триггера до появления поста в канале.
  • Себестоимость запроса: DummyJSON и Pollinations AI работают бесплатно. Оплата идет исключительно за токены DeepSeek: один прогон обходится примерно в $0.0002. Месяц ежедневных публикаций стоит меньше одного цента.
  • Экономия ресурсов: Освобождается около 20-30 минут ежедневной рутины по поиску картинок, переводу и форматированию текста.

5. Заключение

Автоматизация контента на базе n8n и открытых моделей позволяет избавиться от примитивных механических действий, сохраняя при этом качественный вид и смысловую нагрузку постов. За счет использования Structured Output Parser связка защищена от типовых болезней LLM и не ломает пайплайн неожиданными ответами.

Готовый JSON-шаблон сценария для импорта в n8n я выложил у себя в GitHub-репозитории и в Telegram-посте. Если автоматизируете похожие задачи - забирайте и адаптируйте под свои каналы.✅

Больше готовых архитектурных разборов, шаблонов сценариев и практических кейсов по автоматизации выкладываю в Telegram-канале Build -> Запуск (@tanaka_dev).

11