mysurik.ru
N8N

Как я написал телеграм-бота на n8n без единой строчки кода

n8n Telegram бот автоматизация

Зачем мне бот без кода

Я уже рассказывал, что написал телеграм-бота на Python с aiogram для мониторинга сервера. Но когда я захотел сделать второго бота — для ответов на частые вопросы по моему блогу, мне стало лень снова писать код.

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

Я решил попробовать сделать это в n8n, который уже крутится на сервере. Нода Telegram в n8n есть из коробки.

Как я собирал workflow

Захожу в n8n, создаю новый workflow. Выбираю триггер «Telegram Trigger» — это такая нода, которая слушает входящие сообщения от бота. n8n сам даёт URL для вебхука Telegram, который нужно указать при создании бота.

Создал бота через BotFather в Telegram, получил токен, вставил в ноду. Сразу появился статус Connected.

Дальше логика: Switch нода проверяет текст сообщения. Если «привет» — отправляет приветствие. Если «хостинг» — шлёт ссылку на статью. Если _default — пишет «не понял, вот список команд».

Весь workflow занял 15 минут. Без единой строчки кода.

Что я добавил потом

Через неделю я добавил интеграцию с WordPress: пользователь пишет «поиск [тема]» — n8n делает запрос к WP REST API, находит посты по теме и присылает ссылки. Для этого понадобилась HTTP Request нода и базовые знания REST API.

Потом добавил форму обратной связи: пользователь пишет «отзыв [текст]» — n8n отправляет мне сообщение в Telegram с текстом отзыва и именем пользователя.

И статистику: /stats — n8n выполняет запрос к WP API, считает количество постов и комментариев, присылает цифры.

Первая боль — вебхуки

Когда я только воткнул Telegram Trigger в n8n, бот молчал как рыба. Я тыкал в ноду — статус Connected висит, вебхук зарегистрирован, а бот не отвечает. Оказалось, n8n ставит вебхук на определённый URL, а у меня за nginx стоял прокси, который резал длинные запросы. Пришлось в конфиг nginx добавить proxy_read_timeout 120s и client_max_body_size 10m. После перезагрузки nginx — бот ожил. Полчаса жизни на ровном месте.

Вторая боль — Switch нода

В n8n Switch работает не как обычный if-else. Там режим fallback надо включать, иначе последнее условие просто отваливается в никуда. Я полдня тупил, почему команда /help проваливается в default, хотя я её явно прописал. Всё потому, что я забыл поставить галочку Fallback Output. Мелочь, а бесит.

Третья боль — Telegram лимиты

Когда я добавил поиск по блогу, бот стал присылать списки статей. Telegram режет сообщения длиннее 4096 символов. Пришлось городить пагинацию через Set ноду и Function ноду, которая режет текст на куски. На Python это решается одной функцией. В n8n — через костыли с циклами. Но жить можно.

Что я вынес из этого

n8n отлично подходит для прототипов и простых интеграций. Если вам нужно быстро склеить Telegram, WordPress, почту, базу данных — n8n сделает это за 15 минут без строчки кода. Но как только логика начинает ветвиться, появляются условия с подусловиями и обработка ошибок — хочешь не хочешь, а лезешь в код.

Сейчас у меня оба бота работают в связке. Python-бот следит за сервером, перезапускает службы, шлёт алерты. n8n-бот общается с читателями, ищет статьи, собирает обратную связь. Ни разу не пожалел, что не стал всё пилить на одном языке. Иногда два инструмента лучше, чем один супер-инструмент.

Кстати, бюджет на весь этот зоопарк — ноль рублей. n8n крутится в Docker на том же сервере, что и сайт. Бесплатный план Telegram Bot API. Я только потратил время на настройку. Но время, как говорится, — деньги. Хотя в моём случае — это просто удовольствие от процесса.

Сравнение с Python

Для сложных сценариев Python-бот гибче. Но для простых диалогов и интеграций n8n справляется на ура. Если бот нужен за час — делайте в n8n. Если бот будет жить годы и обрастать логикой — пишите код.

Сейчас у меня два бота: один на Python (мониторинг сервера), второй на n8n (FAQ и обратная связь). Работают параллельно, не мешают друг другу.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *