Рутина ежедневного постинга: собираем автономный генератор контента на n8n, DeepSeek и Pollinations AI без затрат на дизайн
1. Введение: почему ручной постинг цитат не масштабируется
Ведение тематического Telegram-канала требует регулярности. Концепция ежедневной рубрики вроде «Цитаты дня» понятна: короткая мысль, смысловой контекст, эстетичный визуальный фон. Однако на практике даже такой простой формат быстро превращается в рутину. Необходимо найти англоязычную цитату, перевести её без потери оттенков смысла, написать краткий комментарий, составить промпт для генератора изображений, сгенерировать фон, собрать пост и отправить его в канал.
Делать это вручную каждое утро бессмысленно: внимание рассеивается, график сбивается, а пропуск публикации ломает охваты. Готовые сервисы отложенного постинга решают только часть проблемы - они публикуют заготовленный контент, но не создают его. Интеграция нескольких разрозненных SaaS-сервисов через no-code платформы часто упирается в тарифные лимиты либо в непредсказуемость ответов нейросетей: модель возвращает лишние комментарии, кавычки или невалидный JSON, из-за чего сценарий падает.
Задача заключалась в том, чтобы построить полностью автономный конвейер. Сценарий должен срабатывать раз в сутки строго по расписанию, забирать случайную мысль из публичного API, валидировать и обогащать её через LLM, отрисовывать тематический фон и публиковать готовый пост с аккуратной типографикой напрямую в Telegram-канал без вмешательства человека.
2. Архитектура решения: стек и движение данных
Для оркестрации пайплайна используется self-hosted n8n с нодами из LangChain-экосистемы. Полноценный визуальный граф цепочки выглядит следующим образом:
Стек компонентов:
- Оркестратор: 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
Ключевая деталь: подключение дополнительной ноды DeepSeek Chat Model1 непосредственно к парсеру. Если основной агент допускает синтаксический брак в JSON, парсер автоматически отправляет ошибку во вторую модель для мгновенного исправления схемы без падения всего сценария.
Системный промпт и разведение языков
В промпте агента зафиксированы жесткие границы:
- Поле meaning пишется строго на русском языке (2–3 предложения разбора сути).
- Поле visual_prompt пишется строго на английском языке, описывая кинематографичную сцену без текстовых элементов, букв и логотипов на самом изображении.
Входные данные от API:
JSON
Выходной объект после парсера:
JSON
Загрузка изображения и публикация без сохранения на диск
Для генерации фона используется URL-конструкция: https://image.pollinations.ai/prompt/{{ encodeURIComponent($json.output.visual_prompt) }}
Использование encodeURIComponent критично: промпты содержат пробелы, запятые и спецсимволы, которые без экранирования ломают GET-запрос. Нода HTTP Request1 забирает поток байтов (binaryData: true), сохраняя файл во временной памяти воркфлоу.
Далее узел Send a photo message берет этот бинарник и публикует его методом sendPhoto в Telegram. В подпись передается разметка через HTML:
Использование тега
аккуратно отделяет саму мысль визуальной плашкой, что делает публикацию читаемой и структурированной.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).