Простейший ИИ-ассистент

В мире автоматизации бизнеса я часто сталкиваюсь с одной и той же проблемой. Предпринимателям, менеджерам и обычным пользователям нужны не «комбайны» с сотней настроек, а максимально простые продукты. Продукты, которые не требуют колоссальных технических знаний и с которыми пользователь может справиться самостоятельно, без вечного обращения к разработчику. В этой статье я делюсь практическим опытом создания такого инструмента - умного ассистента-помощника на базе n8n. Его задача проста: отвечать на самые частые вопросы клиентов, разгружая службу поддержки и экономя время.

Что потребуется для реализации:

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

• Сервер с установленным n8n

• Доступ к Google API — для работы с таблицей базы знаний (Google Sheets) здесь конечно нужно пободаться с Гуглом, но в принципе не сложно.

• Telegram-бот - как интерфейс общения с пользователем

• Доступ к API языковой модели — ChatGPT (OpenAI), DeepSeek API, OpenRouter (оплата зарубежными картами, либо посредников которых огромное количество на просторах рунета), в моем случае AI-RAPI (можно оплатить картой РФ).

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

Общая архитектура workflow

Наш ассистент работает по следующей логике:

  1. Пользователь пишет сообщение в Telegram-бот
  2. Система определяет намерение пользователя (приветствие, вопрос или оффтоп)
  3. Если это вопрос — бот ищет ответ в Google Sheets
  4. Формирует ответ с помощью AI-модели, строго следуя инструкциям
  5. Отправляет ответ пользователю
Общая схема Workflow
Общая схема Workflow

Пошаговый разбор нод

Шаг 1. Получение сообщения от пользователя

Нода: Telegram Trigger

Это входная точка. Нода слушает входящие сообщения от Telegram-бота. Когда пользователь пишет, сюда приходят: текст сообщения, ID чата, имя, username.

Дальнейшие ноды будут использовать эти данные.

Шаг 2. Фильтрация сообщений оператора

Нода: Фильтр оператора

У нас есть два типа пользователей: обычные клиенты и оператор (администратор). Оператору бот не отвечает автоматически — он нужен для ручного управления.

Нода проверяет: если сообщение от оператора - отправляем на ветку ручной обработки. Если от обычного пользователя - идем дальше.

Без этой проверки бот начал бы отвечать на наши же служебные сообщения, что быстро сломало бы логику.

Для того, чтобы определить, что сообщение от оператора - нужно фильтровать сообщения по ID. Получаем ID в боте @userinfobot и вставляем в окно отмеченное красным прямоугольником.

Нода: Фильтр оператора
Нода: Фильтр оператора

Шаг 3. Определение намерения пользователя

Нода: Проверка намерения (AI-Agent)

Прежде чем что-то отвечать, нужно понять, чего хочет пользователь. Эта нода использует языковую модель, которая возвращает только одно из трех значений:

  • start — приветствие, начало диалога
  • faq — вопрос, запрос информации
  • other — благодарности, прощание, флуд

Промт я составил так, чтобы модель строго классифицировала сообщение и не «фантазировала». Это экономит токены и ускоряет обработку.

Связанные ноды:

  • AI-RAPI Chat Model — языковая модель (у меня AI-RAPI; альтернативы — ChatGPT, DeepSeek, OpenRouter)
  • Simple Memory — контекст на 10 последних сообщений, чтобы классификатор понимал диалог
Простейший ИИ-ассистент
Простейший ИИ-ассистент

у языковой модели ставим температуру поменьше, чтобы не ИИ не додумывал лишнего, а работал строго по промту (можно еще ограничить вывод токенами, но я не стал).

Простейший ИИ-ассистент

Памяти даём контекст на последние 10 сообщений (можно и 5 в принципе). Сессионный ключ берем из первой ноды, обязательно в поле Session ID выбираем перед этим Define below.

Шаг 4. Маршрутизация по типу сообщения

Нода: Switch

По результату классификации (start / faq / other) направляем пользователя на разные ветки:

start Отправляем приветствие

faq Запускаем поиск ответа в базе знаний

other Пересылаем сообщение оператору

Простейший ИИ-ассистент

Шаг 5. Обработка приветствия

Нода: Отправляем приветствие

Если пользователь написал «Привет», «Здравствуйте» или что-то в этом роде, бот отвечает:

Привет! Я виртуальный помощник. Чем могу помочь? 😊

Простые вещи. Но без этого диалог часто обрывается - человек не понимает, что делать дальше. Когда бот сам предлагает помощь - количество брошенных диалогов заметно снижается.

Простейший ИИ-ассистент

Шаг 6. Обработка оффтопа (пересылка оператору)

Нода: Сообщение оператору

Если пользователь пишет что-то не по делу (спасибо, пока, бессмысленный набор символов), бот не пытается отвечать. Вместо этого отправляю оператору уведомление:

  • ID пользователя
  • Имя и username
  • Текст сообщения

Оператор видит это и, если нужно, отвечает вручную, нажав «Reply» на уведомлении.

Простейший ИИ-ассистент

В поле Chat ID вставляем ID оператора, который мы уже использовали в шаге 2.

Шаг 7. Ручной ответ оператора (обработка reply)

Нода: Фиксируем chatID

Когда оператор отвечает на уведомление, система должна понять, кому отправлять ответ. Эта нода извлекает ID пользователя из исходного сообщения и текст ответа оператора.

