Как я написал телеграм-бота на n8n без единой строчки кода
Зачем мне бот без кода
Я уже рассказывал, что написал телеграм-бота на 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 и обратная связь). Работают параллельно, не мешают друг другу.