Алгоритм:

  1. Проверяет, что сообщение является ответом (reply) на предыдущее
  2. Парсит ID пользователя из текста уведомления
  3. Возвращает объект с userChatId и replyText

Шаг 8. Отправка ручного ответа пользователю

Нода: Ответ пользователю

Получив ID пользователя и текст ответа, нода отправляет сообщение пользователю в Telegram (сообщение пользователю придет в боте от его лица)

Шаг 9. Основной поток: обработка вопроса (faq)

Если пользователь задал вопрос, попадаем на ветку faq.

Сначала — Анимация набора. Бот отправляет в Telegram сигнал «печатает». Пользователь видит три точки и понимает, что ответ готовится.

Шаг 10. Сообщение «Секундочку»

Нода: Секундочку

Перед поиском ответа отправляю временное сообщение: «Секундочку, ищу информацию ⏳».

Это снимает ощущение «зависания». Пользователь знает, что всё работает, нужно просто подождать. После получения ответа это сообщение будет удалено, чтобы не засорять диалог.

Шаг 11. Поиск ответа в базе знаний (Google Sheets)

Нода: Получаем FAQ

Подключаюсь к Google Sheets, где хранится база знаний.

Структура таблицы у меня такая:

  • question — вопрос
  • category — категория
  • keywords — ключевые слова
  • short_answer — краткий ответ
  • full_answer — полный ответ

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

Простейший ИИ-ассистент

Шаг 12. Форматирование FAQ для AI

Нода: Форматирование FAQ для AI

Google Sheets возвращает данные в «сыром» виде. Формат может быть разным — массив, объект с полем data, rows и т.д. Нода приводит всё к единому виду.

Что делает:

  1. Парсит входящие данные, определяя их структуру
  2. Преобразует каждую строку таблицы в формат:1. [категория] вопросКлючевые слова: ...Ответ: краткий ответ
  3. Возвращает объект с полями:userMessage — исходный вопрос пользователяchatId — ID чатаfaqText — отформатированная база знаний для промптаfaqData — оригинальные данные (на случай если понадобятся для отладки)

Шаг 13. Вторая анимация

Нода: Анимация набора1

Перед тем как обратиться к AI за финальным ответом, снова отправляю сигнал «печатает». Между «Секундочку» и готовым ответом может пройти несколько секунд (нейросети иногда думают дольше). Вторая анимация держит пользователя в курсе.

Шаг 14. Генерация ответа AI

Нода: Пишем ответ

Центральная нода. Формирует финальное сообщение.

Использует:

  • Языковую модель: Температура 0.2 — чтобы ответы были предсказуемыми, без лишней креативности (OpenRouter, Deepseek, ChatGPT, AI-RAPI)
  • Память: Simple Memory — контекст последних 10 сообщений.
  • Промт: системный промт.

Системный промт включает:

  • Роль и контекст (дружелюбный ассистент, общение на «вы»)
  • Иерархию источников: сначала база знаний, потом общие знания, если не нашлось — предложить обратиться к оператору
  • Стиль: 1–3 абзаца, без канцелярита, без служебных маркеров («Ответ:», «Из базы:»)
  • Запреты: не выдумывать факты, не давать опасные советы
  • Примеры (few-shot) — 4 диалога, чтобы модель понимала нужный тон

Ключевое: AI обязан сначала искать ответ в faqText и только если там ничего нет — использовать общие знания.

Простейший ИИ-ассистент

Шаг 15. Удаление временного сообщения

Нода: Delete a chat message

После того как AI сгенерировал ответ, удаляю сообщение «Секундочку». В диалоге остается только вопрос пользователя и ответ бота. Чисто и аккуратно.

Шаг 16. Отправка финального ответа

Нода: Отправляем ответ

Финальная нода. Берет сгенерированный AI-ответ и отправляет пользователю в Telegram.

Вот такой простейший, но полностью рабочий ИИ-ассистент получился.

Обратите внимание: здесь нет векторных баз данных, нет эмбеддингов, нет сложной инфраструктуры на десятки микросервисов. Только инструменты, до которых можно дотянуться рукой:

  • n8n - визуальный конструктор, где логика собирается как пазл
  • Google Sheets - таблица, которую заполнит даже менеджер без технического образования
  • Telegram - мессенджер, который есть у каждого клиента
  • API языковой модели - настройка через пару полей с ключом

Всё это настраивается без глубоких знаний программирования. Базовое понимание, что такое API, как создать бота в Telegram и как скопировать ID таблицы - этого достаточно. Остальное собирается мышкой в n8n.

Что в итоге:

Ассистент работает 24/7. Отвечает на типовые вопросы, пока сотрудники занимаются задачами, которые требуют человеческого участия. Базу знаний пополняет сам бизнес - просто добавляет строки в таблицу. Если вопрос сложный или нестандартный - бот отправляет уведомление оператору, и тот отвечает вручную.

Никаких танцев с бубном. Никакой необходимости нанимать разработчика для каждого изменения. Всё под контролем у того, кто ведет таблицу.

Блогером никогда быть не хотел и не хочу, но чтобы материалы были в одном месте я решил создать канал в тг (там пока я один, подписываться не прошу): t.me/n8n_kitchen

Шаблоны n8n и Google Sheet выложу туда.

Всем спасибо за внимание)

Начать дискуссию